--- tags: transformer --- # Transformerの概要 transformerの大きなアーキテクチャとしては“エンコーダー”と“デコーダー”の構造があります。 下の図の左側がエンコーダーで、右側がデコーダーになります。 <img src="https://i.imgur.com/aday8de.png" width=400 /> それぞれの構成は以下のようになっています。 ## エンコーダ | | layer | describe | |---|-------| - | | 1 | Embedding | 各言葉を固有の特徴ベクトルに変換する。<br />ex)「私」⇒[0.1,0.2,0.4]、「猫」⇒[0.2,0.3,0.1] | | 2 | Positional Encoding | データの各要素が何番目にあるかを表す値を加算する | | 3 | Multi-Head Attention | 入力データの各要素の関連性を抽出する | | 4 | Add&Norm | Addでは残差接続 + ミニバッチ毎の標準化 | | 5 | Feed Forward | 全結合層 + 活性化関数(ReLU) + 全結合層 | | 6 | Add&Norm | 4と同じ | | 7 | | 3~6を6回繰り返す | 4でNormしていることで、勾配消失を軽減しつつレイヤー数を増やすことができるようになっています。 ## デコーダー | | layer | describe | |---|-------| - | | 1 | Embedding | | | 2 | Positional Encoding | | | 3 | Masked Multi-Head Attention (Self-Attention) | 入力データの一部をマスクして各要素同士の関連性を抽出 | | 4 | Add&Norm | | | 5 | Multi-Head Attention (SourceTarget-Attention) | エンコーダの出力と4の出力における各要素の関連性を抽出する | | 6 | Add&Norm | | | 7 | Feed Forward | | | 8 | Add&Norm | | | 9 | | 3~8を繰り返す | | 10 | Linear&Softmax | 全結合層で特徴ベクトルを各要素にして、softmaxで確率を計算 | ----------------------------------------- transformer自体は自然言語処理で発表されたモデルなので、画像で使う場合はいろいろ考慮しないといけないみたいです。モデルのポイントになっているのが"Self-Attention"のようです。特徴量同士で関連性を見つけ出しているみたいです。 Add&Normで標準化するときの平均ベクトルやデコーダーでのマスクする場合の手法などはいろいろありそうですね。 ### (参考) - [【原論】https://arxiv.org/abs/1706.03762](https://arxiv.org/abs/1706.03762) - [【論文解説】 https://qiita.com/omiita/items/07e69aef6c156d23c538](https://qiita.com/omiita/items/07e69aef6c156d23c538) - [【Pytorch】Transformerを実装する](https://qiita.com/gensal/items/e1c4a34dbfd0d7449099)