Transformer
最高に分かりやすいTransformer記事。
https://scrapbox.io/files/66b6a40304ba12001cb35e64.png
一般的な NLP アプリケーションの場合と同様に、埋め込みアルゴリズムを使用して各入力単語をベクトルに変換することから始めます 一番下のエンコーダではこれは単語の埋め込みですが、他のエンコーダではすぐ下のエンコーダの出力になります。このリストのサイズは設定できるハイパーパラメータです。基本的には、トレーニング データセット内の最長の文の長さになります これらの新しいベクトルの次元は、埋め込みベクトルよりも小さいことに注意してください。これらの次元は 64 ですが、埋め込みベクトルとエンコーダーの入力/出力ベクトルの次元は 512 です
各行毎に考えると分かりやすい。それぞれの行が単語に対応しているのでそれぞれの単語に重みかけてQとかKとかVとかに変換している。その次元が64
https://scrapbox.io/files/66b6af7e1f4178001de8e229.png
マルチヘッドアテンション
各ヘッドに対して個別の Q/K/V 重み行列を維持し、異なる Q/K/V 行列を生成します
で、その出力Zを全部くっつけてひとつのZに変換する
トークンが30000種類あって各々Embeddingが512なら30000×512?
he saw the dogという入力があり、これがベクトルに変換される
最初のAttentionブロックに入りベクトルの数値自体は変わるが順番は変わらない
そのようにして順番は保たれたままベクトル表現が変換されていく
まとめると、
Input Vecは{B, L, D}
B:バッチサイズ
L:トークン数(入力文字長によって変化)
D:次元数
Llamaだったら埋め込み次元である4096
埋め込んだベクトルの大きさ
まずNormを通る
次にQ,K,V
可視化するとToken同士のかかわりを示すもの
https://scrapbox.io/files/66fff4224c12fa001d7e4a9a.png
並列にあるQ,K,Vの数がAttentionのHeadの数
でQ,Kの内積とVをあわせてアウトプット得る。これをコンカットして繋げる