Main Content

장단기 기억 신경망

이 항목에서는 장단기 기억(LSTM) 신경망을 사용하여 분류 및 회귀 작업에 대해 시퀀스 및 시계열 데이터로 작업하는 방법을 설명합니다. LSTM 신경망을 사용하여 시퀀스 데이터를 분류하는 방법을 보여주는 예제는 딥러닝을 사용한 시퀀스 분류 항목을 참조하십시오.

LSTM 신경망은 시퀀스 데이터의 시간 스텝 간의 장기적인 종속성을 학습할 수 있는 순환 신경망(RNN)의 일종입니다.

LSTM 신경망 아키텍처

LSTM 신경망의 핵심 구성요소는 시퀀스 입력 계층과 LSTM 계층입니다. 시퀀스 입력 계층은 신경망에 시퀀스 또는 시계열 데이터를 입력합니다. LSTM 계층은 시퀀스 데이터의 시간 스텝 간의 장기 종속성을 학습합니다.

다음 도식은 분류를 위한 간단한 LSTM 신경망의 아키텍처를 보여줍니다. 이 신경망은 시퀀스 입력 계층으로 시작하고, 그 뒤에 LSTM 계층이 옵니다. 클래스 레이블을 예측하기 위해, 신경망의 끝부분에는 완전 연결 계층, 소프트맥스 계층, 분류 출력 계층이 옵니다.

다음 도식은 회귀를 위한 간단한 LSTM 신경망의 아키텍처를 보여줍니다. 이 신경망은 시퀀스 입력 계층으로 시작하고, 그 뒤에 LSTM 계층이 옵니다. 신경망의 끝부분에는 완전 연결 계층과 회귀 출력 계층이 옵니다.

다음 도식은 비디오 분류를 위한 신경망의 아키텍처를 보여줍니다. 신경망에 영상 시퀀스를 입력하려면 시퀀스 입력 계층을 사용하십시오. 특징 추출을 위해 컨벌루션 계층을 사용하려면, 즉 비디오의 각 프레임에 독립적으로 컨벌루션 연산을 적용하려면, 시퀀스 접기 계층 뒤에 컨벌루션 계층을 사용하고, 그 뒤에 시퀀스 펼치기 계층을 사용하십시오. 벡터로 구성된 시퀀스에서 학습하도록 LSTM 계층을 사용하려면 평탄화 계층 뒤에 LSTM 계층과 출력 계층을 사용하십시오.

분류 LSTM 신경망

sequence-to-label 분류를 위한 LSTM 신경망을 만들려면 시퀀스 입력 계층, LSTM 계층, 완전 연결 계층, 소프트맥스 계층, 분류 출력 계층을 포함하는 계층 배열을 만듭니다.

시퀀스 입력 계층의 크기를 입력 데이터의 특징 개수로 설정합니다. 완전 연결 계층의 크기를 클래스 개수로 설정합니다. 시퀀스 길이는 지정할 필요가 없습니다.

LSTM 계층의 경우, 은닉 유닛의 개수와 출력 모드 'last'를 지정합니다.

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

sequence-to-label 분류를 위한 LSTM 신경망을 훈련시키고 새 데이터를 분류하는 방법을 보여주는 예제는 딥러닝을 사용한 시퀀스 분류 항목을 참조하십시오.

sequence-to-sequence 분류를 위한 LSTM 신경망을 만들려면 sequence-to-label 분류와 동일한 아키텍처를 사용하되 LSTM 계층의 출력 모드를 'sequence'로 설정합니다.

numFeatures = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

회귀 LSTM 신경망

sequence-to-one 회귀를 위한 LSTM 신경망을 만들려면 시퀀스 입력 계층, LSTM 계층, 완전 연결 계층, 회귀 출력 계층을 포함하는 계층 배열을 만듭니다.

시퀀스 입력 계층의 크기를 입력 데이터의 특징 개수로 설정합니다. 완전 연결 계층의 크기를 응답 변수의 개수로 설정합니다. 시퀀스 길이는 지정할 필요가 없습니다.

