lstm
장단기 기억
구문
설명
장단기 기억(LSTM) 연산을 사용하면 신경망이 시계열 및 시퀀스 데이터에서 시간 스텝 간의 장기 종속성을 학습할 수 있습니다.
는 초기 은닉 상태 Y
= lstm(X
,H0
,C0
,weights
,recurrentWeights
,bias
)H0
과 초기 셀 상태 C0
, 파라미터 weights
, recurrentWeights
, bias
를 사용하여 입력값 X
에 장단기 기억(LSTM) 계산을 적용합니다. 입력값 X
는 형식이 지정된 dlarray
여야 합니다. 출력값 Y
는 "S"
차원을 제외하고 X
와 차원 형식이 같은, 형식이 지정된 dlarray
입니다.
lstm
함수는 쌍곡탄젠트 함수(tanh)를 상태 활성화 함수로 사용하여 셀 상태와 은닉 상태를 업데이트합니다. lstm
함수는 로 표현되는 시그모이드 함수를 게이트 활성화 함수로 사용합니다.
[
는 LSTM 연산 후의 은닉 상태와 셀 상태도 반환합니다.Y
,hiddenState
,cellState
] = lstm(X
,H0
,C0
,weights
,recurrentWeights
,bias
)
___ = lstm(___,
는 하나 이상의 이름-값 인수를 사용하여 추가 옵션을 지정합니다.Name=Value
)
예제
시퀀스 데이터에 LSTM 연산 적용하기
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
입력 인수
X
— 입력 데이터
dlarray
| 숫자형 배열
입력 데이터로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다. X
가 형식이 지정된 dlarray
가 아닌 경우 DataFormat
옵션을 사용하여 차원 레이블 형식을 지정해야 합니다. X
가 숫자형 배열인 경우 H0
, C0
, weights
, recurrentWeights
, bias
중 적어도 하나는 dlarray
여야 합니다.
X
는 "T"
레이블이 지정된 시퀀스 차원을 포함해야 합니다. X
에 "S"
레이블이 지정된 공간 차원이 있는 경우 이러한 차원은 "C"
채널 차원으로 평탄화됩니다. X
에 채널 차원이 포함되어 있지 않으면 채널 차원이 하나 추가됩니다. X
에 "U"
레이블이 지정된 미지정 차원이 있는 경우 이러한 차원은 한원소 차원이어야 합니다.
H0
— 초기 은닉 상태 벡터
dlarray
| 숫자형 배열
초기 은닉 상태 벡터로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다.
H0
이 형식이 지정된 dlarray
인 경우 "C"
레이블이 지정된 채널 차원을 포함해야 하며, 선택적으로 "B"
레이블이 지정된 배치 차원(X
의 "B"
차원과 같은 크기)을 포함할 수 있습니다. H0
에 "B"
차원이 없는 경우 함수는 X
의 각 관측값에 동일한 은닉 상태 벡터를 사용합니다.
"C"
차원의 크기에 따라 은닉 유닛의 개수가 결정됩니다. H0
의 "C"
차원 크기는 C0
의 "C"
차원 크기와 같아야 합니다.
H0
이 형식이 지정된 dlarray
가 아닌 경우 첫 번째 차원의 크기에 따라 은닉 유닛의 개수가 결정되며, 첫 번째 차원의 크기는 첫 번째 차원 또는 C0
의 "C"
차원과 크기가 같아야 합니다.
C0
— 초기 셀 상태 벡터
dlarray
| 숫자형 배열
초기 셀 상태 벡터로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다.
C0
이 형식이 지정된 dlarray
인 경우 'C'
레이블이 지정된 채널 차원을 포함해야 하며, 선택적으로 'B'
레이블이 지정된 배치 차원(X
의 'B'
차원과 같은 크기)을 포함할 수 있습니다. C0
에 'B'
차원이 없는 경우 함수는 X
의 각 관측값에 동일한 셀 상태 벡터를 사용합니다.
'C'
차원의 크기에 따라 은닉 유닛의 개수가 결정됩니다. C0
의 'C'
차원 크기는 H0
의 'C'
차원 크기와 같아야 합니다.
C0
이 형식이 지정된 dlarray
가 아닌 경우 첫 번째 차원의 크기에 따라 은닉 유닛의 개수가 결정되며, 첫 번째 차원의 크기는 첫 번째 차원 또는 H0
의 'C'
차원과 크기가 같아야 합니다.
weights
— 가중치
dlarray
| 숫자형 배열
가중치로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다.
weights
를 크기가 4*NumHiddenUnits
×InputSize
인 행렬로 지정합니다. 여기서 NumHiddenUnits
는 C0
과 H0
의 "C"
차원 크기이고 InputSize
는 X
의 "C"
차원 크기에 X
의 각 "S"
차원 크기(있는 경우)를 곱한 값입니다.
weights
가 형식이 지정된 dlarray
인 경우 크기가 4*NumHiddenUnits
인 "C"
차원과 크기가 InputSize
인 "U"
차원을 포함해야 합니다.
recurrentWeights
— 순환 가중치
dlarray
| 숫자형 배열
순환 가중치로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다.
recurrentWeights
를 크기가 4*NumHiddenUnits
×NumHiddenUnits
인 행렬로 지정합니다. 여기서 NumHiddenUnits
는 C0
과 H0
의 "C"
차원 크기입니다.
recurrentWeights
가 형식이 지정된 dlarray
인 경우 크기가 4*NumHiddenUnits
인 "C"
차원과 크기가 NumHiddenUnits
인 "U"
차원을 포함해야 합니다.
bias
— 편향
dlarray
벡터 | 숫자형 벡터
편향으로, 형식이 지정된 dlarray
, 형식이 지정되지 않은 dlarray
또는 숫자형 배열로 지정됩니다.
bias
를 길이가 4*NumHiddenUnits
인 벡터로 지정합니다. 여기서 NumHiddenUnits
는 C0
과 H0
의 "C"
차원 크기입니다.
bias
가 형식이 지정된 dlarray
인 경우 비한원소 차원은 "C"
레이블로 지정되어야 합니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: Y = lstm(X,H0,C0,weights,recurrentWeights,bias,DataFormat="CTB")
는 LSTM 연산을 적용하며 데이터 형식을 "CTB"
(채널, 시간, 배치)로 지정합니다.
DataFormat
— 데이터 차원에 대한 설명
문자형 벡터 | string형 스칼라
데이터 차원에 대한 설명으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.
데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.
문자는 다음을 나타냅니다.
"S"
— 공간"C"
— 채널"B"
— 배치"T"
— 시간"U"
— 지정되지 않음
예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 포함하는 배열이 있다고 가정하겠습니다. 이 배열이 "CBT"
(채널, 배치, 시간) 형식을 갖도록 지정할 수 있습니다.
"S"
또는 "U"
레이블의 차원은 여러 개 지정할 수 있습니다. 레이블 "C"
, "B"
, "T"
는 각각 최대 한 번만 사용할 수 있습니다. 두 번째 차원 뒤의 한원소 후행 "U"
차원은 무시됩니다.
입력 데이터가 형식이 지정된 dlarray
객체가 아닌 경우 DataFormat
옵션을 지정해야 합니다.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
데이터형: char
| string
StateActivationFunction
— 상태 활성화 함수
"tanh"
(디폴트 값) | "softsign"
| "relu"
GateActivationFunction
— 게이트 활성화 함수
"sigmoid"
(디폴트 값) | "hard-sigmoid"
R2024a 이후
게이트에 적용할 활성화 함수로, 다음 값 중 하나로 지정됩니다.
"sigmoid"
— 시그모이드 함수 을 사용합니다."hard-sigmoid"
— 다음과 같은 하드 시그모이드 함수를 사용합니다.
이 소프트웨어는 계층 게이트 계산에서 이 옵션을 함수 로 사용합니다.
출력 인수
Y
— LSTM 출력
dlarray
LSTM 출력으로, dlarray
로 반환됩니다. 출력값 Y
는 입력값 X
와 기본 데이터형이 같습니다.
입력 데이터 X
가 형식이 지정된 dlarray
인 경우 Y
는 모든 "S"
차원을 제외하고 X
와 차원 형식이 같습니다. 입력 데이터가 형식이 지정된 dlarray
가 아닌 경우, Y
는 입력 데이터와 차원 순서가 같은, 형식이 지정되지 않은 dlarray
입니다.
Y
의 "C"
차원 크기는 H0
또는 C0
의 "C"
차원 크기로 지정된 은닉 유닛의 개수와 같습니다.
hiddenState
— 은닉 상태 벡터
dlarray
| 숫자형 배열
각 관측값에 대한 은닉 상태 벡터로, dlarray
또는 H0
과 동일한 데이터형을 갖는 숫자형 배열로 반환됩니다.
입력값 H0
이 형식이 지정된 dlarray
인 경우 출력값 hiddenState
는 "CB"
로 형식이 지정된 dlarray
입니다.
cellState
— 셀 상태 벡터
dlarray
| 숫자형 배열
각 관측값에 대한 셀 상태 벡터로, dlarray
또는 숫자형 배열로 반환됩니다. cellState
는 C0
과 같은 데이터형으로 반환됩니다.
입력값 C0
이 형식이 지정된 dlarray
인 경우 출력값 cellState
는 'CB'
로 형식이 지정된 dlarray
로 반환됩니다.
알고리즘
장단기 기억
딥러닝 배열 형식
대부분의 딥러닝 신경망과 함수는 입력 데이터의 각기 다른 차원에 대해 다른 방식으로 연산을 수행합니다.
예를 들어, LSTM 연산은 입력 데이터의 시간 차원에 대해 반복 작업을 수행하고 배치 정규화 연산은 입력 데이터의 배치 차원에 대해 정규화를 수행합니다.
차원에 레이블이 지정된 입력 데이터 또는 추가 레이아웃 정보가 포함된 입력 데이터를 제공하려면 데이터 형식을 사용하면 됩니다.
데이터 형식은 문자들로 구성된 문자열로, 각 문자는 대응되는 데이터 차원의 유형을 설명합니다.
문자는 다음을 나타냅니다.
"S"
— 공간"C"
— 채널"B"
— 배치"T"
— 시간"U"
— 지정되지 않음
예를 들어, 첫 번째, 두 번째, 세 번째 차원이 각각 채널, 관측값, 시간 스텝에 대응되는 시퀀스 배치를 포함하는 배열이 있다고 가정하겠습니다. 이 배열이 "CBT"
(채널, 배치, 시간) 형식을 갖도록 지정할 수 있습니다.
형식이 지정된 입력 데이터를 생성하려면 dlarray
객체를 생성하고 두 번째 인수를 사용하여 형식을 지정하십시오.
형식이 지정되지 않은 데이터에 추가 레이아웃 정보를 제공하려면 FMT
인수를 사용하여 형식을 지정하십시오.
자세한 내용은 Deep Learning Data Formats 항목을 참조하십시오.
확장 기능
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
lstm
함수는 GPU 배열 입력값을 지원하지만 다음과 같은 사용법 관련 참고 및 제한 사항이 있습니다.
다음 입력 인수 중 적어도 하나가
gpuArray
이거나 기본 데이터형이gpuArray
인dlarray
인 경우 이 함수는 GPU에서 실행됩니다.X
H0
C0
weights
recurrentWeights
bias
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2019b에 개발됨R2024a: 상태 및 게이트 활성화 함수 지정
각각 StateActivationFunction
및 GateActivationFunction
이름-값 인수를 사용하여 상태 및 게이트 활성화 함수를 지정합니다.
참고 항목
dlarray
| fullyconnect
| softmax
| dlgradient
| dlfeval
| gru
| attention
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)