Main Content

1차원 컨벌루션을 사용한 시퀀스 분류

이 예제에서는 1차원 컨벌루션 신경망을 사용하여 시퀀스 데이터를 분류하는 방법을 보여줍니다.

시퀀스 데이터를 분류하도록 심층 신경망을 훈련시키기 위해 1차원 컨벌루션 신경망을 사용할 수 있습니다. 1차원 컨벌루션 계층은 1차원 입력값에 슬라이딩 컨벌루션 필터를 적용하여 특징을 학습합니다. 컨벌루션 계층은 한 번의 연산으로 입력을 처리할 수 있기 때문에 1차원 컨벌루션 계층을 사용하는 것이 순환 계층을 사용하는 것보다 더 빠를 수 있습니다. 반면에 순환 계층은 입력값의 시간 스텝마다 반복해야 합니다. 그러나 순환 계층은 시간 스텝 간의 장기적인 종속성을 학습할 수 있기 때문에 신경망 아키텍처와 필터 크기가 어떤지에 따라 1차원 컨벌루션 계층이 순환 계층보다 성능이 떨어질 수도 있습니다.

이 예제에서는 [1]과 [2]에서 설명한 Japanese Vowels 데이터 세트를 사용합니다. 이 예제에서는 연속해서 발화된 2개의 일본어 모음을 나타내는 시계열 데이터를 주고 화자를 인식하도록 1차원 컨벌루션 신경망을 훈련시킵니다. 훈련 데이터는 화자 9명의 시계열 데이터를 포함합니다. 각 시퀀스는 12개의 특징을 가지며 길이가 서로 다릅니다. 데이터 세트는 270개의 훈련 관측값과 370개의 테스트 관측값을 포함합니다.

시퀀스 데이터 불러오기

Japanese Vowels 훈련 데이터를 불러옵니다. 예측 변수 데이터는 12개의 특징이 있는 다양한 길이의 시퀀스를 포함하는 셀형 배열입니다. 목표 데이터는 9명의 화자 각각에 대응하는 레이블 "1","2",...,"9"로 구성된 categorical형 벡터입니다. 예측 변수 시퀀스는 각 특징에 대해 하나의 행을 갖는 12개의 행과 각 시간 스텝에 대해 하나의 열을 갖는 가변 개수의 열로 이루어진 행렬입니다.

[XTrain,TTrain] = japaneseVowelsTrainData;
[XValidation,TValidation] = japaneseVowelsTestData;

처음 몇 개 훈련 시퀀스를 확인합니다.

XTrain(1:5)
ans=5×1 cell array
    {12x20 double}
    {12x26 double}
    {12x22 double}
    {12x20 double}
    {12x21 double}

첫 번째 시계열을 플롯으로 시각화합니다. 선은 각각 하나의 특징에 대응됩니다.

figure
plot(XTrain{1}')
xlabel("Time Step")
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),Location="northeastoutside")

Figure contains an axes object. The axes object with title Training Observation 1 contains 12 objects of type line. These objects represent Feature 1, Feature 2, Feature 3, Feature 4, Feature 5, Feature 6, Feature 7, Feature 8, Feature 9, Feature 10, Feature 11, Feature 12.

훈련 데이터의 클래스 개수를 확인합니다.

classes = categories(TTrain);
numClasses = numel(classes)
numClasses = 9

1차원 컨벌루션 신경망 아키텍처 정의하기

1차원 컨벌루션 신경망 아키텍처를 정의합니다.

  • 입력 데이터의 특징 개수로 입력 크기를 지정합니다.

  • 두 블록의 1차원 컨벌루션 계층, ReLU 계층, 계층 정규화 계층을 지정합니다. 여기서 컨벌루션 계층의 필터 크기는 3입니다. 첫 번째 컨벌루션 계층과 두 번째 컨벌루션 계층에 대해 각각 32개 필터와 64개 필터를 지정합니다. 이 두 컨벌루션 계층의 출력값의 길이가 동일하도록 입력값의 왼쪽을 채웁니다(인과적(causal) 채우기).

  • 컨벌루션 계층의 출력값을 단일 벡터로 줄이기 위해 1차원 전역 평균값 풀링 계층을 사용합니다.

  • 출력값을 확률로 구성된 벡터에 매핑하기 위해, 출력 크기가 클래스 개수와 일치하는 완전 연결 계층을 지정하고 그 뒤에 소프트맥스 계층과 분류 계층을 지정합니다.

filterSize = 3;
numFilters = 32;

layers = [ ...
    sequenceInputLayer(numFeatures)
    convolution1dLayer(filterSize,numFilters,Padding="causal")
    reluLayer
    layerNormalizationLayer
    convolution1dLayer(filterSize,2*numFilters,Padding="causal")
    reluLayer
    layerNormalizationLayer
    globalAveragePooling1dLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

훈련 옵션 지정하기

다음과 같이 훈련 옵션을 지정합니다.

  • Adam 최적화 함수를 사용하여 훈련시킵니다.

  • 크기가 27인 미니 배치로 Epoch 15회만큼 훈련시킵니다.

  • 시퀀스의 왼쪽을 채웁니다.

  • 검증 데이터를 사용하여 신경망을 검증합니다.

  • 훈련 진행 상황을 플롯에서 모니터링하고 세부 정보가 출력되지 않도록 합니다.

miniBatchSize = 27;

options = trainingOptions("adam", ...
    MiniBatchSize=miniBatchSize, ...
    MaxEpochs=15, ...
    SequencePaddingDirection="left", ...
    ValidationData={XValidation,TValidation}, ...
    Plots="training-progress", ...
    Verbose=0);

신경망 훈련시키기

trainNetwork 함수를 사용하여 지정된 훈련 옵션으로 신경망을 훈련시킵니다.

net = trainNetwork(XTrain,TTrain,layers,options);

{"String":"Figure Training Progress (26-Aug-2022 23:02:05) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 8 objects of type patch, text, line. Axes object 2 contains 8 objects of type patch, text, line.","Tex":[],"LaTex":[]}

신경망 테스트하기

훈련에 사용된 것과 동일한 미니 배치 크기 및 시퀀스 채우기 옵션을 사용하여 검증 데이터를 분류합니다.

YPred = classify(net,XValidation, ...
    MiniBatchSize=miniBatchSize, ...
    SequencePaddingDirection="left");

예측의 분류 정확도를 계산합니다.

acc = mean(YPred == TValidation)
acc = 0.9568

예측값을 혼동행렬로 시각화합니다.

confusionchart(TValidation,YPred)

Figure contains an object of type ConfusionMatrixChart.

참고 문헌

[1] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. “Multidimensional Curve Classification Using Passing-through Regions.” Pattern Recognition Letters 20, no. 11–13 (November 1999): 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X

[2] Kudo, Mineichi, Jun Toyama, and Masaru Shimbo. "Japanese Vowels Data Set." Distributed by UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

참고 항목

| | | | | | |

관련 항목