ベクトル列を取ってそれぞれがサイズ n のベクトル列を生成する,訓練可能な回帰層を表す.
GatedRecurrentLayer[n,opts]
初期の重みやその他のパラメータについてのオプションを含む.
GatedRecurrentLayer
ベクトル列を取ってそれぞれがサイズ n のベクトル列を生成する,訓練可能な回帰層を表す.
GatedRecurrentLayer[n,opts]
初期の重みやその他のパラメータについてのオプションを含む.
詳細とオプション
- GatedRecurrentLayer[n]は,ベクトル列を表す入力行列を取って同じ長さの列を出力するネットを表す.
- 入力列の各要素はサイズ k のベクトルで,出力列の各要素はサイズ n のベクトルである.
- 入力ベクトルのサイズ k は,NetGraphやNetChain等の中で自動的に推測されることが多い.
- 次は,GatedRecurrentLayer[n]で表されるネットの入出力ポートである.
-
"Input" サイズ k のベクトル列 "Output" サイズ n のベクトル列 - 入力列{x1,x2,…,xT}が与えられると,GatedRecurrentLayerは次の回帰関係を使って状態列{s1,s2,…,sT}を出力する.デフォルトで,f はTanhである.
-
入力ゲート it=LogisticSigmoid[Wix.xt+Wis.st-1+bi] リセットゲート rt=LogisticSigmoid[Wrx.xt+Wrs.st-1+br] メモリゲート mt=f[Wmx.xt+rt*(Wms.st-1)+bm] 状態 st=(1-it)*mt+it*st-1 - GatedRecurrentLayerの上記定義は「Chung et al., Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling, 2014」で説明された異形に基づいている.
- GatedRecurrentLayer[n]は,単一状態のポート,"State"も持つ.これは,サイズ n のベクトルである.
- NetGraph内では,src->NetPort[layer,"State"]の形の接続を使って,再帰関係における s0に相当するGatedRecurrentLayerの状態についての初期値を与えることができる.デフォルトの初期値は零ベクトルである.
- NetGraph内では,NetPort[layer,"State"]->dst の形の接続を使って,再帰関係における sTに相当するGatedRecurrentLayerの状態についての最終的な値を得ることができる.
- NetStateObjectを使って,ネットが入力に適用されると更新されるGatedRecurrentLayerの状態値を記憶するネットを作ることができる.
- サイズ k のベクトルに作用する初期化されたGatedRecurrentLayer[…]は,次の訓練可能配列を含む.
-
"InputGateInputWeights" Wix サイズ n×k の行列 "InputGateStateWeights" Wis サイズ n×n の行列 "InputGateBiases" bi サイズ n のベクトル "ResetGateInputWeights" Wrx サイズ n×k の行列 "ResetGateStateWeights" Wrs サイズ n×n の行列 "ResetGateBiases" br サイズ n のベクトル "MemoryGateInputWeights" Wmx サイズ n×k の行列 "MemoryGateStateWeights" Wms サイズ n×n の行列 "MemoryGateBiases" bm サイズ n のベクトル - GatedRecurrentLayer[n,opts]では,"array"->valueの形の規則を使って初期値を訓練可能な配列に与えることができる.
- 次の任意のパラメータも含めることができる.
-
"Activation" "Tanh" メモリゲート出力を取得するために適用されるアクティベーション関数 "Dropout" None 単位が確率的にゼロに設定されているドロップアウト正規化 LearningRateMultipliers Automatic 訓練可能な配列の学習率乗数 - パラメータ"Activation"は,"Tanh"または"ReLU"に設定できる.
- "Dropout"->Noneとすると,訓練中のドロップアウトが無効になる.
- "Dropout"->p と設定すると,ドロップアウト確率 p で自動的に選択されたドロップアウトメソッドが適用される.
- "Dropout"->{"method1"->p1,"method2"->p2,…}の指定を使ってドロップアウトの特定のメソッドを対応するドロップアウト確率と結び付けることができる.
-
"VariationalWeights" 重み行列間の反復接続に適用されたドロップアウト(デフォルト) "VariationalInput" 連続する各ステップで単位の同じパターンを使って,入力からのゲートの寄与に適用されたドロップアウト "VariationalState" 連続する各ステップで単位の同じパターンを使って,前の状態からのゲートの寄与に適用されたドロップアウト "StateUpdate" 連続する各ステップで単位の異なるパターンを使って,前の状態に加えられる前に状態更新ベクトルに適用されたドロップアウト - ドロップアウトメソッドの"VariationalInput"および"VariationalState"は「Gal et al. 2016 method」に基づいているのに対し,"StateUpdate"は「Semeniuta et al. 2016 method」に,"VariationalWeights"は「 Merity et al. 2017 method」に基づいている.
- GatedRecurrentLayer[n,"Input"->shape]では,入力の形を指定することができる.次は shape の可能な形である.
-
NetEncoder[…] ベクトル列を作成するエンコーダ {len,k} 長さ k の len ベクトル列 {len,Automatic} 長さが推測される len ベクトル列 {"Varying",k} さまざまな数の,それぞれが長さ k のベクトル {"Varying",Automatic} さまざまな数の,それぞれの長さが推測されるベクトル - NumericArrayが入力として与えられると,出力はNumericArrayになる.
- Options[GatedRecurrentLayer]は層を構築する際のデフォルトオプションのリストを与える.Options[GatedRecurrentLayer[…]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
- Information[GatedRecurrentLayer[…]]は層についてのレポートを与える.
- Information[GatedRecurrentLayer[…],prop]はGatedRecurrentLayer[…]の特性 prop の値を与える.使用可能な特性はNetGraphと同じである.
例題
すべて開く すべて閉じる例 (2)
長さ3のベクトルの列を作るGatedRecurrentLayerを作る:
GatedRecurrentLayer[3]長さ2のベクトルの列を入力として取り,長さ3のベクトルの列を生成する,ランダムに初期化されたGatedRecurrentLayerを作る:
gru = NetInitialize@GatedRecurrentLayer[3, "Input" -> {"Varying", 2}]gru[{{1, 2}, {0, 1}, {2, 1}, {1, 2}}]//MatrixFormスコープ (6)
引数 (1)
長さ3のベクトルのシーケンスを生成するGatedRecurrentLayerを作成する:
GatedRecurrentLayer[2]ポート (5)
文字列を取って長さ2のベクトルの列を作る,ランダムに初期化されたGatedRecurrentLayerを作る:
gru =
NetInitialize@GatedRecurrentLayer[2, "Input" -> NetEncoder[{"Characters", Automatic, "UnitVector"}]]gru["hello world"]//MatrixFormgru[{"good", "bye"}]//Map[MatrixForm]長さ2のベクトルの列を取って長さ2の単一のベクトルを作る,ランダムに初期化されたネットを作る:
net = NetInitialize@NetChain[{
GatedRecurrentLayer[3, "Input" -> {"Varying", 2}],
SequenceLastLayer[]
}]net[{{1, 2}, {2, 1}, {3, 0}}]net[{{{1, 2}, {2, 1}, {3, 0}}, {{3, 3}, {0, 0}}}]Ramp ("ReLU")関数を使ってメモリゲート出力を生成するGatedRecurrentLayerを作成する:
GatedRecurrentLayer[3, "Activation" -> "ReLU"]GatedRecurrentLayerの初期状態の設定を許すNetGraphを作る:
graph = NetInitialize@NetGraph[
{GatedRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort["InitialState"] -> NetPort[1, "State"]}]graph[<|"Input" -> {{1, 2}, {2, 0}, {3, 1}}, "InitialState" -> {1, 1}|>]GatedRecurrentLayerの最終状態の取得を許すNetGraphを作る:
graph = NetInitialize@NetGraph[
{GatedRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort[1, "State"] -> NetPort["FinalState"]}]graph[{{1, 2}, {2, 0}, {3, 1}}]%[["FinalState"]] == %[["Output", -1]]オプション (2)
"Dropout" (2)
ドロップアウトメソッドを指定してGatedRecurrentLayerを作る:
net = GatedRecurrentLayer[2, "Dropout" -> {"VariationalInput" -> 0.2, "VariationalState" -> 0.5}]指定されたドロップアウト確率で,ランダムに初期化された GatedRecurrentLayerを作る:
gru = NetInitialize@GatedRecurrentLayer[2, "Dropout" -> 0.5, "Input" -> {"Varying", 2}]data = {{1, 2}, {3, 4}, {1, 0}, {2, 2}};
gru[data]//MatrixFormgru2 = NetReplacePart[gru, "Dropout" -> 0];
gru[data] == gru2[data]NetEvaluationModeを使ってドロップアウトの訓練動作を強制する:
gru[data, NetEvaluationMode -> "Train"]//MatrixForm同じ入力を複数回評価すると異なる結果が与えられることがある:
Table[gru[{{1, 2}, {3, 4}, {5, 6}, {7, 8}}, NetEvaluationMode -> "Train"], 5]//Map[MatrixPlot[#, ImageSize -> 30, FrameTicks -> None]&]アプリケーション (2)
2桁足し算と対応する数値結果を記述する,文字列からなる訓練データを作る:
enc = NetEncoder[{"Characters", {DigitCharacter, "+"}}];
makeRule[a_, b_] := IntegerString[a] <> "+" <> IntegerString[b] -> a + b;
trainingData = Flatten@Table[makeRule[i, j], {i, 0, 99}, {j, 0, 99}];
RandomSample[trainingData, 4]//InputForm入力文字列を読んで数値結果を予測する積み重ねられたGatedRecurrentLayerを使ってネットワークを作る:
net = NetChain[{UnitVectorLayer[], GatedRecurrentLayer[40], GatedRecurrentLayer[30], SequenceLastLayer[], LinearLayer[1]}, "Input" -> enc, "Output" -> "Scalar"];trained = NetTrain[net, trainingData, BatchSize -> 64, MaxTrainingRounds -> 200, ValidationSet -> Scaled[0.1]]Round@trained[{"5+2", "10+25", "9+11", "44+44"}]xとyの数を比較することで,xとyおよびLess,Greater,Equalのいずれかを含む文字列に基づいた訓練データを作る.訓練データは長さ8までの可能なすべての文からなる:
alphabet = {"x", "y", " "};
inputs = Flatten@Table[StringJoin /@ Tuples[alphabet, n], {n, 1, 8}];
cmpXY[str_] := Switch[Sign[StringCount[str, "x"] - StringCount[str, "y"]], -1, Less, 0, Equal, 1, Greater];
outputs = cmpXY /@ inputs;
trainingData = Thread[inputs -> outputs];
RandomSample[trainingData, 4]//InputForm入力を読んでLess,Greater,Equalの一つを予測するGatedRecurrentLayerを含むネットワークを作る:
net = NetChain[{UnitVectorLayer[], GatedRecurrentLayer[5], SequenceLastLayer[], LinearLayer[3], SoftmaxLayer[]}, "Input" -> NetEncoder[{"Characters", alphabet}], "Output" -> NetDecoder[{"Class", {Less, Equal, Greater}}]];trained = NetTrain[net, trainingData, BatchSize -> 64, MaxTrainingRounds -> 100, ValidationSet -> Scaled[0.2]]trained[{"xxy", "xyy", "xyxy"}]NetMeasurements[trained, trainingData, "Accuracy"]特性と関係 (1)
NetStateObjectを使ってGatedRecurrentLayerの状態を記憶するネットを作ることができる:
sobj = NetStateObject[NetInitialize@GatedRecurrentLayer[2, "Input" -> {"Varying", 2}]]各評価によってNetStateObjectの中に保存された状態が変更される:
sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]テクニカルノート
関連するガイド
-
▪
- ニューラルネットワーク層 ▪
- 音声計算
テキスト
Wolfram Research (2017), GatedRecurrentLayer, Wolfram言語関数, https://reference.wolfram.com/language/ref/GatedRecurrentLayer.html (2026年に更新).
CMS
Wolfram Language. 2017. "GatedRecurrentLayer." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2026. https://reference.wolfram.com/language/ref/GatedRecurrentLayer.html.
APA
Wolfram Language. (2017). GatedRecurrentLayer. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/GatedRecurrentLayer.html
BibTeX
@misc{reference.wolfram_2026_gatedrecurrentlayer, author="Wolfram Research", title="{GatedRecurrentLayer}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/GatedRecurrentLayer.html}", note=[Accessed: 07-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_gatedrecurrentlayer, organization={Wolfram Research}, title={GatedRecurrentLayer}, year={2026}, url={https://reference.wolfram.com/language/ref/GatedRecurrentLayer.html}, note=[Accessed: 07-November-2026]}