Main Content

lstm

장단기 기억

R2019b 이후

설명

장단기 기억(LSTM) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습할 수 있습니다.

참고

이 함수는 dlarray 데이터에 딥러닝 LSTM 연산을 적용합니다. dlnetwork 객체 내에서 LSTM 연산을 적용하려면 lstmLayer를 사용하십시오.

예제

Y = lstm(X,H0,C0,weights,recurrentWeights,bias)는 초기 은닉 상태 H0과 초기 셀 상태 C0, 파라미터 weights, recurrentWeights, bias를 사용하여 입력값 X에 장단기 기억(LSTM) 계산을 적용합니다. 입력값 X는 형식이 지정된 dlarray여야 합니다. 출력값 Y"S" 차원을 제외하고 X와 차원 형식이 같은, 형식이 지정된 dlarray입니다.

lstm 함수는 쌍곡탄젠트 함수(tanh)를 상태 활성화 함수로 사용하여 셀 상태와 은닉 상태를 업데이트합니다. lstm 함수는 σ(x)=(1+ex)1로 표현되는 시그모이드 함수를 게이트 활성화 함수로 사용합니다.

[Y,hiddenState,cellState] = lstm(X,H0,C0,weights,recurrentWeights,bias)는 LSTM 연산 후의 은닉 상태와 셀 상태도 반환합니다.

