Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

얕은 신경망을 사용한 시계열 예측 및 모델링

동적 신경망은 시계열 예측에 효과적입니다. 개루프 형태, 폐루프 형태 및 개/폐 루프 다중 스텝 예측에 적용되는 NARX 신경망의 사용 예제를 보려면 다중 스텝 신경망 예측 항목을 참조하십시오.

시계열 데이터에 대한 딥러닝은 딥러닝을 사용한 시퀀스 분류 항목을 대신 참조하십시오.

예를 들어, pH 중화 과정 데이터가 있다고 가정하겠습니다. 과거의 pH 값과 탱크로 유입되는 과거의 산 및 염기 값으로부터 탱크 내 용액의 pH를 예측할 수 있는 신경망을 설계하려고 합니다. 총 2,001개의 시간 스텝이 있고 각각에 시계열 데이터가 있습니다.

다음 두 가지 방법으로 이 문제를 해결할 수 있습니다.

일반적으로 GUI로 시작한 다음 GUI를 사용하여 명령줄 스크립트를 자동으로 생성하는 것이 가장 좋습니다. 두 방법 중 하나를 사용하기 전에 먼저 수행해야 할 첫 번째 단계는 데이터 세트를 선택해 문제를 정의하는 것입니다. 각 GUI는 툴박스를 실험하는 데 쓸 수 있는 여러 샘플 데이터 세트에 액세스할 수 있습니다. 해결하려는 특정한 문제가 있는 경우, 자신의 데이터를 작업 공간으로 불러올 수 있습니다. 다음 섹션에서는 데이터 형식을 설명합니다.

문제 정의하기

툴박스에 적합하게 시계열 문제를 정의하려면 TS 입력 벡터 세트를 셀형 배열의 열로 정렬하십시오. 그런 다음 또 하나의 세트인 TS 목표 벡터 세트(각 입력 벡터에 대한 올바른 출력 벡터)를 두 번째 셀형 배열로 정렬합니다. (정적 및 시계열 데이터의 데이터 형식 지정에 대한 자세한 설명은 “데이터 구조”를 참조하십시오.) 하지만 목표 데이터 세트만 있으면 되는 경우도 있습니다. 예를 들어, 아래와 같이 시계열의 이전 값을 사용하여 다음 값을 예측하는 시계열 문제를 정의할 수 있습니다.

targets = {1 2 3 4 5};

다음 섹션에서는 Neural Network Time Series 앱 ntstool을 사용하여 시계열 데이터 세트에 맞게 신경망을 훈련시키는 방법을 보여줍니다. 이 예제에서는 툴박스와 함께 제공된 pH 중화 데이터 세트를 사용합니다.

