신경망 시계열 앱을 사용하여 시계열 데이터 피팅하기
이 예제에서는 신경망 시계열 앱을 사용하여 시계열 데이터를 피팅하도록 얕은 신경망을 훈련시키는 방법을 보여줍니다.
ntstool을 사용하여 신경망 시계열 앱을 엽니다.
ntstool
신경망 선택하기
신경망 시계열 앱을 사용하여 3가지 종류의 시계열 문제를 풀 수 있습니다.
첫 번째 유형의 시계열 문제에서는 시계열의 미래 값 를 그 시계열의 과거 값과 또 하나의 시계열 의 과거 값으로부터 예측합니다. 이러한 형태의 예측을 외생적인(외부) 입력을 갖는 비선형 자기회귀, 즉 NARX라고 합니다.
두 번째 종류의 시계열 문제에는 하나의 시계열만 포함됩니다. 미래의 시계열 값 를 그 시계열의 과거 값만 사용해 예측합니다. 이러한 형태의 예측을 비선형 자기회귀 분석 또는 NAR이라고 합니다.
세 번째 시계열 문제는 입력 시계열(예측 변수) 와 출력 시계열(응답 변수) 라는 두 개의 시계열이 관련되어 있다는 점에서 첫 번째 유형과 유사합니다. 의 이전 값을 알지 못하는 상황에서 의 이전 값으로부터 의 값을 예측하려는 경우입니다.
이 예제에서는 NARX 신경망을 사용합니다. 신경망 선택 > NARX 신경망을 클릭합니다.

데이터 선택하기
신경망 시계열 앱에는 신경망 훈련을 시작하는 데 사용할 수 있는 예제 데이터가 있습니다.
pH 중화 과정 예제 데이터를 가져오려면 가져오기 > 추가 예제 데이터 세트 > pH 중화 데이터 세트 가져오기를 선택하십시오. 이 데이터 세트를 사용하여 산성 용액과 염기성 용액의 흐름으로 용액의 pH를 예측하도록 신경망을 훈련시킬 수 있습니다. 파일이나 작업 공간에서 사용자 소유의 데이터를 가져오면 예측 변수와 응답 변수를 지정해야 합니다.
가져온 데이터에 관한 정보는 모델 요약에 표시됩니다. 이 데이터 세트에는 2,001개의 시간 스텝이 포함되어 있습니다. 예측 변수에는 두 개의 특징(산성 용액과 염기성 용액 흐름)이 있고 응답 변수에는 하나의 특징(용액의 pH)이 있습니다.

데이터를 훈련 세트, 검증 세트, 테스트 세트로 분할합니다. 디폴트 설정을 유지합니다. 데이터는 다음과 같이 분할됩니다.
훈련에 70%.
신경망이 일반화되고 있음을 검증하고 과적합 전에 훈련을 중지하는 데 15%.
신경망 일반화를 독립적으로 테스트하는 데 15%.
데이터 분할에 대한 자세한 내용은 최적의 신경망 훈련을 위해 데이터 분할하기 항목을 참조하십시오.
신경망 만들기
표준 NARX 신경망은 은닉 계층에 시그모이드 전달 함수가 있고 출력 계층에 선형 전달 함수가 있는 2계층 피드포워드 신경망입니다. 이 신경망은 또한 탭 지연선을 사용하여 와 시퀀스의 이전 값을 저장합니다. 는 의 함수이므로 NARX 신경망의 출력값()은 지연을 통해 신경망의 입력으로 피드백됩니다. 그러나 효율적인 훈련을 위해 이 피드백 루프를 열 수 있습니다.
신경망 훈련 중에 참 출력값을 사용할 수 있으므로 아래의 개루프 아키텍처를 사용하면 예상 출력값을 피드백하는 대신 참 출력값이 사용됩니다. 여기에는 두 가지 이점이 있습니다. 첫 번째는 피드포워드 신경망에 대한 입력값이 더 정확하다는 것입니다. 두 번째는 결과 신경망이 순수한 피드포워드 아키텍처를 가지므로 더 효율적인 알고리즘을 훈련에 사용할 수 있다는 것입니다. 이 신경망에 대한 자세한 내용은 시계열 NARX 피드백 신경망 설계하기 항목에서 논의됩니다.
계층 크기 값은 은닉 뉴런 수를 정의합니다. 디폴트 계층 크기 10을 유지합니다. 시간 지연 값을 4로 변경합니다. 신경망 훈련 성능이 좋지 않은 경우 이 수를 조정해야 할 수도 있습니다.
신경망 창에서 신경망 아키텍처를 확인할 수 있습니다.

신경망 훈련시키기
신경망을 훈련시키려면 훈련 > Levenberg-Marquardt를 사용하여 훈련을 선택하십시오. 이는 디폴트 훈련 알고리즘이며 훈련을 클릭하는 것과 동일합니다.

