logo

seq2seqモデル 📂機械学習

seq2seqモデル

定義

入力ベクトルの数列$\left\{ \mathbf{x}_{1}, \mathbf{x}_{2}, \dots, \mathbf{x}_{T_{x}} \right\}$ $(\mathbf{x}_{t} \in \mathbb{R}^{n})$をコンテキストベクトルcontext vector $\mathbf{c} \in \mathbb{R}^{d_{c}}$へ写すエンコーダと、コンテキストベクトルを出力ベクトルの数列$\left\{ \mathbf{y}_{1}, \mathbf{y}_{2}, \dots, \mathbf{y}_{T_{y}} \right\}$ $(\mathbf{y}_{t} \in \mathbb{R}^{p})$へ写すデコーダ合成sequence-to-sequence、略してseq2seqモデルという。エンコーダとデコーダをそれぞれ関数として表すと次のようになる。

$$ \begin{align*} \operatorname{Encoder} : \left( \mathbb{R}^{n} \right)^{T_{x}} &\to \mathbb{R}^{d_{c}} \\ \left\{ \mathbf{x}_{t} \right\}_{t=1}^{T_{x}} &\mapsto \mathbf{c} \end{align*} $$

$$ \begin{align*} \operatorname{Decoder} : \mathbb{R}^{d_{c}} &\to \left( \mathbb{R}^{p} \right)^{T_{y}} \\ \mathbf{c} &\mapsto \left\{ \mathbf{y}_{t} \right\}_{t=1}^{T_{y}} \end{align*} $$

seq2seqモデルはこの二つの合成である。

$$ \operatorname{seq2seq} := \operatorname{Decoder} \circ \operatorname{Encoder} : \left\{ \mathbf{x}_{1}, \mathbf{x}_{2}, \dots, \mathbf{x}_{T_{x}} \right\} \mapsto \left\{ \mathbf{y}_{1}, \mathbf{y}_{2}, \dots, \mathbf{y}_{T_{y}} \right\} $$

  • ここで$T_{x}, T_{y} \in \mathbb{N}$はそれぞれ入力数列と出力数列の長さであり、互いに等しい必要はない。

説明

seq2seqモデルは、NIPS 2014で発表された論文『Sequence to Sequence Learning with Neural Networks』において🔒(26/07/28)機械翻訳のために提案されたエンコーダ・デコーダ構造のニューラルネットワークモデルである1

エンコーダとデコーダには通常リカレントニューラルネットワーク(RNN)が用いられ、原論文では具体的にLSTMを使用した。エンコーダは入力数列を時点順に読み進めながら隠れ状態hidden state $\mathbf{h}_{t}$を更新する。一般にコンテキストベクトルは隠れ状態たちの関数$\mathbf{c} = q(\mathbf{h}_{1}, \dots, \mathbf{h}_{T_{x}})$として定義できるが、原論文ではその中で最も単純な選択として、最後の時点の隠れ状態をそのままコンテキストベクトルとして用いる($\mathbf{c} = \mathbf{h}_{T_{x}}$)。デコーダは$\mathbf{c}$を初期隠れ状態として出力ベクトルを一時点ずつ生成するが、このとき直前の時点の出力が次の時点の入力として入る。実際には出力長$T_{y}$があらかじめ決まっているのではなく、デコーダが数列の終わりを意味する特別な🔒(26/07/30)トークンを出力するまで生成を続ける。

seq2seqモデルの特徴は、定義で述べたように入力数列と出力数列の長さが等しい必要がないことである($T_{x} \ne T_{y}$)。代表的な応用である機械翻訳を考えれば当然要求される性質であり、「나는 학생이다」を「I am a student」に訳すように原文と訳文をトークン単位に分割して🔒(26/08/01)埋め込みすると、二つの数列の長さは一般に異なるからである。

一方、エンコーダとデコーダの間を行き来する情報は、固定された次元$d_{c}$のコンテキストベクトル$\mathbf{c}$ただ一つである。入力がどれほど長くなってもその内容をベクトル一つに押し込めなければならないため、入力が長いほど情報損失が大きくなるボトルネックbottleneckが生じ、これはseq2seqモデルが持つ構造的な限界と見なせる。この問題を解決するために、デコーダが毎時点でエンコーダのすべての隠れ状態を再び参照するようにしたのが🔒(26/07/22)アテンションであり2、さらに循環構造を完全に捨ててアテンションだけで数列を処理するのが🔒(26/07/24)トランスフォーマー3である。

関連リンク


  1. Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. “Sequence to sequence learning with neural networks.” Advances in neural information processing systems 27 (2014). ↩︎

  2. Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” arXiv preprint arXiv:1409.0473 (2014). ↩︎

  3. Ashish Vaswani, et al. “Attention is all you need.” Advances in neural information processing systems 30 (2017). ↩︎