Neural Network Time Series 앱 사용하기

  1. 필요한 경우 다음 명령을 사용하여 Neural Network Start GUI를 엽니다.

    nnstart
    

  2. Time Series App을 클릭하여 Neural Network Time Series 앱을 엽니다. (ntstool 명령을 사용할 수도 있습니다.)

    이 열기 창은 다른 GUI의 열기 창과 다르다는 점에 유의하십시오. 이는 ntstool을 사용하여 세 가지 유형의 서로 다른 시계열 문제를 해결할 수 있기 때문입니다.

    • 첫 번째 유형의 시계열 문제에서는 시계열의 미래 값 y(t)를 그 시계열의 과거 값과 또 하나의 시계열 x(t)의 과거 값으로부터 예측합니다. 이러한 형태의 예측을 외생적인(외부) 입력을 갖는 비선형 자기회귀, 즉 NARX라 하며("NARX 신경망"(narxnet, closeloop) 참조), 다음과 같이 쓸 수 있습니다.

      y(t) = f(y(t – 1), ..., y(t – d), x(t – 1), ..., (t – d))

      이 모델은 실업률, GDP 등의 경제 변수를 기반으로 주식 또는 채권의 미래 가치를 예측하는 데 사용할 수 있습니다. 또한 시스템 식별에 사용할 수 있는데, 이때 개발되는 모델은 화학 공정, 제조 시스템, 로보틱스, 항공 우주 비행체와 같은 동적 시스템을 표현합니다.

    • 두 번째 종류의 시계열 문제에는 하나의 시계열만 포함됩니다. 미래의 시계열 값 y(t)를 그 시계열의 과거 값만 사용해 예측합니다. 이러한 형태의 예측은 비선형 자기회귀 분석 또는 NAR이라고 하며 다음과 같이 쓸 수 있습니다.

      y(t) = f(y(t – 1), ..., y(t – d))

      이 모델 역시 금융 상품을 예측하는 데 사용할 수 있지만, 동반 시계열을 사용하지 않습니다.

    • 세 번째 시계열 문제는 입력 시계열 x(t)와 출력/목표 시계열 y(t)라는 두 개의 시계열이 관련되어 있다는 점에서 첫 번째 유형과 유사합니다. y(t)의 이전 값을 알지 못하는 상황에서 x(t)의 이전 값으로부터 y(t)의 값을 예측하려는 경우입니다. 이 입력/출력 모델은 다음과 같이 쓸 수 있습니다.

      y(t) = f(x(t – 1), ..., x(t – d))

      NARX 모델은 이전 값 y(t)에 포함된 추가 정보를 사용하므로 이 입력-출력 모델보다 더 나은 예측을 제공합니다. 그러나 이전 값 y(t)를 사용할 수 없는 일부 응용 사례가 있을 수 있습니다. 이러한 경우가 NARX 모델 대신 입력-출력 모델을 사용할 필요가 있는 유일한 경우입니다.

  3. 이 예제에서는 NARX 모델을 선택하고 Next를 클릭하여 계속 진행합니다.

  4. Select Data 창에서 Load Example Data Set를 클릭합니다. Time Series Data Set Chooser 창이 열립니다.

    참고

    MATLAB® 작업 공간에서 데이터를 불러오려면 Select Data 창의 InputsTargets 옵션을 사용하십시오.

  5. pH Neutralization Process를 선택한 다음 Import를 클릭합니다. 그러면 Select Data 창으로 돌아갑니다.

  6. Next를 클릭하여 다음 그림과 같이 Validation and Test Data 창을 엽니다.

    검증 데이터 세트와 테스트 데이터 세트는 각각 원본 데이터의 15%로 설정되어 있습니다.

    이러한 설정을 사용하면 입력 벡터와 목표 벡터가 다음과 같이 임의로 세 세트로 나뉩니다.

    • 70%는 훈련에 사용됩니다.

    • 15%는 신경망이 일반화되고 있음을 검증하고 과적합 전에 훈련을 중지하는 데 사용됩니다.

    • 마지막 15%는 신경망 일반화를 완전히 독립적으로 테스트하는 데 사용됩니다.

    (데이터 분할 과정에 대한 자세한 논의는 “데이터 분할하기”를 참조하십시오.)

  7. Next를 클릭합니다.

    표준 NARX 신경망은 은닉 계층에 시그모이드 전달 함수가 있고 출력 계층에 선형 전달 함수가 있는 2계층 피드포워드 신경망입니다. 이 신경망은 또한 탭 지연선을 사용하여 x(t)와 y(t) 시퀀스의 이전 값을 저장합니다. y(t) y(t – 1), y(t – 2), ..., y(t – d)의 함수이므로 NARX 신경망의 출력 y(t)는 지연을 통해 신경망 입력으로 피드백됩니다. 그러나 효율적인 훈련을 위해 이 피드백 루프를 열 수 있습니다.

    신경망 훈련 중에 참 출력값을 사용할 수 있으므로 위의 개루프 아키텍처를 사용하면 예상 출력값을 피드백하는 대신 실제 출력값이 사용됩니다. 여기에는 두 가지 이점이 있습니다. 첫 번째는 피드포워드 신경망에 대한 입력값이 더 정확하다는 것입니다. 두 번째는 결과 신경망이 순수한 피드포워드 아키텍처를 가지므로 더 효율적인 알고리즘을 훈련에 사용할 수 있다는 것입니다. 이 신경망에 대한 자세한 내용은 "NARX 신경망"(narxnet, closeloop)에서 논의됩니다.

    은닉 뉴런의 디폴트 개수는 10으로 설정됩니다. 지연의 디폴트 수는 2입니다. 이 값을 4로 변경하십시오. 신경망 훈련 성능이 좋지 않은 경우 이 수를 조정해야 할 수도 있습니다.

  8. Next를 클릭합니다.

  9. 훈련 알고리즘을 선택한 다음 Train을 클릭합니다. Levenberg-Marquardt(trainlm)가 대부분의 문제에 권장되지만, 잡음이 있고 규모가 작은 일부 문제의 경우 베이즈 정규화(Bayesian Regularization)(trainbr)가 시간이 더 오래 걸리더라도 더 좋은 해를 얻을 수 있습니다. 그러나 규모가 큰 문제의 경우, 이 두 알고리즘이 사용하는 야코비 행렬 계산보다 메모리 효율이 높은 기울기 계산을 사용한다는 점에서 스케일링된 켤레 기울기(Scaled Conjugate Gradient)(trainscg)를 사용하는 것이 좋습니다. 이 예제에서는 디폴트 값인 Levenberg-Marquardt를 사용합니다.

    검증 오차가 6회 반복 동안 감소하지 않을 때까지(즉, 검증이 중지될 때까지) 훈련이 계속되었습니다.

  10. Plots에서 Error Autocorrelation을 클릭합니다. 이는 신경망 성능을 검증하는 데 사용됩니다.

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

  11. 신경망 성능에 대한 추가 검증 결과를 얻기 위해 입력값-오차 상호상관 함수를 살펴봅니다. Plots 창에서 Input-Error Cross-correlation을 클릭합니다.

    이 입력값-오차 상호상관 함수는 오차와 입력 시퀀스 x(t) 간의 상관관계가 어떤지를 보여줍니다. 완벽한 예측 모델의 경우 상관관계는 모두 0이어야 합니다. 입력값이 오차와 상관관계가 있다면 보통은 탭 지연선의 지연 수를 늘림으로써 예측을 향상시킬 수 있을 것입니다. 이 사례에서는 상관관계가 모두 0을 중심으로 신뢰한계 내에 있습니다.

  12. Plots에서 Time Series Response를 클릭합니다. 시간에 대해 입력값, 목표값 및 오차가 표시됩니다. 또한 선택한 훈련, 테스트 및 검증 시점이 표시됩니다.

  13. Neural Network Time Series 앱에서 Next를 클릭하여 신경망을 평가합니다.

    이 점에서 새 데이터에 대해 신경망을 테스트할 수 있습니다.

    원본 또는 새 데이터에 대한 신경망 성능에 만족하지 못하는 경우 다음 중 하나를 수행할 수 있습니다.

    • 다시 훈련시킵니다.

    • 뉴런 수 및/또는 지연 수를 늘립니다.

    • 더 큰 훈련 데이터 세트를 가져옵니다.

    훈련 세트에서의 성능은 좋은데 테스트 세트 성능이 현저하게 나쁘면 과적합을 의미할 수 있으며, 그런 경우 뉴런 수를 줄이면 결과가 향상될 수 있습니다.

  14. 신경망 성능에 만족하면 Next를 클릭합니다.

  15. 이 패널을 사용하여 신경망 시뮬레이션을 위한 MATLAB 함수 또는 Simulink® 다이어그램을 생성합니다. 생성된 코드 또는 도식을 사용하여 신경망이 입력값에서 출력값을 계산하는 방법을 더 명확히 이해하고, 신경망과 함께 MATLAB Compiler™ 툴과 그 밖의 MATLAB 및 Simulink 코드 생성 툴을 배포할 수 있습니다.

  16. 이 화면의 버튼을 사용하여 스크립트를 생성하거나 결과를 저장합니다.

    • Simple Script 또는 Advanced Script를 클릭하여 명령줄에서 이전 단계를 모두 재현하는 데 사용할 수 있는 MATLAB 코드를 만들 수 있습니다. 툴박스의 명령줄 기능을 사용하여 훈련 과정을 사용자 지정하는 방법을 배우려면 MATLAB 코드 만들기가 유용할 수 있습니다. 명령줄 함수 사용하기에서, 생성된 스크립트를 자세히 조사해야 합니다.

    • 신경망을 작업 공간에 net으로 저장할 수도 있습니다. 신경망에 대해 추가로 테스트를 수행하거나 새로운 입력값에 대해 작업을 수행할 수 있습니다.

  17. MATLAB 코드를 생성하고 그 결과를 저장한 후 Finish를 클릭합니다.

