質問: 私は現在、chainerのLSTMを使って自然言語処理のプログラムを作成しようとしています。 LinearやCNNを主にやってきたので、RNN(LSTM)のmodel定義について詳しくありませんので、質問したいことがあります。 現在、LSTMのmodelを次のように定義しています。 ``` class LSTM(Chain): def __init__(self, in_size, hidden_size, out_size): クラスの初期化 :param in_size: 入力層のサイズ :param hidden_size: 隠れ層のサイズ :param out_size: 出力層のサイズ super(LSTM, self).__init__( xh=L.Linear(in_size, hidden_size), hh=L.LSTM(hidden_size, hidden_size), hy=L.Linear(hidden_size, out_size) ) ``` ここで、LSTMのモデルは以下の図のように時系列的に次の時間のNNに伝播していくものであると認識しています。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/23d60de0affb400ce7b9718bcf2e400d.jpeg) 【質問1】 ところが、上記のmodelでは、1つの時間の分のNNしかありません。 これは、計測時間の数だけ自動的に生成されて次の時間のNNに伝播するものと認識していますが、その認識に間違いないでしょうか。 【質問2】 上記のmodelの場合、in_size(入力層のサイズ)とは入力ベクトルの次元数、hidden_size(隠れ層のサイズ)はLSTMのベクトルの次元数、out_size(出力層のサイズ)出力ベクトルの次元数と認識していますが、その認識に間違いないでしょうか。 【質問3】 LSTMの最後の層を全結合層と言っているようですが、それは上記のmodelのhyのことだと認識しています。その認識に間違いないでしょうか。 LSTMには詳しくないので、よろしくお願いします。
回答: 自己解決としては、次のとおりになります。 【質問1】 RNN(LSTM)は、ある単語の次にどの単語が来るかは単語の絶対的な位置に依存しないので、重みは同じ。 勾配情報は全時刻分を足し合わせるので、図の左側となる。 【質問2】 認識通り。 【質問3】 認識通り。