Transformerのメモ

Transformer

  •  Transformerの特徴のひとつは、学習を並列実行させることができることである。
    (但し、推論時のdecodeは前時刻の結果が必要となるため、逐次処理となる。)
  •  RNNでは、時系列毎に結果を渡していく必要があるためシーケンシャルに処理をする必要がある。
  •  Transformerでは、並列学習させるため、以下の機構がある。
    •  Encoderへの入力は、データを配列で一気に渡す。
      (実際には、ミニバッチ学習させるため、「バッチ数 x 単語数 x 単語ベクトル次元数」となる。)
    •  単語の順番で文章ベクトルを計算するのではなく、Attentionで単語間の関連を見て文章ベクトル化する。
    •  但し、単語の順番を考慮しないと、文章の意味が変わる場合があるので、位置情報を単語ベクトルに付与して、文章ベクトルに入れていく。
    •  Multi-Head Attentionで、複数のAttentionを使い複数の関連を計算する。
    •  Multi-Head Attentionの層を複数重ねるためFeedForward(全結合)を入れる。
    •  Decorderでも、学習時にはデータを一気に渡すため、先の結果(予測結果の次の単語)を見ないようにマスクして、Attentionで関連を計算する。(Masked Multi-Head Attention)
    •  Multi-Head Attentionは、上記の「バッチ数 x 単語数 x 単語ベクトル次元数」のうちの「単語ベクトル次元数」をヘッド数で割って、各ヘッド毎に計算して、concatする。

OpenNMT-pyのコードを見て解説

参考情報