명령줄 함수 사용하기

툴박스의 명령줄 기능 사용법을 학습하는 가장 쉬운 방법은 GUI에서 스크립트를 생성한 다음 이를 수정하여 신경망 훈련을 사용자 지정하는 것입니다. 예를 들어, 이전 섹션의 단계 15에서 작성된 간단한 스크립트를 보십시오.

% Solve an Autoregression Problem with External 
% Input with a NARX Neural Network
% Script generated by NTSTOOL
%
% This script assumes the variables on the right of 
% these equalities are defined:
%
%   phInputs - input time series.
%   phTargets - feedback time series.

inputSeries = phInputs;
targetSeries = phTargets;

% Create a Nonlinear Autoregressive Network with External Input
inputDelays = 1:4;
feedbackDelays = 1:4;
hiddenLayerSize = 10;
net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize);

% Prepare the Data for Training and Simulation
% The function PREPARETS prepares time series data 
% for a particular network, shifting time by the minimum 
% amount to fill input states and layer states.
% Using PREPARETS allows you to keep your original 
% time series data unchanged, while easily customizing it 
% for networks with differing numbers of delays, with
% open loop or closed loop feedback modes.
[inputs,inputStates,layerStates,targets] = ... 
    preparets(net,inputSeries,{},targetSeries);

