LSTM 신경망의 활성화 시각화
이 예제에서는 활성화를 추출하여 LSTM 신경망에서 학습한 특징을 검사하고 시각화하는 방법을 보여줍니다.
사전 훈련된 신경망을 불러옵니다. JapaneseVowelsNet
은 [1]과 [2]에서 설명한 Japanese Vowels 데이터셋에서 사전 훈련된 LSTM 신경망입니다. 이 데이터 세트는 미니 배치 크기 27을 가지며 시퀀스 길이를 기준으로 정렬된 시퀀스에서 훈련되었습니다.
load JapaneseVowelsNet
신경망 아키텍처를 표시합니다.
net.Layers
ans = 4x1 Layer array with layers: 1 'sequenceinput' Sequence Input Sequence input with 12 dimensions 2 'lstm' LSTM LSTM with 100 hidden units 3 'fc' Fully Connected 9 fully connected layer 4 'softmax' Softmax softmax
테스트 데이터를 불러옵니다.
load JapaneseVowelsTestData
첫 번째 시계열을 플롯으로 시각화합니다. 선은 각각 하나의 특징에 대응됩니다.
X = XTest{1}; figure plot(XTest{1}') xlabel("Time Step") title("Test Observation 1") numFeatures = size(XTest{1},1); legend("Feature " + string(1:numFeatures),'Location',"northeastoutside")
시퀀스의 각 시간 스텝마다 해당 시간 스텝의 LSTM 계층(계층 2)에 의한 활성화 출력을 가져오고 신경망 상태를 업데이트합니다.
sequenceLength = size(X,2); idxLayer = 2; outputSize = net.Layers(idxLayer).NumHiddenUnits; for i = 1:sequenceLength [features(i,:),state] = predict(net,X(:,1)',Outputs="lstm"); net.State = state; end features = features';
히트맵을 사용하여 첫 번째 10개의 은닉 유닛을 시각화합니다.
figure heatmap(features(1:10,:)); xlabel("Time Step") ylabel("Hidden Unit") title("LSTM Activations")
히트맵은 각 은닉 유닛이 얼마나 강하게 활성화되는지, 그리고 시간이 지남에 따라 활성화가 어떻게 변하는지 보여줍니다.
참고 문헌
[1] M. Kudo, J. Toyama, and M. Shimbo. "Multidimensional Curve Classification Using Passing-Through Regions." Pattern Recognition Letters. Vol. 20, No. 11–13, pages 1103–1111.
[2] UCI Machine Learning Repository: Japanese Vowels Dataset. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
참고 항목
trainnet
| trainingOptions
| dlnetwork
| predict
| forward
| lstmLayer
| bilstmLayer
| sequenceInputLayer