深層学習
論文読み

論文読み "Attention Is All You Need"

More than 1 year has passed since last update.


概要


Introduction


  • 今までのNeural machine translation(NMT)はRNNやCNNを使っているものが多い。

  • RNN(LSTM、GRU等)は文章(単語列)を前から順に入力とし、前の単語に依存する。


    • t番目の状態 $h_t$ を計算するために、t番目の単語とt-1番目の状態 $h_{t-1}$ を使用する。



  • しかし、RNNだと並列化が難しく、特に文章が長いと計算時間が長くなる/メモリ使用量が多くなる。


    • メモリ使用量に関しては、"factorization tricks"や"conditional computation"といった研究がある。



  • ほとんどすべての翻訳モデル等では、attention構造を入れることで精度の改善がされている。

  • この論文で提案するTransformerはRNNやCNNを使わない。

  • 論文のタイトルの通り、attention構造を使う。


モデルの全体像


  • エンコーダー・デコーダー構造を持つ。

model_architecture.png


エンコーダー


  • 上図の左側。

  • N個(=6)のlayerからなる。

  • 各layerの下記の2個のsub-layerを持つ。(※詳細は後述)


    • multi-head self-attention mechanism

    • position-wise fully connected feed-forward network



  • 各sub-layerのアウトプットは下記のようにresidual connectionとlayer normalizatonを行う。


    • $\text{LayerNorm}(x + \text{Sublayer}(x))$



  • 各layerとembeddingアウトプットは $d_{\text{model}}$ 次元(=512)になる


デコーダー


  • 上図の右側

  • デコーダーもN個(=6)のlayerからなる。

  • 各layerの下記の3個のsub-layerを持つ。(※詳細は後述)


    • masked multi-head self-attention mechanism

    • $i$ 番目の文字を予測するために、$i-1$ 番目までの文字のみを利用するようにマスクを行う。

    • multi-head attention mechanism

    • エンコーダーのアウトプットへのattentionを行う。

    • position-wise fully connected feed-forward network




データの流れ


エンコーダー


  1. Input


    • 文字列 $\bar{w} = (w_1, w_2, ..., w_{N})$

    • ただし、$w_1=\text{bos}$ 、 $w_N=\text{eos}$



  2. Endedding


    • $E = \text{Embed}(\bar{w}) \in R^{N \times d_{model}}$



  3. Positional Encoding


    • $\bar{E} = \text{Positional}(E) \in R^{N \times d_{model}}$



  4. Multi-head self-attention


    • $Q = f_Q(\bar{E}) \in R^{N \times d_k}$

    • $K = f_K(\bar{E}) \in R^{N \times d_k}$

    • $V = f_V(\bar{E}) \in R^{N \times d_k}$

    • $M = \text{MultiHead}(Q, K, V) \in R^{N \times d_{model}}$



  5. Add & Norm


    • $\bar{M} = \text{LayerNorm}(\bar{E} + M) \in R^{N \times d_{model}}$



  6. Position-wise fully connected feed-forward network


    • $F = \text{LayerNorm}(\bar{M}) \in R^{N \times d_{model}}$



  7. Add & Norm


    • $\bar{F} = \text{LayerNorm}(\bar{M} + F) \in R^{N \times d_{model}}$




デコーダー


  • エンコーダーとほぼ同じ。違いは1番目のsub-layerでmaskを行うこと、2番目でエンコーダーの結果からKとVを計算すること。

  • Mask


    • Positional encodingの結果を $\bar{E} \in R^{N \times d_{model}}$ とする。

    • i 番目の単語の予測を行うとき、$\bar{E}$ の $i$ 行 から $L$ 行の要素すべてを0にする。




モデルの構成要素


  • Transformerを構成する要素の紹介

  • N を文章の長さとする。


Embedding


  • 単語を $d_{model}$ 次元のベクトルで表す


Positional encoding


  • RNNのようにモデルの構造が単語の順序関係を持っていないので、位置情報を付与する。

  • 文章における単語の位置とembeddingの位置に依存して決まる。

  • 奇数/偶数で分ける


    • $PE(pos, 2i) = \sin(pos/10000^{2i/d_{model}})$

    • $PE(pos, 2i+1) = \cos(pos/10000^{2i/d_{model}})$




Scaled dot-product attention


  • $\text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$


    • $Q \in R^{N \times d_k}$

    • $K \in R^{N \times d_k}$

    • $V \in R^{N \times d_v}$

    • $\text{Attention}(Q, K, V) \in R^{N \times d_v}$




Multi head attention


  • $\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}1, ..., \text{head}h) W^O$


    • $\text{head}i = \text{Attention}(QW^Qi, KW^K_i, VW^V_i)$

    • $W^Q_i \in R^{d_{model} \times d_k}$

    • $W^K_i \in R^{d_{model} \times d_k}$

    • $W^V_i \in R^{d_{model} \times d_v}$

    • $W^O \in R^{h d_{k} \times d_{model}}$

    • $\text{MultiHead}(Q, K, V) \in R^{N \times d_{model}}$




Multi head self attentionのQ, K, V


  • Self-attention


    • 文字列に対してEmbeddingとPositionalEncodingを対したものをXとする。

    • $X \in R^{N \times d_{model}}$

    • $Q=f_Q(X)$

    • ${q_{ij}} = {a^Q_j x_{ij}}$

    • $K=f_K(X)$、$V=f_V(X)$ も$f_Q$と同じ。



  • Attention


    • $Q=f_Q(X)$

    • $K=f_K(Z)$、$V=f_V(Z)$

    • $Z$ はencoderの出力結果




Position-wise feed-forward network


  • $\text{FFN}(x) = \text{ReLU}(x W_1 + b_1)W_2 + b_2$


Training方法


ハードウェア


最適化手法


  • Adam optimizerを仕様し、learning rateを下記のように調整

  • $lrate = d_{model}^{-0.5} \min(step_num^{-0.5}, step_num \cdot warmup_steps^{-1.5})$


正則化


Residual dropout


  • 各sub-layerに対してdropoutを行ってから、Add & Normを行う


    • $\text{LayerNorm}(x + \text{DropOut}(\text{Sub}(x), P_{drop}))$




Label smoothing


  • モデルが出力するのは各単語に対する確率なので、{0, 1}の正解ラベルをスムージングする。


    • $q(k) = (1 - \epsilon) \delta_{k,y} + \frac{\epsilon}{K}$

    • Transformerでは、$\epsilon=0.1$としている。



  • これによりperplexityは悪化したが、accuracyとBLEUは改善した。

  • Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, and Zbigniew Wojna.
    Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015.


パフォーマンスなど


各Layerの複雑さなど


  • RNNやCNNによるattention構造との比較


    • layerごとの計算の複雑さ

    • 並列化できる計算の量

    • 長期依存のパスの長さ



complexity.png


BLEUスコア


  • English-to-Germanのケースデスはbase modelでも他の手法に比べ最高スコアを出している。big modelを使うことで更に精度が向上している。

result.png


実際に使ってみる


  • 追記する。