Transformerは、エンコーダ(Encoder)とデコーダ(Decoder)の2つの主要な部分から構成されます。
エンコーダ(Encoder)
エンコーダは、入力シーケンスを固定長のベクトルに変換します。エンコーダは以下のような複数の層から成ります:
- 入力埋め込み(Input Embedding): 入力シーケンスの各要素を高次元の埋め込みベクトルに変換します。
- 位置エンコーディング(Positional Encoding): シーケンスの各位置に関する情報を埋め込みベクトルに追加します。
- マルチヘッドセルフアテンション(Multi-Head Self-Attention): 各単語の埋め込みベクトルに対し、他の全ての単語に対するアテンションを計算し、重要な情報を抽出します。
- フィードフォワードネットワーク(Feed-Forward Neural Network): アテンションの結果に対して個別の全結合ネットワークを適用します。
エンコーダは通常、これらの層を数回(例えば6回)繰り返します。
デコーダ(Decoder)
デコーダは、エンコーダが生成した中間表現から出力シーケンスを生成します。デコーダはエンコーダと類似した構造を持ちますが、いくつかの追加要素があります:
- 入力埋め込み(Input Embedding): デコーダの入力シーケンスを埋め込みベクトルに変換します。
- 位置エンコーディング(Positional Encoding): シーケンスの各位置に関する情報を追加します。
- マルチヘッドセルフアテンション(Masked Multi-Head Self-Attention): 出力シーケンスの各単語に対し、他の全ての単語に対するアテンションを計算しますが、将来の単語へのアテンションは遮断します(マスキング)。
- エンコーダ-デコーダアテンション(Encoder-Decoder Attention): エンコーダの出力に対するアテンションを計算し、エンコーダからの情報を取り込みます。
- フィードフォワードネットワーク(Feed-Forward Neural Network): アテンションの結果に対して全結合ネットワークを適用します。
アテンション機構(Attention Mechanism)
アテンション機構は、Transformerの中心的な要素です。アテンションは、入力シーケンスの異なる部分に対して異なる重みを割り当て、重要な情報を強調します。
スケールドドットプロダクトアテンション(Scaled Dot-Product Attention)
これは最も基本的なアテンションの形式で、以下の手順で計算されます:
- クエリ(Query)、キー(Key)、**バリュー(Value)**行列を入力から生成します。
- クエリとキーの転置行列のドット積を計算し、スケーリングします。
- ソフトマックス関数を適用して正規化します。
- 正規化された重みをバリュー行列に掛け算して出力を得ます。