Day 4 - Transformer のまとめ


この記事は個人的なお勉強用のメモです。

講義

NN 機械翻訳の問題点

長さに弱い。

理由
・翻訳元の文の内容をひとつのベクトルで表現
・文長と翻訳精度の関係性

資料の 2 つのグラフからわかるとおり、
Encoder-Decoder モデルの方が 統計的機械翻訳モデルよりも
BLEU スコアが低い。

Attention(注意機構)

概要

翻訳先の各単語を選択する際に、翻訳元の文中の各単語の
隠れ状態を利用
重みをすべて足すと 1


h1 は重めに
h2 は軽めに

これにより、翻訳元と翻訳先とで単語ごとに注意を払う。
文中のある単語の意味を理解する時に、文中の単語のどれに注目すれば良いかを表すスコアのこと。

仕組み

  • Query
    入力。検索したいクエリ
  • Key
    Key の中から似た文章を検索
    正規化されたベクトルを出力
  • Value
    正規化されたベクトルを文章にする

Key Value Attension とも。

Transformer

概要

  • Seq2seq と同じく、Encoder-Decoder モデル
  • RNN を使わない(使うのは Attension のみ
  • 並列化しやすい

構造

Encoder と Decoder

Encoder 側
  • Input Embedding
  • Positional Encoding(1. 単語ベクトルに単語の位置を追加)
  • Encoder
    • Multi-Head Attention(2. 複数のヘッドで行う Dot Product Attention、Self-Attention)
    • Add & Norm
    • Feed Forward(3. 単語の位置ごとに独立処理する全結合)
    • Add & Norm
Decoder 側
  • Output Embedding
  • Positional Encoding
  • Decoder
    • Masked Multi-Head Attention(4. 未来の単語を見ないようマスク)
    • Add & Norm
    • Multi-Head Attention
    • Add & Norm
    • Feed Forward
    • Add & Norm
  • Linear
  • Softmax

Attention の種類

Source Target Attention(ソース・ターゲット注意機構)
 Query:Target
 Key:Source
 Value:Source

Self-Attention(自己注意機構)
 Query:Source
 Key:Source
 Value:Source

「バナナ」「が」「好き」
単語間の注意を求める。

Position-Wise Feed-Forward Networks(PFFN)

位置情報を保持したまま、順伝播させる。

Scaled dot product attention

全単語に関する Attention をまとめて計算する。

Attention(Q,K,V)=softmax \Biggl(\frac{QK^T}{\sqrt{d_k}} \Biggr)V

※ $Q,K,V$ が式のどこに位置するかに注意。
※ $\sqrt{d_k}$ で割る理由は、割らない場合にソフトマックス関数の勾配が小さくなってしまうため。

\begin{align}
Q・K^T&=
\begin{pmatrix}
q_1\\
q_2\\
q_3\\
\end{pmatrix}
\begin{pmatrix}
k_1 k_2 k_3
\end{pmatrix}
\\
&=
\begin{pmatrix}
q_1 k_1 & q_1 k_2 & q_1 k_3\\
q_2 k_1 & q_2 k_2 & q_2 k_3\\
q_3 k_1 & q_3 k_2 & q_3 k_3\\
\end{pmatrix}
\end{align}
\begin{align}
Attention(Q,K,V)
&=softmax(QK^T)・ V \\
&=
\begin{pmatrix}
0.1 & 0.2 & 0.7\\
0.4 & 0.3 & 0.3\\
0.8 & 0.1 & 0.1
\end{pmatrix}
\begin{pmatrix}
v_1\\
v_2\\
v_3\\
\end{pmatrix}
\\
&=
\begin{pmatrix}
0.1v_1 + 0.2v_2 + 0.7v_3\\
0.4v_1 + 0.3v_2 + 0.3v_3\\
0.8v_1 + 0.1v_2 + 0.1v_3\\
\end{pmatrix}
\end{align}

Multi-Head Attention

重みパラメータの異なる8個のヘッドを使用

Decoder

  • 6 層(Encoderと同じ)
  • 自己注意機構とソース・ターゲット注意機構の両方
  • 自己注意機構の key と value はエンコーダから、query はデコーダから。

Add & Norm

Add:Residual Connection
 入出力の差分を学習
 実装上は出力に入力をそのまま加算するだけ
 効果:学習・テストエラーの低減

Norm:Layer Normalization
 平均 0、分散 1 に正則化
 効果:学習の高速化

Positional Encoding

単語列の語順情報を追加
$\sin$ と $\cos$ を利用(0~1の範囲)

PE_{(pos,2i)}=\sin\Biggl(\frac{pos}{10000^{2i/512}}\Biggr)\\
PE_{(pos,2i+1)}=\cos\Biggl(\frac{pos}{10000^{2i/512}}\Biggr)\\

※ かっこの中は同じ。違いは $\sin$ と $\cos$ のみ。

実装演習

「自分の」は正しいが、それ以降は微妙な翻訳。

こちらは BLEU の評価。
いいのか悪いのか判断しづらい。