Seq2Seqメモ
Sequence-to-Sequence(Seq2Seq)学習は、任意長の入力列から任意長の出力列を出力するような学習のことで、Neural Networkの枠組みで扱う方法が提案されて、いい結果が報告されています。雑なメモ。
入力・出力列の例
(自然)言語処理系
- 機械翻訳(翻訳元->翻訳先)
- 会話(文脈->返答)
- 言語処理系(ソースコード->実行結果)
- アルゴリズム
- 質問応答・メールの返答
など。
メモリユニット
通常のRNNでは、中間の隠れ層にあたる部分は「直接的に入力から状態を計算するだけの単純なユニット」でしたが、過去の長期の情報を保持できるよう拡張した「GRU」や「LSTM」と呼ばれるユニットに置き換えたものが使われています。
GRUは、メモリの役割を持つ内部状態を持たせて、ユニットの入力として「update gate」「reset gate」を増やし、その2つの入力でメモリの状態や入力xの影響度を操作できるようにしているようです。
LSTMは、メモリの役割を持つ内部状態を持たせて、ユニットの入力として「input gate」「output gate」「forget gate」を増やし、その3つの入力でメモリの状態や入力、出力の調整を行えるようにしているようです。メモリ状態を各gateの制御に使えるようにつないでいる場合は「peephole connection」版で、つながない版もよく使われるみたいです。
Seq2Seqの種類
- Simple Seq2Seq
- 単純なSeq2Seqのモデルは、encoder(入力->隠れ状態)とdecoder(隠れ状態->出力)を連続的に行う構造
- encoderは、入力から隠れ層ユニットを更新するだけ
- 入力の終わりを入力すると、そこからdecoderが始まり、対応する出力を1つずつ出力していく
- Peeky Seq2Seq
- Simple Seq2Seqのencoderとdecoderの間に文脈ベクトルcに関する隠れ層を追加したもの
- Attention Seq2Seq
- 上記のSeq2Seqのモデルだと、入力はencoderの時だけで、decoderのときは入力を受け取れない
- decoderの部分で入力時の隠れ層の状態が考慮できるように(見えるように?)したものっぽい