メインコンテンツ

gru

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

説明

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

メモ

この関数は、深層学習 GRU 演算を dlarray データに適用します。dlnetwork オブジェクトに GRU 演算を適用する場合は、gruLayer を使用します。

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 オプションを指定しなければなりません。

詳細については、深層学習のデータ形式を参照してください。

データ型: char | string

R2023a 以降

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

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

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

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

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

R2024a 以降

隠れ状態を更新する活性化関数。次のいずれかの値として指定します。

  • "tanh" — 双曲線正接関数 (tanh) を使用します。

  • "softsign" — ソフトサイン関数 softsign(x)=x1+|x| を使用します。

  • "relu" (R2024b 以降) — 正規化線形ユニット (ReLU) 関数 ReLU(x)={x,x>00,x0 を使用します。

ソフトウェアは、隠れ状態を更新する計算における関数 σs としてこのオプションを使用します。

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

R2024a 以降

ゲートに適用する活性化関数。次のいずれかの値として指定します。

  • "sigmoid" — シグモイド関数 σ(x)=(1+ex)1 を使用します。

  • "hard-sigmoid" — ハード シグモイド関数を使用します。

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

ソフトウェアは、層のゲートの計算における関数 σg としてこのオプションを使用します。

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

出力引数

すべて折りたたむ

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

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

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

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

入力 H0 が、形式を整えた dlarray の場合、出力 hiddenState は、形式 "CB" をもち、形式を整えた dlarray になります。

詳細

すべて折りたたむ

参照

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

すべて展開する