여기, 보라 : 당신은 정확히 학습 데이터의 끝을 볼 수 있습니다. 훈련 데이터는 에서 로갑니다 .
나는 tanh 활성화와 함께 Keras와 1-100-100-2 밀도 네트워크를 사용했습니다. p와 q의 두 값 p에서 q의 결과를 계산합니다. 이렇게하면 1 값보다 작은 값만 사용하여 모든 크기의 숫자를 얻을 수 있습니다.
나는 여전히이 분야의 초보자이므로 참고하십시오.
여기, 보라 : 당신은 정확히 학습 데이터의 끝을 볼 수 있습니다. 훈련 데이터는 에서 로갑니다 .
나는 tanh 활성화와 함께 Keras와 1-100-100-2 밀도 네트워크를 사용했습니다. p와 q의 두 값 p에서 q의 결과를 계산합니다. 이렇게하면 1 값보다 작은 값만 사용하여 모든 크기의 숫자를 얻을 수 있습니다.
나는 여전히이 분야의 초보자이므로 참고하십시오.
답변:
피드 포워드 네트워크를 사용하고 있습니다. 다른 대답은 FFNN이 훈련 데이터의 범위를 넘어 외삽에 적합하지 않다는 것입니다.
그러나 데이터는주기적인 품질을 갖기 때문에 LSTM을 사용하여 모델링 할 수 있습니다. LSTM은 시퀀스에서 작동하는 다양한 신경망 셀이며 이전에 "본 것"에 대한 "메모리"를 가지고 있습니다. 이 책 의 개요 는 LSTM 접근 방식이 주기적 문제에 대한 적격 한 성공을 제시합니다.
이 경우 훈련 데이터는 일련의 튜플 및 새로운 입력에 대한 정확한 예측을위한 작업 x i + 1 … x i + n입니다. 일부 및 I 인덱스 일부 시퀀스 증가. 각 입력 시퀀스의 길이, 포함되는 간격의 너비 및 간격은 사용자가 결정합니다. 직관적으로, 나는 1주기를 다루는 규칙적인 그리드가 시작하기에 좋은 장소가 될 것으로 기대합니다. 훈련 시퀀스는 일정한 간격으로 제한되지 않고 광범위한 값을 다루는 훈련 시퀀스입니다.
(네즈 - Guarneros, 막 디엘과 고메즈 - 길, 필라 및 폰세카 - 델가도, 리고베르토와 라미레즈 - 코르테스, 마누엘 및 알라르 콘 - 키노, 비센테 "고 LSTM 신경망을 사용하여 사인 함수의 장기 예측"에서 자연 - 하이브리드 지능형 시스템의 영감을받은 디자인 )
당신이하고 싶은 것이 이와 같은 간단한 주기적 기능을 배우는 것이라면 가우시안 프로세스를 사용할 수 있습니다. GP를 사용하면 적절한 공분산 함수를 지정하여 도메인 지식을 어느 정도 적용 할 수 있습니다. 이 예제에서는 데이터가 주기적이라는 것을 알고 있으므로 주기적 커널을 선택한 다음 모델이이 구조를 추정합니다. 그림에서 예제를 볼 수 있습니다. 조수 높이 데이터를 맞추려고 노력하고 있기 때문에 주기적 구조를 가지고 있음을 알고 있습니다. 나는 주기적 구조를 사용하고 있기 때문에, 모델은이 주기성을 어느 정도 정확하게 추정합니다. 신경망에 대해 배우려는 경우 OFC는 실제로 관련이 없지만 수동 공학 기능보다 약간 더 좋은 접근법 일 수 있습니다. 또한 신경망과 GP는 이론적으로 밀접한 관련이 있습니다.
신경망과 달리 GP는 큰 데이터 세트 및 딥 네트워크로 확장하기가 어렵 기 때문에 항상 유용하지는 않지만, 이와 같은 저 차원 문제에 관심이있는 경우 더 빠르고 안정적 일 수 있습니다.
(그림에서 검은 점은 훈련 데이터이고 빨간색은 목표입니다. 정확하게 맞지는 않더라도 모델은 주기성을 대략 학습합니다. 색상 밴드는 모델의 신뢰 구간입니다. 예측)
신경망을 포함한 기계 학습 알고리즘은 임의의 기능을 근사화하는 방법을 학습 할 수 있지만 충분한 훈련 데이터 밀도가있는 구간 에서만 학습 할 수 있습니다 .
통계 기반 머신 러닝 알고리즘은 보간을 수행 할 때 가장 효과적입니다. 훈련 예제에 근접하거나 그 사이에있는 값을 예측합니다.
훈련 데이터 외에는 외삽을 기대하고 있습니다. 그러나 그것을 달성하는 쉬운 방법은 없습니다. 신경망은 대략 통계를 통해서만 분석적으로 함수를 학습하지 않습니다. 이는 거의 모든지도 학습 ML 기술에 해당됩니다. 고급 알고리즘은 충분한 예제 (및 모델의 자유 매개 변수)가 주어지면 선택한 함수에 임의로 접근 할 수 있지만 제공된 교육 데이터 범위에서만 가능합니다.
네트워크 (또는 다른 ML)가 교육 데이터 범위 밖에서 동작하는 방식은 사용 된 활성화 기능을 포함한 아키텍처에 따라 다릅니다.
경우에 따라 주기적 기능으로 기능을 변환하는 @Neil Slater의 제안 된 접근 방식이 매우 효과적이며 최상의 솔루션 일 수 있습니다. 여기서 어려움은 수동으로주기 / 파장을 선택해야한다는 것입니다 ( 이 질문 참조 ).
주기성을 네트워크에 더 깊게 포함 시키려면 가장 쉬운 방법은 sin / cos를 하나 이상의 계층에서 활성화 함수로 사용하는 것입니다. 이 백서 에서는 주기적 활성화 기능을 다루기위한 잠재적 인 어려움과 전략에 대해 설명합니다.
대안 적으로, 이 논문 은 네트워크의 가중치가 주기적 기능에 의존하는 다른 접근법을 취합니다. 이 논문은 또한 더 유연하기 때문에 sin / cos 대신 스플라인을 사용하도록 제안합니다. 이것은 작년에 내가 가장 좋아하는 논문 중 하나이므로 접근 방식을 사용하지 않더라도 읽을 가치가 있습니다.
잘못된 접근 방식을 취했지만이 접근 방식으로 문제를 해결하기 위해 수행 할 수있는 작업이 없습니다.
문제를 해결하는 방법에는 여러 가지가 있습니다. 기능 엔지니어링을 통해 가장 확실한 것을 제안하겠습니다. 시간을 선형 피쳐로 연결하는 대신 나머지 계수 T = 1로 설정하십시오. 예를 들어, t = 0.2, 1.2 및 2.2는 모두 t1 = 0.1 등의 특성이됩니다. 이 것을 인터넷에 연결하고 작동 방식을 확인하십시오.
기능 엔지니어링이 과소 평가되었습니다. AI / ML에는 판매 담당자가 모든 입력을 인터넷에 덤프한다고 주장하는 경향이 있으며, 어떻게 든 입력으로 처리해야하는지 파악할 수 있습니다. 물론, 당신의 예에서 보았 듯이, 그렇게 쉽게 분해됩니다. 이것은 가장 간단한 경우에도 좋은 기능을 구축하는 것이 얼마나 중요한지를 보여주는 훌륭한 예입니다.
또한 이것이 기능 엔지니어링의 가장 조잡한 예라는 것을 알고 싶습니다. 그것은 당신이 그것으로 무엇을 할 수 있는지에 대한 아이디어를 제공하는 것입니다.