Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

gruLayer

ゲート付き回帰型ユニット (GRU) 層

説明

GRU 層は、時系列データおよびシーケンス データのタイム ステップ間の依存関係を学習します。

作成

説明

layer = gruLayer(numHiddenUnits) は、GRU 層を作成し、NumHiddenUnits プロパティを設定します。

layer = gruLayer(numHiddenUnits,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して、追加の OutputMode活性化状態パラメーターと初期化学習率および正則化、および Name の各プロパティを設定します。複数の名前と値のペアの引数を指定できます。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

GRU

このプロパティは読み取り専用です。

隠れユニットの数 (隠れサイズとも呼ばれる)。正の整数として指定します。

隠れユニットの数は、タイム ステップ間に記憶された情報 (隠れ状態) の量に相当します。隠れ状態には、シーケンス長に関係なく、以前のすべてのタイム ステップからの情報を含めることができます。隠れユニットの数が大きすぎる場合、層が学習データに対して過適合する可能性があります。この値は数十から数千までさまざまな数になります。

隠れ状態によって、1 回の反復で処理されるタイム ステップ数が制限されることはありません。関数 trainNetwork を使用するときにシーケンスをより小さなシーケンスに分割するには、SequenceLength 学習オプションを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

このプロパティは読み取り専用です。

出力モード。次のいずれかとして指定します。

  • 'sequence' – シーケンス全体を出力します。

  • 'last' – シーケンスの最後のタイム ステップを出力します。

層への状態入力のフラグ。1 (true) または 0 (false) として指定します。

HasStateInputs プロパティが 0 (false) の場合、層は、入力データに対応する 'in' という名前の 1 つの入力をもちます。この場合、層は HiddenState プロパティを使用して層処理を行います。

HasStateInputs プロパティが 1 (true) の場合、層は、それぞれ入力データおよび隠れ状態に対応する 'in' および 'hidden' という名前の 2 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1 (true) の場合、HiddenState プロパティは空でなければなりません。

層からの状態出力のフラグ。true または false として指定します。

HasStateOutputs プロパティが 0 (false) の場合、層は、出力データに対応する 'out' という名前の 1 つの出力をもちます。

HasStateOutputs プロパティが 1 (true) の場合、層は、それぞれ出力データおよび隠れ状態に対応する 'out' および 'hidden' という名前の 2 つの出力をもちます。この場合、層は、層処理中に計算された状態値も出力します。

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

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

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

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

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

このプロパティは読み取り専用です。

入力サイズ。正の整数または 'auto' として指定します。InputSize'auto' の場合、学習時に入力サイズが自動的に割り当てられます。

データ型: double | char | string

活性化

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

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

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

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

このプロパティは読み取り専用です。

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

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

  • 'hard-sigmoid' – ハード シグモイド関数

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

    を使用します。

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

状態

層処理で使用される隠れ状態。NumHiddenUnits 行 1 列の数値ベクトルとして指定します。この値は、データが層に渡されるときの隠れ状態の初期値に対応します。

このプロパティを手動で設定した後に関数 resetState を呼び出すと、隠れ状態がこの値に設定されます。

HasStateInputstrue の場合、HiddenState プロパティは空でなければなりません。

パラメーターと初期化

入力の重みを初期化する関数。次のいずれかに指定します。

  • 'glorot' – Glorot 初期化子[2](Xavier 初期化子とも呼ばれる) を使用して入力の重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(InputSize + numOut) の一様分布から個別にサンプリングを行います。ここで、numOut = 3*NumHiddenUnits です。

  • 'he' – He 初期化子[3]を使用して入力の重みを初期化します。He 初期化子は、平均 0、分散 2/InputSize の正規分布からサンプリングを行います。

  • 'orthogonal' – 直交行列 Q を使用して入力の重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[4]

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、入力の重みを初期化します。

  • 'zeros' – 0 で入力の重みを初期化します。

  • 'ones' – 1 で入力の重みを初期化します。

  • 関数ハンドル – カスタム関数で入力の重みを初期化します。関数ハンドルを指定する場合、関数は weights = func(sz) という形式でなければなりません。ここで、sz は入力の重みのサイズです。

この層では、InputWeights プロパティが空の場合にのみ入力の重みが初期化されます。

データ型: char | string | function_handle

再帰重みを初期化する関数。次のいずれかに指定します。

  • 'orthogonal' – 直交行列 Q を使用して再帰重みを初期化します。この直交行列は、単位正規分布からサンプリングされた乱数行列 Z に対する Z = QR の QR 分解によって与えられます。[4]

  • 'glorot' – Glorot 初期化子[2](Xavier 初期化子とも呼ばれる) を使用して再帰重みを初期化します。Glorot 初期化子は、平均 0、分散 2/(numIn + numOut) の一様分布から個別にサンプリングを行います。ここで、numIn = NumHiddenUnits および numOut = 3*NumHiddenUnits です。

  • 'he' – He 初期化子[3]を使用して再帰重みを初期化します。He 初期化子は、平均 0、分散 2/NumHiddenUnits の正規分布からサンプリングを行います。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、再帰重みを初期化します。

  • 'zeros' – 0 で再帰重みを初期化します。

  • 'ones' – 1 で再帰重みを初期化します。

  • 関数ハンドル – カスタム関数で再帰重みを初期化します。関数ハンドルを指定する場合、関数は weights = func(sz) という形式でなければなりません。ここで、sz は再帰重みのサイズです。

この層では、RecurrentWeights プロパティが空の場合にのみ再帰重みが初期化されます。

データ型: char | string | function_handle

バイアスを初期化する関数。次のいずれかに指定します。

  • zeros' – 0 でバイアスを初期化します。

  • 'narrow-normal' – 平均 0、標準偏差 0.01 の正規分布から個別にサンプリングを行って、バイアスを初期化します。

  • 'ones' – 1 でバイアスを初期化します。

  • 関数ハンドル – カスタム関数でバイアスを初期化します。関数ハンドルを指定する場合、関数は bias = func(sz) という形式でなければなりません。ここで、sz はバイアスのサイズです。

この層では、Bias プロパティが空の場合にのみバイアスが初期化されます。

データ型: char | string | function_handle

入力の重み。行列として指定します。

この入力重み行列は、GRU 層にあるコンポーネントの 3 つの入力重み行列の連結です。3 つの行列は、以下の順で垂直に連結されています。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

入力の重みは学習可能なパラメーターです。ネットワークの学習時に、InputWeights が空ではない場合、trainNetworkInputWeights プロパティを初期値として使用します。InputWeights が空の場合、trainNetworkInputWeightsInitializer によって指定された初期化子を使用します。

学習時、InputWeights3*NumHiddenUnitsInputSize 列の行列です。

再帰重み。行列として指定します。

この再帰重み行列は、GRU 層にあるコンポーネントの 3 つの再帰重み行列の連結です。3 つの行列は、以下の順で垂直に連結されています。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

再帰重みは学習可能なパラメーターです。ネットワークの学習時に、RecurrentWeights が空ではない場合、trainNetworkRecurrentWeights プロパティを初期値として使用します。RecurrentWeights が空の場合、trainNetworkRecurrentWeightsInitializer によって指定された初期化子を使用します。

学習時、RecurrentWeights3*NumHiddenUnitsNumHiddenUnits 列の行列です。

GRU 層の層のバイアス。数値ベクトルとして指定します。

ResetGateMode'after-multiplication' または 'before-multiplication' の場合、このバイアス ベクトルは、GRU 層にあるコンポーネントの 3 つのバイアス ベクトルの連結です。3 つのベクトルは、以下の順で垂直に連結されています。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

この場合、学習時、Bias3*NumHiddenUnits 行 1 列の数値ベクトルです。

ResetGateModerecurrent-bias-after-multiplication' の場合、このバイアス ベクトルは、GRU 層にあるコンポーネントの 6 つのバイアス ベクトルの連結です。6 つのベクトルは、以下の順で垂直に連結されています。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

  4. リセット ゲート (再帰バイアス)

  5. 更新ゲート (再帰バイアス)

  6. 候補状態 (再帰バイアス)

この場合、学習時、Bias6*NumHiddenUnits 行 1 列の数値ベクトルです。

層のバイアスは学習可能なパラメーターです。ネットワークの学習時に、Bias が空ではない場合、trainNetworkBias プロパティを初期値として使用します。Bias が空の場合、trainNetworkBiasInitializer によって指定された初期化子を使用します。

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

学習率および正則化

入力の重みの学習率係数。数値スカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、層の入力の重みの学習率係数が決定されます。たとえば、InputWeightsLearnRateFactor が 2 の場合、層の入力の重みの学習率係数は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

InputWeights に含まれる 3 つの個々の行列について学習率係数の値を制御するには、1 行 3 列のベクトルを指定します。InputWeightsLearnRateFactor のエントリは以下の学習率係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

再帰重みの学習率係数。数値スカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、層の再帰重みの学習率が決定されます。たとえば、RecurrentWeightsLearnRateFactor が 2 の場合、層の再帰重みの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、グローバル学習率が決定されます。

RecurrentWeights に含まれる 3 つの個々の行列について学習率係数の値を制御するには、1 行 3 列のベクトルを指定します。RecurrentWeightsLearnRateFactor のエントリは以下の学習率係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

バイアスの学習率係数。非負のスカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル学習率が乗算されて、この層のバイアスの学習率が決定されます。たとえば、BiasLearnRateFactor2 の場合、層のバイアスの学習率は現在のグローバル学習率の 2 倍になります。関数 trainingOptions で指定した設定に基づいて、グローバル学習率が決定されます。

Bias に含まれる 3 つの個々のベクトルについて学習率係数の値を制御するには、1 行 3 列のベクトルを指定します。BiasLearnRateFactor のエントリは以下の学習率係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

ResetGateMode'recurrent-bias-after-multiplication' の場合、ソフトウェアは再帰バイアス ベクトルについても同じベクトルを使用します。

すべてのベクトルに同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

入力の重みの L2 正則化係数。数値スカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、層の入力の重みの L2 正則化係数が決定されます。たとえば、InputWeightsL2Factor が 2 の場合、層の入力の重みの L2 正則化係数は現在のグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、L2 正則化係数が決定されます。

InputWeights に含まれる 3 つの個々の行列の L2 正則化係数の値を制御するには、1 行 3 列のベクトルを指定します。InputWeightsL2Factor のエントリは以下の L2 正則化係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

再帰重みの L2 正則化係数。数値スカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、層の再帰重みの L2 正則化係数が決定されます。たとえば、RecurrentWeightsL2Factor が 2 の場合、層の再帰重みの L2 正則化係数は現在のグローバル L2 正則化係数の 2 倍になります。関数 trainingOptions で指定された設定に基づいて、L2 正則化係数が決定されます。

RecurrentWeights に含まれる 3 つの個々の行列の L2 正則化係数の値を制御するには、1 行 3 列のベクトルを指定します。RecurrentWeightsL2Factor のエントリは以下の L2 正則化係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

すべての行列に同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

バイアスの L2 正則化係数。非負のスカラーまたは 1 行 3 列の数値ベクトルとして指定します。

この係数にグローバル L2 正則化係数が乗算されて、この層のバイアスの L2 正則化が決定されます。たとえば、BiasL2Factor2 の場合、この層のバイアスの L2 正則化はグローバル L2 正則化係数の 2 倍になります。グローバル L2 正則化係数は、関数 trainingOptions を使用して指定できます。

Bias に含まれる個々のベクトルの L2 正則化係数の値を制御するには、1 行 3 列のベクトルを指定します。BiasL2Factor のエントリは以下の L2 正則化係数に対応します。

  1. リセット ゲート

  2. 更新ゲート

  3. 候補状態

ResetGateMode'recurrent-bias-after-multiplication' の場合、ソフトウェアは再帰バイアス ベクトルについても同じベクトルを使用します。

すべてのベクトルに同じ値を指定するには、非負のスカラーを指定します。

例: 2

例: [1 2 1]

層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、関数 trainNetworkassembleNetworklayerGraph、および dlnetwork は、名前が '' の層に自動的に名前を割り当てます。

データ型: char | string

層の入力の数。

HasStateInputs プロパティが 0 (false) の場合、層は、入力データに対応する 'in' という名前の 1 つの入力をもちます。この場合、層は HiddenState プロパティを使用して層処理を行います。

HasStateInputs プロパティが 1 (true) の場合、層は、それぞれ入力データおよび隠れ状態に対応する 'in' および 'hidden' という名前の 2 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1 (true) の場合、HiddenState プロパティは空でなければなりません。

データ型: double

層の入力名。

HasStateInputs プロパティが 0 (false) の場合、層は、入力データに対応する 'in' という名前の 1 つの入力をもちます。この場合、層は HiddenState プロパティを使用して層処理を行います。

HasStateInputs プロパティが 1 (true) の場合、層は、それぞれ入力データおよび隠れ状態に対応する 'in' および 'hidden' という名前の 2 つの入力をもちます。この場合、層はこれらの入力に渡された値を使用して層処理を行います。HasStateInputs1 (true) の場合、HiddenState プロパティは空でなければなりません。

層の出力の数。

HasStateOutputs プロパティが 0 (false) の場合、層は、出力データに対応する 'out' という名前の 1 つの出力をもちます。

HasStateOutputs プロパティが 1 (true) の場合、層は、それぞれ出力データおよび隠れ状態に対応する 'out' および 'hidden' という名前の 2 つの出力をもちます。この場合、層は、層処理中に計算された状態値も出力します。

データ型: double

層の出力名。

HasStateOutputs プロパティが 0 (false) の場合、層は、出力データに対応する 'out' という名前の 1 つの出力をもちます。

HasStateOutputs プロパティが 1 (true) の場合、層は、それぞれ出力データおよび隠れ状態に対応する 'out' および 'hidden' という名前の 2 つの出力をもちます。この場合、層は、層処理中に計算された状態値も出力します。

すべて折りたたむ

名前が 'gru1' で、隠れユニットが 100 個の GRU 層を作成します。

layer = gruLayer(100,'Name','gru1')
layer = 
  GRULayer with properties:

                       Name: 'gru1'
                 InputNames: {'in'}
                OutputNames: {'out'}
                  NumInputs: 1
                 NumOutputs: 1
             HasStateInputs: 0
            HasStateOutputs: 0

   Hyperparameters
                  InputSize: 'auto'
             NumHiddenUnits: 100
                 OutputMode: 'sequence'
    StateActivationFunction: 'tanh'
     GateActivationFunction: 'sigmoid'
              ResetGateMode: 'after-multiplication'

   Learnable Parameters
               InputWeights: []
           RecurrentWeights: []
                       Bias: []

   State Parameters
                HiddenState: []

  Show all properties

Layer 配列に GRU 層を含めます。

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    gruLayer(numHiddenUnits)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   GRU                     GRU with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

アルゴリズム

すべて展開する

参照

[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).

[2] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010.

[3] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In Proceedings of the 2015 IEEE International Conference on Computer Vision, 1026–1034. Washington, DC: IEEE Computer Vision Society, 2015.

[4] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks." arXiv preprint arXiv:1312.6120 (2013).

拡張機能

バージョン履歴

R2020a で導入