% Set up Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

% Train the Network
[net,tr] = train(net,inputs,targets,inputStates,layerStates);

% Test the Network
outputs = net(inputs,inputStates,layerStates);
errors = gsubtract(targets,outputs);
performance = perform(net,targets,outputs)

% View the Network
view(net)

% Plots
% Uncomment these lines to enable various plots.
% figure, plotperform(tr)
% figure, plottrainstate(tr)
% figure, plotregression(targets,outputs)
% figure, plotresponse(targets,outputs)
% figure, ploterrcorr(errors)
% figure, plotinerrcorr(inputs,errors)

% Closed Loop Network
% Use this network to do multi-step prediction.
% The function CLOSELOOP replaces the feedback input with a direct
% connection from the output layer.
netc = closeloop(net);
netc.name = [net.name ' - Closed Loop'];
view(netc)
[xc,xic,aic,tc] = preparets(netc,inputSeries,{},targetSeries);
yc = netc(xc,xic,aic);
closedLoopPerformance = perform(netc,tc,yc)

% Early Prediction Network
% For some applications it helps to get the prediction a 
% timestep early.
% The original network returns predicted y(t+1) at the same 
% time it is given y(t+1).
% For some applications such as decision making, it would 
% help to have predicted y(t+1) once y(t) is available, but 
% before the actual y(t+1) occurs.
% The network can be made to return its output a timestep early 
% by removing one delay so that its minimal tap delay is now 
% 0 instead of 1.  The new network returns the same outputs as 
% the original network, but outputs are shifted left one timestep.
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(nets)
[xs,xis,ais,ts] = preparets(nets,inputSeries,{},targetSeries);
ys = nets(xs,xis,ais);
earlyPredictPerformance = perform(nets,ts,ys)

