Transformer

・機械翻訳の歩み:Encoder-Decoder Model ⇒ Transformer (Encoder-Decoder x Attention) ⇒ BERT

・TransformerーAttention is all you need:RNNを使わないで高い翻訳精度を達成した。Transformer主要モジュール

画像1

・Attention:二種類ある

画像2

AttentionとはQuery Q とKey K とValue V の3つのベクトルで計算される。各単語がそれぞれのQueryとKeyとValueの重みを持っている。

画像6

・Position Encoding:RNNを用いないので単語列の語順情報を追加する必要がある。

画像3

・Multi-Head attention:

画像4

・Scaled Dot Product Attention:

画像5

・Scale:Q と K の行列積においても平均 0 分散 1 となり、緩やかな勾配を持つソフトマックスが得られることが期待できるため、これらの行列積はKの次元数の平方根を割るだけ。

 matmul_qk = tf.matmul(q, k, transpose_b=True)  # (..., seq_len_q, seq_len_k)

 # matmul_qkをスケール
 dk = tf.cast(tf.shape(k)[-1], tf.float32)
 scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)

・Mask(opt.):シーケンスのバッチ中のパディング(ゼロ詰め)された全てのトークンをマスクする。これにより、モデルがパディングを確実に入力として扱わないようにする。マスクは、パディング値0の存在を明記し、0の場所で1を出力し、それ以外の場所では0を出力する。

画像7

・Add & Norm:Add (Residual Connection) - Resnetの残差足し算と同じ 。Norm (Layer Normalization) - 各層においてバイアスを除く活性化関数への入力を平均0、分散1に正則化。

考察

・Transformerの基本モジュールを分解し、計算を追うことで理解が深まった。tensorflowの公式サイトにはもっと詳細な実装が載っていて非常にわかりやすい。TransformerはRNNのように時系列データ伝達をそのまま扱えないため、位置エンコーディングという手順が必要であった。Transformer自体は時系列データに特化したものではないので、CNNや画像処理にも応用できる。非常に強力なアーキテクチャーである。


この記事が気に入ったらサポートをしてみませんか?