Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

gru

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

R2020a 以降

説明

ゲート付き回帰型ユニット (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(X,H0,weights,recurrentWeights,bias,DataFormat=FMT) は、次元形式 FMT も指定します。出力 Y は、X と同じ順序で次元が並べられた、書式化されていない dlarray になります ("S" 次元を除く)。

___ = gru(X,H0,weights,recurrentWeights,bias,Name=Value) は、1 つ以上の名前と値の引数を使用して追加のオプションを指定します。

すべて折りたたむ

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

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

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

X = randn(numFeatures,numObservations,sequenceLength);
X = 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 演算を実行します。

[Y,hiddenState] = gru(X,H0,weights,recurrentWeights,bias);

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

size(Y)
ans = 1×3

   100    32    64

Y.dims
ans = 
'CBT'

隠れ状態のサイズを表示します。

size(hiddenState)
ans = 1×2

   100    32

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

入力引数

すべて折りたたむ

入力データ。書式化された dlarray、書式化されていない dlarray、または数値配列として指定します。X が書式化された dlarray でない場合、名前と値の引数 DataFormat を使用して次元ラベルの形式を指定しなければなりません。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

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: Y = gru(X,H0,weights,recurrentWeights,bias,DataFormat="CTB") は GRU 演算を適用し、データの書式が "CTB" (channel、time、batch) であることを指定します。

データの次元の説明。文字ベクトルまたは 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

R2023a 以降

リセット ゲート モード。次のいずれかの値として指定します。

  • "after-multiplication" — 行列乗算後にリセット ゲートを適用します。このオプションは cuDNN に対応しています。

  • "before-multiplication" — 行列乗算前にリセット ゲートを適用します。

  • "recurrent-bias-after-multiplication" — 行列乗算後にリセット ゲートを適用し、さらに、再帰重みに関する一連のバイアス項を使用します。

リセット ゲートの計算に関する詳細については、gruLayer のリファレンス ページにあるゲート付き回帰型ユニット層を参照してください。

出力引数

すべて折りたたむ

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

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

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

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

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

詳細

すべて折りたたむ

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

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 で導入

すべて展開する