LSTM 계층의 경우, 은닉 유닛의 개수와 출력 모드 'last'를 지정합니다.

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numResponses)
    regressionLayer];

sequence-to-sequence 회귀를 위한 LSTM 신경망을 만들려면 sequence-to-one 회귀와 동일한 아키텍처를 사용하되 LSTM 계층의 출력 모드를 'sequence'로 설정합니다.

numFeatures = 12;
numHiddenUnits = 125;
numResponses = 1;

layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits,'OutputMode','sequence')
    fullyConnectedLayer(numResponses)
    regressionLayer];

sequence-to-sequence 회귀를 위한 LSTM 신경망을 훈련시키고 새 데이터에 대해 예측하는 방법을 보여주는 예제는 딥러닝을 사용한 sequence-to-sequence 회귀 항목을 참조하십시오.

비디오 분류 신경망

비디오 데이터나 의료 영상과 같이 영상으로 구성된 시퀀스를 포함하는 데이터를 위한 딥러닝 신경망을 만들려면 시퀀스 입력 계층을 사용하여 영상 시퀀스 입력값을 지정합니다.

특징 추출을 위해 컨벌루션 계층을 사용하려면, 즉 비디오의 각 프레임에 독립적으로 컨벌루션 연산을 적용하려면, 시퀀스 접기 계층 뒤에 컨벌루션 계층을 사용하고, 그 뒤에 시퀀스 펼치기 계층을 사용하십시오. 벡터로 구성된 시퀀스에서 학습하도록 LSTM 계층을 사용하려면 평탄화 계층 뒤에 LSTM 계층과 출력 계층을 사용하십시오.

inputSize = [28 28 1];
filterSize = 5;
numFilters = 20;
numHiddenUnits = 200;
numClasses = 10;

layers = [ ...
    sequenceInputLayer(inputSize,'Name','input')
    
    sequenceFoldingLayer('Name','fold')
    
    convolution2dLayer(filterSize,numFilters,'Name','conv')
    batchNormalizationLayer('Name','bn')
    reluLayer('Name','relu')
    
    sequenceUnfoldingLayer('Name','unfold')
    flattenLayer('Name','flatten')
    
    lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
    
    fullyConnectedLayer(numClasses, 'Name','fc')
    softmaxLayer('Name','softmax')
    classificationLayer('Name','classification')];

계층을 계층 그래프로 변환하고, 시퀀스 접기 계층의 miniBatchSize 출력값을 시퀀스 펼치기 계층의 대응되는 입력값에 연결합니다.

lgraph = layerGraph(layers);
lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');

딥러닝 신경망을 비디오 분류를 위해 훈련시키는 방법을 보여주는 예제는 딥러닝을 사용하여 비디오 분류하기 항목을 참조하십시오.

심층 LSTM 신경망

LSTM 계층 앞에 출력 모드가 'sequence'인 LSTM 계층을 추가로 삽입하여 LSTM 신경망의 심도를 높일 수 있습니다. 과적합을 방지하기 위해 LSTM 계층 뒤에 드롭아웃 계층을 삽입할 수 있습니다.

sequence-to-label 분류 신경망의 경우, 마지막 LSTM 계층의 출력 모드가 'last'가 되어야 합니다.

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','last')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

sequence-to-sequence 분류 신경망의 경우, 마지막 LSTM 계층의 출력 모드가 'sequence'가 되어야 합니다.

