Transformer
Transformer
機械翻訳の決定版。機械学習。別名: AttentionIsAllYouNeed
- arxiv:1706.03762 Attention Is All You Needという論文で提唱された。
- The Annotated Transformer
- 原論文から解き明かす生成AIの3章にも詳しい
- Attention is All You Needのメモ - なーんだ、ただの水たまりじゃないか 大した事書いてないが。
ConvS2Sの進化版と考えられる。Convの代わりにセルフアテンションを使うという発明。
PositionEmbeddings
アテンション
Transformerのブロック構成
セルフアテンションとLayerNormalizationとFFNの組み合わせになっている。
マスクと3つのアテンション
アテンションの使われ方が3つあり、decoderのセルフアテンションだけmaskが必要、みたいな話が論文と本に書いてあるので、 この3つのアテンションの使われ方を見ておく。
エンコーダーのセルフアテンション

クロスアテンション

これは通常のアテンションになる。ConvS2Sなどと同じもの。 dを使うが、クエリに使うdは一つだけ(図ではiとしているが、実際はt-1期のもの)なのに注意。
デコーダーのセルフアテンション
これだけ未来のdが登場しうるのでマスクが必要。

i番目のクエリに対してキー側にi+1番目以降のdが登場しているのに注目。eは先があってもいいがdはまだ知らない答えに相当するからまずい。
Decoderのクロスアテンション部分
Decoderは真ん中にクロスアテンションのMultiHead attentionが入る。
The Annotated TransformerのDecoderLayerを見ると、
x = self.sublayer[1](x, lambda x: self.src_attn(x, m, m, src_mask))
となっていて、src_attnはMultiHeadedAttentionになっていて、がx, m, mにそれぞれ掛けられる模様。 mはエンコーダーの最終出力(memory)。
クロスアテンションをMultiHeadにする意義があるのか?(答. むしろクロスヘッドこそすべきらしい)
クロスアテンションは従来のアテンションとほぼ同じなのでマルチヘッドにする必要は無いのでは?とChatGPTに聞いたら以下の論文を紹介してくれた。
arxiv: 1905.10650 Are Sixteen Heads Really Better than One?
自分の直感とは逆に、むしろクロスアテンションの方がマルチヘッド化は効くらしい。
じゃあRNNもそうなのでは?とChatGPTに聞いたらRNNは文脈ベクトルを持つ分この効果は弱くなるのではないか、との事。 真偽は試してみないとなんともいえないが、ありそうな話ではある。