스크립트를 저장한 다음 명령줄에서 실행하여 이전 GUI 세션의 결과를 재현할 수 있습니다. 스크립트를 편집하여 훈련 과정을 사용자 지정할 수도 있습니다. 이 사례에서는 스크립트의 각 단계를 따르십시오.

  1. 이 스크립트는 입력 벡터와 목표 벡터를 이미 작업 공간에 불러온 상태라고 가정합니다. 데이터를 불러오지 않은 경우 다음과 같이 불러올 수 있습니다.

    load ph_dataset
    inputSeries = phInputs;
    targetSeries = phTargets;
    
  2. 신경망을 만듭니다. NARX 신경망 narxnet은 은닉 계층에 디폴트 탄젠트-시그모이드 전달 함수가 있고 출력 계층에 선형 전달 함수가 있는 피드포워드 신경망입니다. 이 신경망에는 두 개의 입력이 있습니다. 하나는 외부 입력이고 다른 하나는 신경망 출력의 피드백 연결입니다. (나중에 보게 되듯이 신경망을 훈련시킨 후에는 이 피드백 연결을 닫을 수 있습니다.) 이러한 각각의 입력에 대해 이전 값을 저장하는 탭 지연선이 있습니다. NARX 신경망용 신경망 아키텍처를 할당하려면 각 탭 지연선과 관련된 지연과 은닉 계층 뉴런의 수를 선택해야 합니다. 다음 단계에서는 입력 지연과 피드백 지연을 1에서 4까지의 범위로 할당하고 은닉 뉴런 수를 10으로 지정합니다.

    inputDelays = 1:4;
    feedbackDelays = 1:4;
    hiddenLayerSize = 10;
    net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize);
    

    참고

    뉴런 수와 지연 수를 늘리면 더 많은 계산이 필요하고 데이터를 과적합하는 경향이 발생하지만, 신경망으로 더 복잡한 문제를 해결할 수 있습니다. 계층이 많을수록 계산이 많이 필요하지만, 많은 계층을 사용하면 복잡한 문제를 더 효율적으로 해결할 수 있습니다. 두 개 이상의 은닉 계층을 사용하려면 fitnet 명령에 은닉 계층의 크기를 배열의 요소로 입력하십시오.

  3. 훈련을 위해 데이터를 준비합니다. 탭 지연선을 포함하는 신경망을 훈련시킬 때 지연을 신경망의 입력과 출력의 초기값으로 채울 필요가 있습니다. 이 과정을 용이하게 하는 툴박스 명령이 preparets입니다. 이 함수에는 신경망, 입력 시퀀스 및 목표 시퀀스의 세 가지 입력 인수가 있습니다. 이 함수는 신경망의 탭 지연선을 채우는 데 필요한 초기 조건과, 그 초기 조건이 제거된 시점의 수정된 입력 시퀀스 및 목표 시퀀스를 반환합니다. 다음과 같이 함수를 호출할 수 있습니다.

    [inputs,inputStates,layerStates,targets] = ...
        preparets(net,inputSeries,{},targetSeries);
    
  4. 데이터 분할을 설정합니다.

    net.divideParam.trainRatio = 70/100;
    net.divideParam.valRatio   = 15/100;
    net.divideParam.testRatio  = 15/100;
    

    이러한 설정을 사용하면 입력 벡터와 목표 벡터가 임의로 나뉘어, 70%는 훈련, 15%는 검증, 15%는 테스트에 사용됩니다.

  5. 신경망을 훈련시킵니다. 신경망은 훈련용으로 디폴트 값인 Levenberg-Marquardt 알고리즘(trainlm)을 사용합니다. Levenberg-Marquardt가 원하는 만큼 정확한 결과를 내지 못하거나 큰 데이터 문제가 발생하는 경우, 다음 중 하나를 사용하여 신경망 훈련 함수를 베이즈 정규화(Bayesian Regularization)(trainbr) 또는 스케일링된 켤레 기울기(Scaled Conjugate Gradient)(trainscg)로 설정하는 것이 좋습니다.

    net.trainFcn = 'trainbr';
    net.trainFcn = 'trainscg';

    신경망을 훈련시키려면 다음과 같이 입력하십시오.

    [net,tr] = train(net,inputs,targets,inputStates,layerStates);
    

    훈련 중에 다음 훈련 창이 열립니다. 이 창에는 훈련 진행 상황이 표시되며 Stop Training을 클릭하여 언제든지 훈련을 중단할 수 있습니다.

    이 훈련은 6회 반복 동안 검증 오차가 증가했을 때 중지되었으며, 44회째 반복에서 중지되었습니다.

  6. 신경망을 테스트합니다. 훈련을 마친 신경망을 사용하여 신경망 출력값을 계산할 수 있습니다. 다음 코드는 신경망 출력값, 오차 및 전체 성능을 계산합니다. 탭 지연선이 있는 신경망을 시뮬레이션하려면 지연된 이 신호에 초기값을 할당해야 합니다. 이는 초기 단계에서 preparets에서 제공하는 inputStateslayerStates를 사용하여 수행됩니다.

    outputs = net(inputs,inputStates,layerStates);
    errors = gsubtract(targets,outputs);
    performance = perform(net,targets,outputs)
    
    performance =
    
        0.0042
    
    
  7. 신경망 도식을 확인합니다.

    view(net)
    

  8. 있을 수 있는 과적합을 확인하기 위해 성능 훈련 기록을 플로팅합니다.

    figure, plotperform(tr)
    

    이 그림에서 훈련 오차와 검증 오차는 강조 표시된 Epoch에 다다를 때까지 감소하고 있습니다. 이 Epoch 이전에는 검증 오차가 증가하지 않으므로 과적합은 발생하지 않은 것 같습니다.

    모든 훈련은 검증 및 테스트 단계를 포함해 개루프(직렬-병렬 아키텍처라고도 함)에서 수행됩니다. 일반적인 워크플로는 개루프에서 신경망을 완전히 생성한 다음, (검증 및 테스트 단계를 포함해) 신경망의 훈련이 끝났을 때에만 이를 향후 다중 스텝의 사전 예측을 위한 폐루프로 변환하는 것입니다. 마찬가지로 GUI의 R 값은 개루프 훈련 결과를 기반으로 계산됩니다.

  9. NARX 신경망에서 루프를 닫습니다. 피드백 루프가 NARX 신경망에서 열리면 한 스텝 사전 예측이 수행됩니다. 이는 y(t)의 이전 값과 x(t)의 이전 값으로부터 다음 값 y(t)를 예측하는 것입니다. 피드백 루프를 닫으면 다중 스텝 사전 예측을 수행하는 데 사용할 수 있습니다. 이는 실제 미래 값 y(t) 대신에 예측 y(t)가 사용되기 때문입니다. 다음 명령을 사용하여 루프를 닫고 폐루프 성능을 계산할 수 있습니다.

    netc = closeloop(net);
    netc.name = [net.name ' - Closed Loop'];
    view(netc)
    [xc,xic,aic,tc] = preparets(netc,inputSeries,{},targetSeries);
    yc = netc(xc,xic,aic);
    perfc = perform(netc,tc,yc)
    
    perfc =
    
        2.8744
    
    

  10. 한 개 시간 스텝 앞의 예측값을 얻으려면 신경망에서 지연을 하나 제거하십시오.

    nets = removedelay(net);
    nets.name = [net.name ' - Predict One Step Ahead'];
    view(nets)
    [xs,xis,ais,ts] = preparets(nets,inputSeries,{},targetSeries);
    ys = nets(xs,xis,ais);
    earlyPredictPerformance = perform(nets,ts,ys)
    
    earlyPredictPerformance =
    
        0.0042
    
    

    이 그림에서 신경망이 이전의 개루프 신경망과 동일한 것을 확인할 수 있습니다. 단, 탭 지연선 각각에서 하나의 지연이 제거되었습니다. 그러면 신경망 출력값은 y(t) 대신에 y(t + 1)이 됩니다. 이는 특정 응용 사례에서 신경망을 배포할 때 유용할 수 있습니다.

