Main Content

gru

ゲート付き回帰型ユニット

説明

ゲート付き回帰型ユニット (GRU) 演算では、時系列データとシーケンス データのタイム ステップ間の依存関係をネットワークに学習させることができます。

メモ

この関数は、深層学習 GRU 演算を dlarray データに適用します。layerGraph オブジェクト内または Layer 配列内に GRU 演算を適用する場合は、次の層を使用します。

Y = gru(X,H0,weights,recurrentWeights,bias) は、初期隠れ状態 H0、およびパラメーター weightsrecurrentWeightsbias を使用して、入力 X にゲート付き回帰型ユニット (GRU) 演算を適用します。入力 X は、書式化された dlarray でなければなりません。出力 Y は、X と同じ次元形式をもつ書式化された dlarray になります ('S' 次元を除く)。

関数 gru は、双曲線正接関数 (tanh) を状態活性化関数として使用し、隠れ状態を更新します。関数 gru は、σ(x)=(1+ex)1 で与えられるシグモイド関数をゲート活性化関数として使用します。

[Y,hiddenState] = gru(X,H0,weights,recurrentWeights,bias) は、GRU 演算を行った後に隠れ状態も返します。

X が書式化されていない dlarray である場合、[___] = gru(___,'DataFormat',FMT) は、次元形式 FMT も指定します。出力 Y は、X と同じ順序で次元が並べられた、書式化されていない dlarray になります ('S' 次元を除く)。

すべて折りたたむ

100 個の隠れユニットを使用して GRU 演算を実行します。

チャネル数が 10、シーケンス長が 64 である 32 個の観測値として入力シーケンス データを作成します。

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

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

100 個の隠れユニットをもつ初期隠れ状態を作成します。すべての観測値について、同じ初期隠れ状態を使用します。

numHiddenUnits = 100;
H0 = zeros(numHiddenUnits,1);

GRU 演算で使用する学習可能なパラメーターを作成します。

weights = dlarray(randn(3*numHiddenUnits,numFeatures));
recurrentWeights = dlarray(randn(3*numHiddenUnits,numHiddenUnits));
bias = dlarray(randn(3*numHiddenUnits,1));

GRU 演算を実行します。

[dlY,hiddenState] = gru(dlX,H0,weights,recurrentWeights,bias);

dlY のサイズと次元形式を表示します。

size(dlY)
ans = 1×3

   100    32    64

dlY.dims
ans = 
'CBT'

hiddenState のサイズを表示します。

size(hiddenState)
ans = 1×2

   100    32

隠れ状態を使用すると、GRU 演算の状態を追跡したり、シーケンス データをさらに入力したりすることができます。

入力引数

すべて折りたたむ

入力データ。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。X が書式化された dlarray でない場合、'DataFormat',FMT を使用して次元ラベルの形式を指定しなければなりません。X が数値配列である場合、少なくとも H0weightsrecurrentWeightsbias のいずれかが dlarray でなければなりません。

X には、'T' のラベルの付いたシーケンス次元が含まれていなければなりません。'S' のラベルが付いた空間次元が X に含まれている場合、それらは 'C' チャネル次元にフラット化されます。X にチャネル次元が含まれていない場合、チャネル次元が 1 つ追加されます。'U' のラベルが付いた未指定の次元が X に含まれている場合、その次元は大きさが 1 でなければなりません。

データ型: single | double

初期隠れ状態ベクトル。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

H0 が書式化された dlarray の場合、'C' のラベルが付いたチャネル次元が含まれていなければなりません。このとき、X'B' 次元とサイズが等しく、'B' のラベルが付いたバッチ次元を含めることもできます。H0'B' 次元が含まれていない場合、関数は、X に含まれる各観測値に対して同じ隠れ状態ベクトルを使用します。

H0 が書式化された dlarray である場合、'C' 次元のサイズによって隠れユニットの数が決定されます。そうでない場合、最初の次元のサイズによって隠れユニットの数が決定されます。

データ型: single | double

重み。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

サイズが 3*NumHiddenUnitsInputSize 列の行列として weights を指定します。ここで、NumHiddenUnitsH0'C' 次元のサイズ、InputSizeX'C' 次元のサイズに X の各 'S' 次元のサイズを乗算した値です (存在する場合)。

weights が書式化された dlarray の場合、サイズが 3*NumHiddenUnits である 'C' 次元およびサイズが InputSize である 'U' 次元が含まれていなければなりません。

データ型: single | double

再帰重み。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

サイズが 3*NumHiddenUnitsNumHiddenUnits 列の行列として recurrentWeights を指定します。ここで、NumHiddenUnitsH0'C' 次元のサイズです。

recurrentWeights が書式化された dlarray の場合、サイズが 3*NumHiddenUnits である 'C' 次元およびサイズが NumHiddenUnits である 'U' 次元が含まれていなければなりません。

データ型: single | double

バイアス。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。

長さ 3*NumHiddenUnits のベクトルとして bias を指定します。ここで、NumHiddenUnitsH0'C' 次元のサイズです。

bias が書式化された dlarray の場合、大きさが 1 でない次元は 'C' のラベルが付いていなければなりません。

データ型: single | double

書式設定されていない入力データの次元の順序。'DataFormat' と、データの各次元のラベルを表す文字配列または string である FMT で構成されるコンマ区切りのペアとして指定します。FMT の各文字は次のいずれかでなければなりません。

  • 'S' — 空間

  • 'C' — チャネル

  • 'B' — バッチ (サンプルや観測値など)

  • 'T' — 時間 (シーケンスなど)

  • 'U' — 指定なし

'S' または 'U' のラベルが付いた次元については、複数回指定できます。'C''B''T' のラベルについては、1 回のみ使用できます。

入力データが書式化された dlarray でないときは、'DataFormat',FMT を指定しなければなりません。

例: 'DataFormat','SSCB'

データ型: char | string

出力引数

すべて折りたたむ

GRU 出力。dlarray として返されます。出力 Y の基となるデータ型は、入力 X と同じです。

入力データ X が書式化された dlarray である場合、Y の次元形式は X と同じになります ('S' 次元を除く)。入力データが書式化された dlarray でない場合、Y は、入力データと同じ次元の順序をもつ書式化されていない dlarray になります。

Y'C' 次元のサイズは、H0'C' 次元のサイズで指定された隠れユニットの数と同じです。

各観測値の隠れ状態ベクトル。H0 と同じデータ型をもつ dlarray または数値配列として返されます。

入力 H0 が書式化された dlarray の場合、出力 hiddenState は、書式 'CB' をもつ書式化された dlarray になります。

制限

  • functionToLayerGraph は関数 gru をサポートしません。gru 演算を含む関数とともに functionToLayerGraph を使用した場合、結果として得られる LayerGraph にはプレースホルダー層が含まれます。

詳細

すべて折りたたむ

ゲート付き回帰型ユニット

GRU 演算では、時系列データとシーケンス データのタイム ステップ間の依存関係をネットワークに学習させることができます。詳細については、gruLayer のリファレンス ページに記載されたゲート付き回帰型ユニット層の定義を参照してください。

参照

[1] Cho, Kyunghyun, Bart Van Merriënboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, and Yoshua Bengio. "Learning phrase representations using RNN encoder-decoder for statistical machine translation." arXiv preprint arXiv:1406.1078 (2014).

拡張機能

バージョン履歴

R2020a で導入