numFeatures = 12;
numHiddenUnits1 = 125;
numHiddenUnits2 = 100;
numClasses = 9;
layers = [ ...
    sequenceInputLayer(numFeatures)
    lstmLayer(numHiddenUnits1,'OutputMode','sequence')
    dropoutLayer(0.2)
    lstmLayer(numHiddenUnits2,'OutputMode','sequence')
    dropoutLayer(0.2)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

계층

계층설명

sequenceInputLayer

시퀀스 입력 계층은 신경망에 시퀀스 데이터를 입력하고 데이터 정규화를 적용합니다.

lstmLayer

LSTM 계층은 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습하는 RNN 계층입니다.

bilstmLayer

BiLSTM(양방향 장단기 기억) 계층은 시계열 또는 시퀀스 데이터의 시간 스텝 간의 양방향 장기 종속성을 학습하는 RNN 계층입니다. 이러한 종속성은 RNN이 각 시간 스텝에서 전체 시계열로부터 학습하도록 하려는 경우에 유용할 수 있습니다.

gruLayer

GRU 계층은 시계열 및 시퀀스 데이터에서 시간 스텝 간의 종속성을 학습하는 RNN 계층입니다.

convolution1dLayer

1차원 컨벌루션 계층은 1차원 입력값에 슬라이딩 컨벌루션 필터를 적용합니다.

maxPooling1dLayer

1차원 최댓값 풀링 계층은 입력값을 1차원 풀링 영역으로 나누어 다운샘플링을 수행한 다음 각 영역의 최댓값 계산을 수행합니다.

averagePooling1dLayer

1차원 평균값 풀링 계층은 입력값을 1차원 풀링 영역으로 나누어 다운샘플링을 수행한 다음 각 영역의 평균값 계산을 수행합니다.

globalMaxPooling1dLayer

1차원 전역 최댓값 풀링 계층은 입력값의 시간 또는 공간 차원의 최댓값을 출력하여 다운샘플링을 수행합니다.

sequenceFoldingLayer

시퀀스 접기 계층은 영상 시퀀스 배치를 영상 배치로 변환합니다. 영상 시퀀스의 시간 스텝에 대해 독립적으로 컨벌루션 연산을 수행하려는 경우 시퀀스 접기 계층을 사용하십시오.

sequenceUnfoldingLayer

시퀀스 펼치기 계층은 시퀀스 접기 후에 입력 데이터의 시퀀스 구조를 복원합니다.

flattenLayer

평탄화 계층은 입력값의 공간 차원을 채널 차원으로 축소합니다.

wordEmbeddingLayer (Text Analytics Toolbox)

단어 임베딩 계층은 단어 인덱스를 벡터로 매핑합니다.

분류, 예측 및 전망

새로운 데이터를 분류하거나 데이터에 대해 예측을 수행하려면 classifypredict를 사용하십시오.

LSTM 신경망은 각 예측 사이의 신경망 상태를 기억할 수 있습니다. RNN 상태는 전체 시계열을 미리 갖고 있지 않거나 긴 시계열에 대해 여러 예측을 수행하려는 경우에 유용합니다.

시계열의 각 부분을 예측 및 분류하고 RNN 상태를 업데이트하려면 predictAndUpdateStateclassifyAndUpdateState를 사용하십시오. 각 예측 사이의 RNN 상태를 재설정하려면 resetState를 사용하십시오.

시퀀스의 미래의 시간 스텝을 전망하는 방법을 보여주는 예제는 딥러닝을 사용한 시계열 전망 항목을 참조하십시오.

시퀀스 채우기, 자르기 및 분할

LSTM 신경망은 다양한 시퀀스 길이를 갖는 입력 데이터를 지원합니다. 신경망에 데이터를 통과시키면 각 미니 배치의 모든 시퀀스가 지정된 길이를 갖도록 시퀀스가 채워지거나, 잘리거나, 분할됩니다. trainingOptionsSequenceLengthSequencePaddingValue 이름-값 쌍 인수를 사용하여 시퀀스 길이와 시퀀스를 채우는 데 사용되는 값을 지정할 수 있습니다.

신경망을 훈련시킨 후에는 classify, predict, classifyAndUpdateState, predictAndUpdateStateactivations 함수를 사용할 때 동일한 미니 배치 크기와 채우기 옵션을 사용하십시오.

시퀀스를 길이로 정렬하기

시퀀스를 채우거나 자를 때 사용되는 채우기 양이나 버려지는 데이터를 줄이려면 시퀀스 길이를 기준으로 데이터를 정렬해 보십시오. 시퀀스 길이를 기준으로 데이터를 정렬하려면 먼저 cellfun을 사용하여 각 시퀀스에 size(X,2)를 적용하여 각 시퀀스의 열 개수를 가져옵니다. 그런 다음 sort를 사용하여 시퀀스 길이를 정렬하고, 두 번째 출력값을 사용하여 원래 시퀀스를 재정렬합니다.

sequenceLengths = cellfun(@(X) size(X,2), XTrain);
[sequenceLengthsSorted,idx] = sort(sequenceLengths);
XTrain = XTrain(idx);

Two plots bar charts representing sequence data. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Unsorted Data" and shows the original sequence lengths. The chart on the right has title "Sorted Data" and shows that the sequences are sorted by length in ascending order.

시퀀스 채우기

시퀀스 길이를 'longest'로 지정하면 미니 배치의 모든 시퀀스가 미니 배치에 있는 가장 긴 시퀀스와 동일한 길이를 갖도록 소프트웨어가 시퀀스를 채웁니다. 이는 디폴트 옵션입니다.

Two plots bar charts representing sequence data. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Unsorted Data" and shows the original sequence lengths. The chart on the right has title "Sorted Data" and shows that the sequences are sorted by length in ascending order. Both charts indicate sequences divided into mini-batches using a red line and has a yellow region indicating right-padding. The chart on the right has smaller padding regions.

시퀀스 자르기

시퀀스 길이를 'shortest'로 지정하면 미니 배치의 모든 시퀀스가 미니 배치에 있는 가장 짧은 시퀀스와 동일한 길이를 갖도록 소프트웨어가 시퀀스를 자릅니다. 시퀀스의 나머지 데이터는 버려집니다.

Two plots bar charts representing sequence data. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Unsorted Data" and shows the original sequence lengths. The chart on the right has title "Sorted Data" and shows that the sequences are sorted by length in ascending order. Both charts indicate sequences divided into mini-batches using a red line and has a gray patches indicating discarded data on the right-side of the sequences. The chart on the right has less discarded data.

시퀀스 분할하기

시퀀스 길이를 정수 값으로 설정하면 소프트웨어가 미니 배치의 모든 시퀀스를 미니 배치에 있는 가장 긴 시퀀스의 길이에 맞춰 채웁니다. 그런 다음 소프트웨어가 각 시퀀스를 지정된 길이의 더 작은 시퀀스로 분할합니다. 분할이 이루어지면 소프트웨어가 미니 배치를 추가로 만듭니다. 데이터의 시퀀스 길이가 지정된 시퀀스 길이로 균등하게 나뉘지 않는 경우, 시퀀스의 마지막 시간 스텝을 포함하는 미니 배치의 길이는 지정된 시퀀스 길이보다 짧습니다.

전체 시퀀스가 메모리에 맞지 않으면 이 옵션을 사용하십시오. 또는, trainingOptions 함수로 MiniBatchSize 훈련 옵션을 더 낮은 값으로 설정하여 미니 배치당 시퀀스 개수를 줄여 보십시오.

시퀀스 길이를 양의 정수로 지정하면 소프트웨어가 이 작은 크기의 시퀀스를 연속적인 반복을 통해 처리합니다. 신경망은 분할된 시퀀스 사이에서 RNN 상태를 업데이트합니다.

Two plots bar charts representing sequence data. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Unsorted Data" and shows the original sequence lengths. The chart on the right has title "Sorted Data" and shows that the sequences are sorted by length in ascending order. Both charts indicate sequences divided into mini-batches using a red line and further split into smaller mini-batches using a dashed red line. Both charts have yellow regions indicating right-padding. The chart on the right has padding.

채우기 방향 지정하기

채우기와 자르기의 위치는 훈련, 분류 및 예측 정확도에 영향을 줄 수 있습니다. trainingOptions'SequencePaddingDirection' 옵션을 'left' 또는 'right'로 설정해 보고 무엇이 데이터에 가장 적합한지 살펴보십시오.

순환 계층은 시퀀스 데이터를 한 번에 하나의 시간 스텝씩 처리하기 때문에 순환 계층의 OutputMode 속성이 "last"인 경우 마지막 시간 스텝에서의 채우기가 계층 출력에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 왼쪽에서 채우거나 자르려면 SequencePaddingDirection 옵션을 "left"로 설정하십시오.

sequence-to-sequence 신경망의 경우(각 순환 계층의 OutputMode 속성이 "sequence"인 경우), 첫 시간 스텝들에서의 채우기가 앞쪽에 있는 시간 스텝들의 예측에 부정적인 영향을 줄 수 있습니다. 시퀀스 데이터를 오른쪽에서 채우거나 자르려면 SequencePaddingDirection 옵션을 "right"로 설정하십시오.

Two plots bar charts representing sequence data sorted by length. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Left-Padding" and shows yellow padding regions on the left of the sequences. The chart on the right has title "Right-Padding" and shows yellow padding regions on the right of the sequences. Both charts indicate sequences divided into mini-batches using a red line.

Two plots bar charts representing sequence data sorted by length. The x axis is labeled "Length" and the y axis is labeled "Sequence". The chart on the left has title "Left-Truncation" and shows gray truncation regions on the left of the sequences. The chart on the right has title "Right-Truncation" and shows gray truncation regions on the right of the sequences. Both charts indicate sequences divided into mini-batches using a red line.

시퀀스 데이터 정규화하기

0이 중심이 되는 정규화를 사용하여 훈련 시점에 자동으로 훈련 데이터의 중심을 조정하려면 sequenceInputLayerNormalization 옵션을 'zerocenter'로 설정하십시오. 또는 먼저 모든 시퀀스의 특징별 평균값과 표준편차를 계산하여 시퀀스 데이터를 정규화할 수도 있습니다. 그런 다음 각 훈련 관측값에서 평균값을 빼고 표준편차로 나눕니다.

mu = mean([XTrain{:}],2);
sigma = std([XTrain{:}],0,2);
XTrain = cellfun(@(X) (X-mu)./sigma,XTrain,'UniformOutput',false);

메모리에 담을 수 없는 큰 데이터

데이터가 너무 커서 메모리에 담을 수 없거나 데이터 배치를 읽을 때 특정 연산을 수행하려면 시퀀스, 시계열 및 신호 데이터를 위한 데이터저장소를 사용합니다.

자세한 내용은 메모리에 다 담을 수 없는 큰 시퀀스 데이터를 사용하여 신경망 훈련시키기 항목과 Classify Out-of-Memory Text Data Using Deep Learning 항목을 참조하십시오.

시각화

activations 함수를 사용하여 활성화를 추출하여, LSTM 신경망이 시퀀스 데이터와 시계열 데이터에서 학습한 특징을 검사하고 시각화합니다. 자세한 내용은 LSTM 신경망의 활성화 시각화 항목을 참조하십시오.

LSTM 계층 아키텍처

다음 도식은 입력값 x와 출력값 y를 갖고 시간 스텝이 T인 LSTM 계층을 통과하는 데이터 흐름을 보여줍니다. 이 도식에서 ht는 출력값(은닉 상태라고도 함)을 나타내고 ct는 시간 스텝 t에서의 셀 상태를 나타냅니다.

전체 시퀀스를 출력하는 경우 계층은 y1, …, yT를 출력하며 이는 h1, …, hT와 동일합니다. 마지막 시간 스텝만 출력하는 경우 계층은 yT를 출력하여 이는 hT와 동일합니다. 출력값에 있는 채널의 개수는 LSTM 계층의 은닉 유닛의 개수와 일치합니다.

Diagram showing flow of data through an LSTM layer. The input time steps are labeled x_1 through x_T. The outputs are labeled y_1 through y_T. The layer consists of multiple LSTM operations. Each LSTM operation receives the hidden state and cell state from the previous operation and passes an updated hidden and cell state to the next operation. The hidden states are labeled h_0 through h_T, where h_0 is the initial state. The cell states are labeled c_0 through c_T, where c_0 is the initial state. The outputs y_t are equivalent to the hidden states h_t.

첫 번째 LSTM 연산은 RNN의 초기 상태와 시퀀스의 첫 번째 시간 스텝을 사용하여 첫 번째 출력값과 업데이트된 셀 상태를 계산합니다. 시간 스텝 t에서, 이 연산은 RNN (ct1,ht1)의 현재 상태와 시퀀스의 다음 시간 스텝을 사용하여 출력값과 업데이트된 셀 상태 ct를 계산합니다.

계층의 상태는 은닉 상태(출력 상태)와 셀 상태로 구성됩니다. 시간 스텝 t에서의 은닉 상태는 이 시간 스텝에 대한 LSTM 계층의 출력값을 포함합니다. 셀 상태는 이전 시간 스텝에서 학습한 정보를 포함합니다. 이 계층은 각 시간 스텝에서 셀 상태에 정보를 추가하거나 셀 상태로부터 정보를 제거합니다. 계층은 게이트를 사용하여 이러한 업데이트를 제어합니다.

다음 구성요소는 계층의 셀 상태와 은닉 상태를 제어합니다.

구성요소목적
입력 게이트(i)셀 상태 업데이트의 수준 제어
망각 게이트(f)셀 상태 재설정(망각)의 수준 제어
셀 후보(g)셀 상태에 정보 추가
출력 게이트(o)은닉 상태에 추가되는 셀 상태의 수준 제어

다음 도식은 시간 스텝 t에서의 데이터 흐름을 보여줍니다. 이 도식은 게이트가 셀 상태와 은닉 상태를 망각, 업데이트, 출력하는 방식을 보여줍니다.

LSTM 계층의 학습 가능한 가중치는 입력 가중치 W(InputWeights), 순환 가중치 R(RecurrentWeights), 편향 b(Bias)입니다. 행렬 W, R, b는 각각 각 구성요소의 입력 가중치 결합, 순환 가중치 결합, 편향 결합입니다. 계층은 다음 수식에 따라 행렬을 결합합니다.

W=[WiWfWgWo],  R=[RiRfRgRo],  b=[bibfbgbo],

여기서 i, f, g, o는 입력 게이트, 망각 게이트, 셀 후보, 출력 게이트를 나타냅니다.

시간 스텝 t에서의 셀 상태는 다음과 같이 표현됩니다.

ct=ftct1+itgt,

여기서 는 아다마르 곱(벡터의 요소별 곱셈)을 나타냅니다.

시간 스텝 t에서의 은닉 상태는 다음과 같이 표현됩니다.

ht=otσc(ct),

여기서 σc는 상태 활성화 함수를 나타냅니다. 기본적으로 lstmLayer 함수는 쌍곡탄젠트 함수(tanh)를 사용하여 상태 활성화 함수를 계산합니다.

다음 수식은 시간 스텝 t에서의 구성요소를 설명합니다.

구성요소
입력 게이트it=σg(Wixt+Riht1+bi)
망각 게이트ft=σg(Wfxt+Rfht1+bf)
셀 후보gt=σc(Wgxt+Rght1+bg)
출력 게이트ot=σg(Woxt+Roht1+bo)

위 식에서 σg는 게이트 활성화 함수를 나타냅니다. 기본적으로 lstmLayer 함수는 σ(x)=(1+ex)1으로 표현되는 시그모이드 함수를 사용하여 게이트 활성화 함수를 계산합니다.

참고 문헌

[1] Hochreiter, S., and J. Schmidhuber. "Long short-term memory." Neural computation. Vol. 9, Number 8, 1997, pp.1735–1780.

참고 항목

| | | | | | | | | | (Text Analytics Toolbox) |

관련 항목