신경망 성능이 만족스럽지 않으면 다음 방법 중 하나를 시도해 볼 수 있습니다.

  • init을 사용하여 초기 신경망 가중치와 편향을 새 값으로 재설정하고 다시 훈련시킵니다(“가중치 초기화하기”(init) 참조).

  • 은닉 뉴런의 수나 지연 수를 늘립니다.

  • 훈련 벡터 수를 늘립니다.

  • 더 많은 관련 정보를 사용할 수 있으면 입력값 개수를 늘립니다.

  • 다른 훈련 알고리즘을 사용해 봅니다(“훈련 알고리즘” 참조).

명령줄 연산에 대한 더 많은 경험을 얻으려면 다음 작업 중 일부를 수행해 보십시오.

  • 훈련 중에 플롯 창(예: 오차 상관관계 플롯)을 열고 애니메이션을 확인합니다.

  • plotresponse, ploterrcorrplotperform와 같은 함수를 사용하여 명령줄에서 플로팅합니다. (이러한 함수 사용에 대한 자세한 내용은 해당 함수 도움말 페이지를 참조하십시오.)

또한, 명령줄에서 훈련시킬 때 여러 옵션에 대한 고급 스크립트를 살펴보십시오.

신경망을 훈련시킬 때마다 초기 가중치와 편향 값이 달라지고 데이터를 훈련 세트, 검증 세트, 테스트 세트로 분할하는 게 달라지므로 해가 다를 수 있습니다. 그 결과, 같은 문제에 대해 훈련받은 여러 신경망이 같은 입력에 대해 서로 다른 출력값을 제공할 수 있습니다. 정확도가 양호한 신경망을 발견한 것인지 확인하려면 여러 번 다시 훈련시키십시오.

더 높은 정확도를 원하는 경우 초기 해를 개선하기 위한 몇 가지 다른 기법이 있습니다. 자세한 내용은 얕은 신경망 일반화를 개선하고 과적합 방지하기 항목을 참조하십시오.