___ = lstm(___,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.

예제

모두 축소

3개의 은닉 유닛을 사용하여 LSTM 연산을 수행합니다.

입력 시퀀스 데이터를 채널이 10개이고 시퀀스 길이가 64인 관측값 32개로 만듭니다.

numFeatures = 10;
numObservations = 32;
sequenceLength = 64;

X = randn(numFeatures,numObservations,sequenceLength);
X = dlarray(X,"CBT");

3개의 은닉 유닛을 사용하여 초기 은닉 상태 및 초기 셀 상태를 만듭니다. 모든 관측값에 동일한 초기 은닉 상태와 초기 셀 상태를 사용합니다.

numHiddenUnits = 3;
H0 = zeros(numHiddenUnits,1);
C0 = zeros(numHiddenUnits,1);

LSTM 연산을 위한 학습 가능한 파라미터를 만듭니다.

weights = dlarray(randn(4*numHiddenUnits,numFeatures),"CU");
recurrentWeights = dlarray(randn(4*numHiddenUnits,numHiddenUnits),"CU");
bias = dlarray(randn(4*numHiddenUnits,1),"C");

LSTM 계산을 수행합니다.

[Y,hiddenState,cellState] = lstm(X,H0,C0,weights,recurrentWeights,bias);

출력값의 크기와 차원을 확인합니다.

size(Y)
ans = 1×3

     3    32    64

dims(Y)
ans = 
'CBT'

은닉 상태와 셀 상태의 크기를 확인합니다.

size(hiddenState)
ans = 1×2

     3    32

size(cellState)
ans = 1×2

     3    32

입력 인수

모두 축소

입력 데이터로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다. X가 형식이 지정된 dlarray가 아닌 경우 DataFormat 옵션을 사용하여 차원 레이블 형식을 지정해야 합니다. X가 숫자형 배열인 경우 H0, C0, weights, recurrentWeights, bias 중 적어도 하나는 dlarray여야 합니다.

X"T" 레이블이 지정된 시퀀스 차원을 포함해야 합니다. X"S" 레이블이 지정된 공간 차원이 있는 경우 이러한 차원은 "C" 채널 차원으로 평탄화됩니다. X에 채널 차원이 포함되어 있지 않으면 채널 차원이 하나 추가됩니다. X"U" 레이블이 지정된 미지정 차원이 있는 경우 이러한 차원은 한원소 차원이어야 합니다.

초기 은닉 상태 벡터로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다.

H0이 형식이 지정된 dlarray인 경우 "C" 레이블이 지정된 채널 차원을 포함해야 하며, 선택적으로 "B" 레이블이 지정된 배치 차원(X"B" 차원과 같은 크기)을 포함할 수 있습니다. H0"B" 차원이 없는 경우 함수는 X의 각 관측값에 동일한 은닉 상태 벡터를 사용합니다.

"C" 차원의 크기에 따라 은닉 유닛의 개수가 결정됩니다. H0"C" 차원 크기는 C0"C" 차원 크기와 같아야 합니다.

H0이 형식이 지정된 dlarray가 아닌 경우 첫 번째 차원의 크기에 따라 은닉 유닛의 개수가 결정되며, 첫 번째 차원의 크기는 첫 번째 차원 또는 C0"C" 차원과 크기가 같아야 합니다.

초기 셀 상태 벡터로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다.

C0이 형식이 지정된 dlarray인 경우 'C' 레이블이 지정된 채널 차원을 포함해야 하며, 선택적으로 'B' 레이블이 지정된 배치 차원(X'B' 차원과 같은 크기)을 포함할 수 있습니다. C0'B' 차원이 없는 경우 함수는 X의 각 관측값에 동일한 셀 상태 벡터를 사용합니다.

'C' 차원의 크기에 따라 은닉 유닛의 개수가 결정됩니다. C0'C' 차원 크기는 H0'C' 차원 크기와 같아야 합니다.

C0이 형식이 지정된 dlarray가 아닌 경우 첫 번째 차원의 크기에 따라 은닉 유닛의 개수가 결정되며, 첫 번째 차원의 크기는 첫 번째 차원 또는 H0'C' 차원과 크기가 같아야 합니다.

가중치로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다.

weights를 크기가 4*NumHiddenUnits×InputSize인 행렬로 지정합니다. 여기서 NumHiddenUnitsC0H0"C" 차원 크기이고 InputSizeX"C" 차원 크기에 X의 각 "S" 차원 크기(있는 경우)를 곱한 값입니다.

weights가 형식이 지정된 dlarray인 경우 크기가 4*NumHiddenUnits"C" 차원과 크기가 InputSize"U" 차원을 포함해야 합니다.

순환 가중치로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다.

recurrentWeights를 크기가 4*NumHiddenUnits×NumHiddenUnits인 행렬로 지정합니다. 여기서 NumHiddenUnitsC0H0"C" 차원 크기입니다.

recurrentWeights가 형식이 지정된 dlarray인 경우 크기가 4*NumHiddenUnits"C" 차원과 크기가 NumHiddenUnits"U" 차원을 포함해야 합니다.

편향으로, 형식이 지정된 dlarray, 형식이 지정되지 않은 dlarray 또는 숫자형 배열로 지정됩니다.

bias를 길이가 4*NumHiddenUnits인 벡터로 지정합니다. 여기서 NumHiddenUnitsC0H0"C" 차원 크기입니다.

bias가 형식이 지정된 dlarray인 경우 비한원소 차원은 "C" 레이블로 지정되어야 합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: Y = lstm(X,H0,C0,weights,recurrentWeights,bias,DataFormat="CTB")는 LSTM 연산을 적용하며 데이터 형식을 "CTB"(채널, 시간, 배치)로 지정합니다.

데이터 차원에 대한 설명으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.

문자는 다음을 나타냅니다.

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 포함하는 배열이 있다고 가정하겠습니다. 이 배열이 "CBT"(채널, 배치, 시간) 형식을 갖도록 지정할 수 있습니다.

"S" 또는 "U" 레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C", "B", "T"는 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U" 차원은 무시됩니다.

입력 데이터가 형식이 지정된 dlarray 객체가 아닌 경우 DataFormat 옵션을 지정해야 합니다.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

데이터형: char | string

R2024a 이후

셀과 은닉 상태를 업데이트하는 활성화 함수로, 다음 값 중 하나로 지정됩니다.

  • "tanh" — 쌍곡탄젠트 함수(tanh)를 사용합니다.

  • "softsign" — 소프트사인 함수 softsign(x)=x1+|x|를 사용합니다.

  • "relu" — ReLU(Rectified Linear Unit) 함수 ReLU(x)={x,x>00,x0을 사용합니다.

이 소프트웨어는 셀과 은닉 상태를 업데이트하는 계산에서 이 옵션을 함수 σc로 사용합니다.

자세한 내용은 lstmLayer 함수 도움말 페이지에서 장단기 기억 계층 정의를 참조하십시오.

R2024a 이후

게이트에 적용할 활성화 함수로, 다음 값 중 하나로 지정됩니다.

  • "sigmoid" — 시그모이드 함수 σ(x)=(1+ex)1을 사용합니다.

  • "hard-sigmoid" — 다음과 같은 하드 시그모이드 함수를 사용합니다.

    σ(x)={00.2x+0.51if x<2.5if2.5x2.5if x>2.5.

이 소프트웨어는 계층 게이트 계산에서 이 옵션을 함수 σg로 사용합니다.

자세한 내용은 lstmLayer 함수 도움말 페이지에서 장단기 기억 계층 정의를 참조하십시오.

출력 인수

모두 축소

LSTM 출력으로, dlarray로 반환됩니다. 출력값 Y는 입력값 X와 기본 데이터형이 같습니다.

입력 데이터 X가 형식이 지정된 dlarray인 경우 Y는 모든 "S" 차원을 제외하고 X와 차원 형식이 같습니다. 입력 데이터가 형식이 지정된 dlarray가 아닌 경우, Y는 입력 데이터와 차원 순서가 같은, 형식이 지정되지 않은 dlarray입니다.

Y"C" 차원 크기는 H0 또는 C0"C" 차원 크기로 지정된 은닉 유닛의 개수와 같습니다.

각 관측값에 대한 은닉 상태 벡터로, dlarray 또는 H0과 동일한 데이터형을 갖는 숫자형 배열로 반환됩니다.

입력값 H0이 형식이 지정된 dlarray인 경우 출력값 hiddenState"CB"로 형식이 지정된 dlarray입니다.

각 관측값에 대한 셀 상태 벡터로, dlarray 또는 숫자형 배열로 반환됩니다. cellStateC0과 같은 데이터형으로 반환됩니다.

입력값 C0이 형식이 지정된 dlarray인 경우 출력값 cellState'CB'로 형식이 지정된 dlarray로 반환됩니다.

알고리즘

모두 축소

장단기 기억

LSTM 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습할 수 있습니다. 자세한 내용은 lstmLayer 함수 도움말 페이지에서 장단기 기억 계층 정의를 참조하십시오.

딥러닝 배열 형식

대부분의 딥러닝 신경망과 함수는 입력 데이터의 각기 다른 차원에 대해 다른 방식으로 연산을 수행합니다.

예를 들어, LSTM 연산은 입력 데이터의 시간 차원에 대해 반복 작업을 수행하고 배치 정규화 연산은 입력 데이터의 배치 차원에 대해 정규화를 수행합니다.

차원에 레이블이 지정된 입력 데이터 또는 추가 레이아웃 정보가 포함된 입력 데이터를 제공하려면 데이터 형식을 사용하면 됩니다.

데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.

문자는 다음을 나타냅니다.

  • "S" — 공간

  • "C" — 채널

  • "B" — 배치

  • "T" — 시간

  • "U" — 지정되지 않음

예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 포함하는 배열이 있다고 가정하겠습니다. 이 배열이 "CBT"(채널, 배치, 시간) 형식을 갖도록 지정할 수 있습니다.

형식이 지정된 입력 데이터를 생성하려면 dlarray 객체를 생성하고 두 번째 인수를 사용하여 형식을 지정하십시오.

형식이 지정되지 않은 데이터에 추가 레이아웃 정보를 제공하려면 FMT 인수를 사용하여 형식을 지정하십시오.

자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.

확장 기능

버전 내역

R2019b에 개발됨

모두 확장