質問: 私は現在、chainerのLSTMを使って自然言語処理のプログラムを作成しようとしています。 Encoder Decoder Modelのソフト注意機構について、質問したいことがあります。 現在、AttentionDecoderのmodelを次のように定義しています。 ``` class AttentionDecoder(Chain): def __init__(self, vsize, esize, hsize): # Attention ModelのためのDecoderのインスタンス化 # :param vsize: 語彙数 # :param esize: 単語ベクトルのサイズ # :param hsize: 隠れ層のサイズ super(AttentionDecoder, self).__init__( ye=L.EmbedID(vsize, esize, ignore_label=-1), # 単語を単語ベクトルに変換する層 eh=L.Linear(esize, 4 * hsize), # 単語ベクトルを隠れ層の4倍のサイズのベクトルに変換する層 hh=L.Linear(hsize, 4 * hsize), # Decoderの中間ベクトルを隠れ層の4倍のサイズのベクトルに変換する層 fh=L.Linear(hsize, 4 * hsize), # 順向きEncoderの中間ベクトルの加重平均を隠れ層の4倍のサイズのベクトルに変換する層 bh=L.Linear(hsize, 4 * hsize), # 順向きEncoderの中間ベクトルの加重平均を隠れ層の4倍のサイズのベクトルに変換する層 he=L.Linear(hsize, esize), # 隠れ層サイズのベクトルを単語ベクトルのサイズに変換する層 ey=L.Linear(esize, vsize) # 単語ベクトルを語彙数サイズのベクトルに変換する層 ``` ここで質問ですが、すべての隠れ層において、出力ベクトルサイズを入力ベクトルサイズの4倍にしています。通常は、出力ベクトルサイズは次の層の入力ベクトルサイズにしていると思います。この場合、ネットワークはどのようになっていると考えられますでしょうか。 よろしくお願いします。
回答: 前後のコードが不明で憶測で答えますが、おそらくこのコードのEncoderではLSTMが使われているように思えます。 LSTMのパラメータは * 入力ゲート * 忘却ゲート * 出力ゲート * メモリ がそれぞれありますので、この4つに合わせてAttentionを計算しているかもしれません。