読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】TransformerのSelf-Attention、Q・K・Vとマルチヘッドと位置エンコーディングをまとめて整理したい【G検定】

17レスカテゴリ:AI・機械学習
1: 名無しさん

Transformerの説明で、Self-Attention・クエリ・キー・バリュー・Multi-Head Attention・位置エンコーディングが全部出てくる
1つずつ何をしてるのか整理したい

2: 名無しさん

前提のおさらい。Seq2SeqのAttentionは、訳文の1語を作るたびに、入力の文の各語にどれだけ注目するかの重みをつけて混ぜる。ただしエンコーダもデコーダもRNNやから、1語ずつ順番にしか計算できん

3: 名無しさん

>>1
Transformerは、ヴァスワニらの2017年の論文「Attention Is All You Need」で出たモデル。RNNを使わず、Attentionと全結合層だけで系列を扱う
全部の語を一度に計算できるから、GPUで並列に学習しやすい

4: 名無しさん

>>3
Self-Attentionは、同じ文の中の語どうしで注目しあう
「彼はその本を買った。それは高かった」の「それ」が「本」を指す、みたいな文の中の関係をとらえる
Source-Target Attentionが入力の文と出力の文のあいだなのに対して、Self-Attentionは1つの文の中

5: 名無しさん

>>4
クエリ・キー・バリューって何なん?

6: 名無しさん

>>5
各語のベクトルから、3種類のベクトルを作る
クエリ :自分は何を探してるか
キー :自分はどんな情報を持ってるか(探される側の見出し)
バリュー :実際に渡す中身
クエリとキーの内積で相性を測って、その重みでバリューを混ぜる

7: 名無しさん

>>6
式で書くと

はキーの次元。2語だけで、クエリと各キーの内積が4と0、 なら
で割って 2 と 0、ソフトマックスで約 0.88 と 0.12。1語目のバリューを88%、2語目を12%混ぜる

8: 名無しさん

>>7
なんで で割るん?

9: 名無しさん

>>8
次元が大きいと、内積の値が大きくなりやすい。値が大きいとソフトマックスがほぼ0か1に偏って、勾配がほとんど流れんくなる
で割って、値の大きさを次元によらずそろえてる

10: 名無しさん

Multi-Head Attentionは、Attentionを何組も並べて同時に計算するもの
論文の設定では、512次元を8つの頭(ヘッド)に分けて、1つあたり 次元で計算し、最後につなげる
ある頭は文法の関係、別の頭は指している先の関係、みたいに、違う種類の関係を別々にとらえられる

11: 名無しさん

>>10
8つに分けたら、1つあたりの表現力が落ちるんちゃうの?

12: 名無しさん

>>11
1つの頭は64次元に減るけど、全体の計算量は512次元で1つやるのとほぼ同じ。1つの大きい重みで全部の関係を平均してしまうより、分けたほうが違う関係を同時に拾える、というのが論文の考え方

13: 名無しさん

>>4
Self-Attentionは全部の語を一度に見るやろ。それやと語の順番が分からんのちゃう?

14: 名無しさん

>>13
分からん。「犬が猫を追う」と「猫が犬を追う」が、順番の情報なしでは同じ語の集まりになる
そこで、各語のベクトルに位置を表すベクトルを足す。これが位置エンコーディング。論文では sin と cos を使った
位置1の最初の2つの成分は と 。次元が後ろになるほどゆっくり変わる波を使う

15: 名無しさん

Transformer全体は、エンコーダとデコーダを何層も重ねた形
各層の中は Attention と全結合層で、それぞれにスキップ結合とレイヤー正規化がつく
デコーダには、まだ作ってない先の語を見ないように隠す(マスクする)Self-Attentionと、エンコーダを見るSource-Target Attentionがある

16: 名無しさん

>>15
弱点もある。全部の語のペアで相性を計算するから、文の長さが2倍になると計算量はおよそ4倍。長い文書ほど重くなる

17: 名無しさん

>>16
それでも並列に学習できる強みが大きくて、BERTや大規模言語モデル、画像のVision Transformerまで、今の多くのモデルの土台になってるのはこの形

管理人のひとこと