대부분의 문제에 Levenberg-Marquardt(trainlm)를 사용하여 훈련할 것을 권장합니다. 잡음이 있거나 규모가 작은 문제의 경우 베이즈 정규화(Bayesian Regularization)(trainbr)가 시간이 더 오래 걸리더라도 더 좋은 해를 얻을 수 있습니다. 규모가 큰 문제의 경우, 이 두 알고리즘이 사용하는 야코비 행렬 계산보다 메모리 효율이 높은 기울기 계산을 사용한다는 점에서 스케일링된 켤레 기울기(Scaled Conjugate Gradient)(trainscg)를 사용하는 것이 좋습니다.
훈련 창에서 훈련 진행 상황을 확인할 수 있습니다. 훈련은 중지 기준 중 하나를 충족할 때까지 계속됩니다. 이 예제에서는 검증을 6회 연속으로 반복하는 동안 검증 오차가 그전까지의 가장 작은 검증 오차보다 크거나 같을 때까지("검증 기준이 충족됨") 훈련이 계속됩니다.

결과 분석하기
모델 요약에는 훈련 알고리즘에 대한 정보와 각 데이터 세트의 훈련 결과가 포함되어 있습니다.

플롯을 생성하여 결과를 더 자세히 분석할 수 있습니다. 오차 자기상관을 플로팅하려면 플롯 섹션에서 오차 자기상관을 클릭하십시오. 오차 자기상관 플롯은 예측 오차가 시간과 어떻게 관련되어 있는지를 나타냅니다. 완벽한 예측 모델이라면 자기상관 함수에 0이 아닌 값이 하나만 있어야 하며, 그 값이 지연 0에서 발생해야 합니다(이는 평균제곱오차임). 이는 예측 오차가 서로 전혀 상관관계가 없다는 것을 의미합니다(백색 잡음). 예측 오차에 유의미한 상관관계가 있다면 예측을 향상시킬 수 있어야 합니다. 보통은 탭 지연선의 지연 수를 늘리면 됩니다. 이 사례에서는 0 지연을 제외하고는 상관관계가 0을 중심으로 대략 95% 신뢰한계 내에 있으므로 모델이 적절하다고 판단됩니다. 훨씬 더 정확한 결과가 필요한 경우 신경망을 다시 훈련시키면 됩니다. 이렇게 하면 신경망의 초기 가중치와 편향이 변경되고, 재훈련 후 향상된 신경망이 생성될 수 있습니다.

신경망 성능에 대한 추가 검증 결과를 얻기 위해 입력값-오차 상호상관 플롯을 살펴봅니다. 플롯 섹션에서 입력값-오차 상관을 클릭합니다. 입력값-오차 상호상관 플롯은 오차와 입력 시퀀스 간의 상관관계가 어떤지를 보여줍니다. 완벽한 예측 모델의 경우 상관관계는 모두 0이어야 합니다. 입력값이 오차와 상관관계가 있다면 보통은 탭 지연선의 지연 수를 늘림으로써 예측을 향상시킬 수 있을 것입니다. 이 사례에서는 대다수 상관이 0을 중심으로 신뢰한계 내에 있습니다.

플롯 섹션에서 응답 변수를 클릭합니다. 시간에 대해 출력값, 응답 변수(목표값), 오차가 표시됩니다. 또한 선택한 훈련, 테스트 및 검증의 시점이 표시됩니다.

신경망 성능에 만족하지 못하는 경우 다음 중 하나를 수행할 수 있습니다.
신경망을 다시 훈련시킵니다.
은닉 뉴런 수를 늘립니다.
더 큰 훈련 데이터 세트를 사용합니다.
훈련 세트에서의 성능은 좋은데 테스트 세트 성능이 나쁘면 모델이 과적합임을 의미할 수 있습니다. 계층 크기를 줄이고 이에 따라 뉴런의 수를 줄이면 과적합을 줄일 수 있습니다.
또한, 추가 테스트 세트에 대해 신경망 성능을 평가할 수 있습니다. 추가 테스트 데이터를 불러와서 신경망을 평가하려면 테스트 섹션에서 테스트를 클릭하십시오. 모델 요약에 추가 테스트 데이터 결과가 표시됩니다. 플롯을 생성하여 추가 테스트 데이터 결과를 분석할 수도 있습니다.
코드 생성하기
코드 생성 > 단순 훈련 스크립트 생성을 선택하여 명령줄에서 이전 단계를 재현할 수 있는 MATLAB 코드를 만듭니다. 툴박스의 명령줄 기능을 사용하여 훈련 과정을 사용자 지정하는 방법을 배우려면 MATLAB 코드 만들기가 유용할 수 있습니다. 명령줄 함수를 사용하여 시계열 데이터 피팅하기에서 생성된 스크립트를 자세히 조사해야 합니다.

신경망 내보내기
훈련된 신경망을 작업 공간 또는 Simulink®로 내보낼 수 있습니다. 또한, 신경망과 함께 MATLAB Compiler™ 툴과 그 밖의 MATLAB 코드 생성 툴을 배포할 수 있습니다. 훈련된 신경망과 결과를 내보내려면 모델 내보내기 > 작업 공간으로 내보내기를 선택하십시오.

참고 항목
신경망 피팅 | 신경망 시계열 | 신경망 패턴 인식 | 신경망 군집화 | train | preparets | narxnet | closeloop | perform | removedelay