lstm
長短期記憶
構文
説明
長短期記憶 (LSTM) 演算では、時系列データおよびシーケンス データのタイム ステップ間の長期的な依存関係をネットワークに学習させることができます。
は、初期隠れ状態 Y
= lstm(X
,H0
,C0
,weights
,recurrentWeights
,bias
)H0
、初期セル状態 C0
、およびパラメーター weights
、recurrentWeights
、bias
を使用して、入力 X
に長短期記憶 (LSTM) 演算を適用します。入力 X
は、形式を整えた dlarray
でなければなりません。出力 Y
は、X
と同じ次元形式をもち、形式を整えた dlarray
になります ("S"
次元を除く)。
関数 lstm
は、双曲線正接関数 (tanh) を状態活性化関数として使用し、セル状態と隠れ状態を更新します。関数 lstm
は、 で与えられるシグモイド関数をゲート活性化関数として使用します。
[
は、LSTM 演算を行った後に隠れ状態とセル状態も返します。Y
,hiddenState
,cellState
] = lstm(X
,H0
,C0
,weights
,recurrentWeights
,bias
)
___ = lstm(___,
は、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。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"
のラベルの付いたシーケンス次元が含まれていなければなりません。"S"
のラベルが付いた空間次元が X
に含まれている場合、それらは "C"
チャネル次元にフラット化されます。X
にチャネル次元が含まれていない場合、チャネル次元が 1 つ追加されます。"U"
のラベルが付いた未指定の次元が X
に含まれている場合、その次元は大きさが 1 でなければなりません。
H0
— 初期隠れ状態ベクトル
dlarray
| 数値配列
初期隠れ状態ベクトル。形式を整えた dlarray
、形式を整えていない dlarray
、または数値配列として指定します。
H0
が、形式を整えた dlarray
の場合、"C"
のラベルが付いたチャネル次元が含まれていなければなりません。このとき、X
の "B"
次元とサイズが等しく、"B"
のラベルが付いたバッチ次元を含めることもできます。H0
に "B"
次元が含まれていない場合、関数は、X
に含まれる各観測値に対して同じ隠れ状態ベクトルを使用します。
"C"
次元のサイズによって隠れユニットの数が決定されます。H0
の "C"
次元のサイズは、C0
の "C"
次元のサイズと等しくなければなりません。
H0
が、形式を整えた dlarray
ではない場合、最初の次元のサイズによって隠れユニットの数が決定されます。このとき、最初の次元のサイズは、C0
の最初の次元または "C"
次元のサイズと同じでなければなりません。
C0
— 初期セル状態ベクトル
dlarray
| 数値配列
初期セル状態ベクトル。形式を整えた dlarray
形式を整えていない dlarray
、または数値配列として指定します。
C0
が、形式を整えた dlarray
の場合、'C'
のラベルが付いたチャネル次元が含まれていなければなりません。このとき、X
の 'B'
次元とサイズが等しく、'B'
のラベルが付いたバッチ次元を含めることもできます。C0
に 'B'
次元が含まれていない場合、関数は、X
に含まれる各観測値に対して同じセル状態ベクトルを使用します。
'C'
次元のサイズによって隠れユニットの数が決定されます。C0
の 'C'
次元のサイズは、H0
の 'C'
次元のサイズと等しくなければなりません。
C0
が、形式を整えた dlarray
ではない場合、最初の次元のサイズによって隠れユニットの数が決定されます。このとき、最初の次元のサイズは、H0
の最初の次元または 'C'
次元のサイズと同じでなければなりません。
weights
— 重み
dlarray
| 数値配列
重み。形式を整えた dlarray
、形式を整えていない dlarray
、または数値配列として指定します。
サイズが 4*NumHiddenUnits
行 InputSize
列の行列として weights
を指定します。ここで、NumHiddenUnits
は C0
および H0
の "C"
次元のサイズ、InputSize
は X
の "C"
次元のサイズに X
の各 "S"
次元のサイズを乗算した値です (存在する場合)。
weights
が、形式を整えた dlarray
の場合、サイズが 4*NumHiddenUnits
である "C"
次元およびサイズが InputSize
である "U"
次元が含まれていなければなりません。
recurrentWeights
— 再帰重み
dlarray
| 数値配列
再帰重み。形式を整えた dlarray
、形式を整えていない dlarray
、または数値配列として指定します。
サイズが 4*NumHiddenUnits
行 NumHiddenUnits
列の行列として recurrentWeights
を指定します。ここで、NumHiddenUnits
は C0
および H0
の "C"
次元のサイズです。
recurrentWeights
が、形式を整えた dlarray
の場合、サイズが 4*NumHiddenUnits
である "C"
次元およびサイズが NumHiddenUnits
である "U"
次元が含まれていなければなりません。
bias
— バイアス
dlarray
ベクトル | 数値ベクトル
バイアス。形式を整えた dlarray
、形式を整えていない dlarray
、または数値配列として指定します。
長さ 4*NumHiddenUnits
のベクトルとして bias
を指定します。ここで、NumHiddenUnits
は C0
および H0
の "C"
次元のサイズです。
bias
が、形式を整えた dlarray
の場合、大きさが 1 でない次元は "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"
— 指定なし
たとえば、シーケンスのバッチを含み、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。この配列の形式を "CBT"
(チャネル、バッチ、時間) として指定できます。
"S"
または "U"
のラベルが付いた次元については、複数回指定できます。ラベル "C"
、"B"
、および "T"
はそれぞれ 1 回まで使用できます。ソフトウェアは、2 番目の次元の後ろにある大きさが 1 の "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
の次元形式は X
と同じになります ("S"
次元を除く)。入力データが、形式を整えた dlarray
でない場合、Y
は、入力データと同じ次元の順序をもち、形式を整えていない dlarray
になります。
Y
の "C"
次元のサイズは、H0
または C0
の "C"
次元のサイズで指定された隠れユニットの数と同じです。
hiddenState
— 隠れ状態ベクトル
dlarray
| 数値配列
各観測値の隠れ状態ベクトル。H0
と同じデータ型をもつ dlarray
または数値配列として返されます。
入力 H0
が、形式を整えた dlarray
の場合、出力 hiddenState
は、形式 "CB"
をもち、形式を整えた dlarray
になります。
cellState
— セル状態ベクトル
dlarray
| 数値配列
各観測値のセル状態ベクトル。dlarray
または数値配列として返されます。cellState
は、C0
と同じデータ型で返されます。
入力 C0
が、形式を整えた dlarray
の場合、出力 cellState
は、形式 'CB'
をもつち、形式を整えた dlarray
として返されます。
アルゴリズム
長短期記憶
深層学習配列の形式
深層学習のほとんどのネットワークと関数は、入力データの各次元に対して異なる方法で演算を行います。
たとえば、LSTM 演算は入力データの時間次元を反復処理し、バッチ正規化演算は入力データのバッチ次元を正規化します。
ラベルが付いた次元をもつ入力データ、または追加のレイアウト情報をもつ入力データを指定するには、"データ形式" を使用します。
データ形式は文字列で、各文字は対応するデータ次元のタイプを表します。
各文字は以下のとおりです。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、シーケンスのバッチを含み、1 番目、2 番目、および 3 番目の次元がそれぞれチャネル、観測値、およびタイム ステップに対応する配列があるとします。この配列の形式を "CBT"
(チャネル、バッチ、時間) として指定できます。
形式を整えた入力データを作成するには、dlarray
オブジェクトを作成し、2 番目の引数を使用して形式を指定します。
形式を整えていないデータを使用して追加のレイアウト情報を指定するには、引数 FMT
を使用して形式を指定します。
詳細については、Deep Learning Data Formatsを参照してください。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
lstm
関数は GPU 配列入力をサポートしますが、次の使用上の注意および制限があります。
以下の入力引数の少なくとも 1 つが、
gpuArray
型の基になるデータをもつgpuArray
またはdlarray
である場合、この関数は GPU で実行されます。X
H0
C0
weights
recurrentWeights
bias
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2019b で導入R2024a: 状態活性化関数とゲート活性化関数の指定
名前と値の引数 StateActivationFunction
と GateActivationFunction
をそれぞれ使用して、状態活性化関数とゲート活性化関数を指定します。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは 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)