ベクトル列を取ってそれぞれがサイズ n のベクトル列を生成する,訓練可能な回帰層を表す.
BasicRecurrentLayer[n,opts]
初期の重みや他のパラメータについてのオプションを含む.
BasicRecurrentLayer
ベクトル列を取ってそれぞれがサイズ n のベクトル列を生成する,訓練可能な回帰層を表す.
BasicRecurrentLayer[n,opts]
初期の重みや他のパラメータについてのオプションを含む.
詳細とオプション
- BasicRecurrentLayer[n]は,ベクトル列を表す入力行列を取って同じ長さの列を出力するネットを表す.
- 入力列の各要素はサイズ k のベクトルであり,出力列の各要素はサイズ n のベクトルである.
- 入力ベクトルのサイズ k は,通常はNetGraphやNetChain等の中で自動的に推定される.
- 次は,BasicRecurrentLayer[n]で表されるネットの入出力ポートである.
-
"Input" サイズ k のベクトル列 "Output" サイズ n のベクトル列 - 入力列{x1,x2,…,xT}が与えられると,BasicRecurrentLayerは状態列{s1,s2,…,sT}を出力する.ただし,st=f[wi.xt+ws.st-1+b]である.デフォルトで,関数 f はTanhである.
- BasicRecurrentLayer[n]は単一の状態ポート"State"を持つ.これは,サイズ n のベクトルである.
- NetGraph内では,src->NetPort[layer,"State"]の形の接続を使って,再帰関係における s0に相当するBasicRecurrentLayerの状態についての初期値を与えることができる.デフォルトの初期値は零ベクトルである.
- NetGraph内では,NetPort[layer,"State"]->dst の形の接続を使って,再帰関係における sTに相当するBasicRecurrentLayerの状態についての最終的な値を得ることができる.
- NetStateObjectを使って,ネットが入力に適用されると変更されるBasicRecurrentLayerの状態値を記憶するネットを作ることができる.
- サイズ k のベクトルに作用する初期化されたBasicRecurrentLayer[…]は,次の訓練可能な配列を含む.
-
"InputWeights" Wx サイズ n×k の行列 "StateWeights" Ws サイズ n×n の行列 "Biases" b サイズ n のベクトル - BasicRecurrentLayer[n,opts]で"array"->value の形式の規則を使って訓練可能な配列に初期値を与えることができる.
- 次の任意のパラメータを含めることができる.
-
"Activation" "Tanh" 出力の状態を入手するために適用されるアクティベーション関数 "Dropout" None 単位が確率的に0に設定されるドロップアウト正規化 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」に基づいている.
- BasicRecurrentLayer[n,"Input"->shape]では入力の形を指定することができる.次は shape の使用可能な形である.
-
NetEncoder[…] ベクトル列を作成するエンコーダ {len,k} 長さ k の len ベクトル列 {len,Automatic} 長さが推測される len ベクトル列 {"Varying",k} さまざまな数の,それぞれが長さ k のベクトル {"Varying",Automatic} さまざまな数の,それぞれの長さが推測されるベクトル - NumericArrayが入力として与えられると,出力はNumericArrayになる.
- Options[BasicRecurrentLayer]は層を構築する際のデフォルトオプションのリストを与える.Options[BasicRecurrentLayer[…]]はデータについて層を評価する際のデフォルトオプションのリストを与える.
- Information[BasicRecurrentLayer[…]]は層についてのレポートを与える.
- Information[BasicRecurrentLayer[…],prop]はBasicRecurrentLayer[…]の特性 prop の値を与える.使用可能な特性はNetGraphと同じである.
例題
すべて開く すべて閉じる例 (2)
長さ3のベクトル列を作るBasicRecurrentLayerを作る:
BasicRecurrentLayer[3]長さ2のベクトル列を取って長さ3のベクトル列を作る,ランダムに初期化されたBasicRecurrentLayerを作る:
rnn = NetInitialize@BasicRecurrentLayer[3, "Input" -> {"Varying", 2}]rnn[{{1, 2}, {0, 1}, {2, 1}, {1, 2}}]//MatrixFormスコープ (5)
ポート (5)
文字列を取って長さ2のベクトル列を作る,ランダムに初期化されたBasicRecurrentLayerを作る:
rnn =
NetInitialize@BasicRecurrentLayer[2, "Input" -> NetEncoder[{"Characters", Automatic, "UnitVector"}]]rnn["hello world"]//MatrixFormrnn[{"good", "bye"}]//Map[MatrixForm]長さ2のベクトルの列を取って長さ3の単一のベクトルを作る,ランダムに初期化されたネットを作る:
net = NetInitialize@NetChain[{
BasicRecurrentLayer[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") 関数を使ってその出力状態を生成するBasicRecurrentLayerを作成する:
BasicRecurrentLayer[3, "Activation" -> "ReLU"]BasicRecurrentLayerの初期状態を設定することができるNetGraphを作る:
graph = NetInitialize@NetGraph[
{BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort["InitialState"] -> NetPort[1, "State"]}]graph[<|"Input" -> {{1, 2}, {2, 0}, {3, 1}}, "InitialState" -> {1, 1}|>]BasicRecurrentLayerの最終状態を取得することができるNetGraphを作る:
graph = NetInitialize@NetGraph[
{BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort[1, "State"] -> NetPort["FinalState"]}]graph[{{1, 2}, {2, 0}, {3, 1}}]%[["FinalState"]] == %[["Output", -1]]オプション (2)
"Dropout" (2)
ドロップアウトメソッドを指定してBasicRecurrentLayerを作る:
BasicRecurrentLayer[2, "Dropout" -> {"VariationalInput" -> 0.1, "VariationalState" -> 0.1}]指定されたドロップアウト確率でランダムに初期化されたBasicRecurrentLayerを作る:
rnn = NetInitialize@BasicRecurrentLayer[2, "Dropout" -> 0.5, "Input" -> {"Varying", 2}]data = {{1, 2}, {3, 4}, {1, 0}, {2, 2}};
rnn[data]//MatrixFormrnn2 = NetReplacePart[rnn, "Dropout" -> 0];
rnn[data] == rnn2[data]NetEvaluationModeを使ってドロップアウトの訓練動作を強制する:
rnn[data, NetEvaluationMode -> "Train"]//MatrixForm同じ入力を複数回評価得ると異なる結果が与えられるかもしれない:
Table[rnn[{{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入力文字列を読んで数値結果を予測する,積み上げられたBasicRecurrentLayerを使ってネットワークを作る:
net = NetChain[{UnitVectorLayer[], BasicRecurrentLayer[40], BasicRecurrentLayer[40], 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のうち1つを予測する,BasicRecurrentLayerを含むネットワークを作る:
net = NetChain[{UnitVectorLayer[], BasicRecurrentLayer[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を使ってBasicRecurrentLayerの状態を記憶するネットを作ることができる:
sobj = NetStateObject[NetInitialize@BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]]各評価によってNetStateObjectの中に保存された状態が変更される:
sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]テクニカルノート
関連するガイド
テキスト
Wolfram Research (2017), BasicRecurrentLayer, Wolfram言語関数, https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html (2026年に更新).
CMS
Wolfram Language. 2017. "BasicRecurrentLayer." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2026. https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html.
APA
Wolfram Language. (2017). BasicRecurrentLayer. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html
BibTeX
@misc{reference.wolfram_2026_basicrecurrentlayer, author="Wolfram Research", title="{BasicRecurrentLayer}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html}", note=[Accessed: 17-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_basicrecurrentlayer, organization={Wolfram Research}, title={BasicRecurrentLayer}, year={2026}, url={https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html}, note=[Accessed: 17-August-2026]}