トランスの注意メカニズムは、各出力トークンを生成しながらモデルが入力シーケンスのさまざまな部分に選択的に焦点を合わせることにより、基本的にコード生成を改善します。これにより、コンテキストとコヒーレントのコード生成が増えます。注意メカニズムは、ソースコードの長距離依存関係、構造パターン、およびセマンティックニュアンスをキャプチャするのに役立ちます。これは、構文的に正しい、論理的に一貫したプログラムを生成するために重要です。その多面的な機能は、固定長のコンテキスト表現に依存していた従来のシーケンスからシーケンスモデルよりも大きな利点を提供します。
###変圧器における注意の基本概念
トランスでは、注意は入力値ベクトルの加重合計として一連の出力ベクトルを計算する手法です。重みは、クエリ(出力が生成される現在の位置を表す)とキーベクトルのセット(入力シーケンス内のすべての位置を表す)の間の互換性スコアに基づいて動的に計算されます。これにより、モデルは、シーケンス全体を均一に処理したり、固定サイズのベクトルに圧縮するのではなく、各トークンを生成するときに入力の関連部分に「出席」または集中できます。
スケーリングされたドット製品の注意のコアフォーミュラは次のとおりです。
$$
\ Text {Attention}(Q、K、V)= \ Text {SoftMax} \ left(\ frac {qk^t} {\ sqrt {d_k> \ right)v
$$
$$ q $$、$$ k $$、および$$ v $$は、それぞれクエリ、キー、値のマトリックスであり、$$ d_k $$はスケーリングに使用されるキーの次元です。 SoftMax関数は、クエリとキー間のDOT製品スコアを確率分布に変換し、値の重みに使用されます。
###コード内のコンテキストと依存関係をキャプチャします
プログラミングコードは、本質的に長距離依存関係で構成されています。関数の先頭に宣言された変数は、はるかに後に多くの場所で使用できます。 RNNやCNNSなどの従来のモデルは、そのような長距離のコンテキスト関係を維持するのに苦労していました。対照的に、変圧器の自己関節メカニズムは、シーケンスの距離に関係なく、すべてのトークンを他のすべてのトークンに直接関連付けることができます。
自己関節により、各トークン位置は、入力シーケンス内の他のすべての位置から情報を同時に収集できます。たとえば、クロージングブラケットを生成しながら、モデルは、いくつかの行になる可能性のある対応するオープニングブラケットに注意することができます。この完全な接続により、モデルは構文構造とセマンティック構造をより効果的にエンコードできます。これは、エラーのないコードを生成するために不可欠です。
###多様なコンテキストのためのマルチヘッドの注意
トランスは、入力埋め込みのさまざまな線形投影で複数の並列注意操作(ヘッド)が実行されるマルチヘッドの注意を採用しています。各ヘッドは、変数名、制御フロー構成、または関数境界など、入力のさまざまな側面に焦点を合わせることを学びます。このマルチヘッドセットアップはいくつかの利点を提供します:
- モデルが異なる表現サブスペースの情報に共同で参加できるようにします。
- 入力シーケンス上の複数の視点を組み合わせて、モデルが学習できることの範囲を広げます。
- 単一の注意表現に依存しないことにより、堅牢性を向上させます。
これらの複数のヘッドの出力は連結され、直線的に変換されて、出力トークンの生成に使用される最終表現を形成します。
###エンコーダーデコーダーソースターゲットアライメントの注意
コード生成では、トランスは通常、エンコーダデコーダーアーキテクチャを使用します。エンコーダーは、入力説明(自然言語問題の仕様など)をコンテキスト表現に処理し、デコーダーは対応するコードシーケンスを生成します。デコーダーは、エンコーダデコーダーの注意(交差)を使用して、各デコードステップでエンコードされた入力の関連部分に選択的に焦点を当てます。入力と出力の間のこのアライメントは、モデルが入力プロンプトで表現された意図に密接に一致する関連性と正確なコードスニペットを生成するのに役立ちます。
###自己回帰生成のための因果関係とマスクの注意
トークンごとにコードトークンを生成する場合、デコーダーは因果関係(マスクされた)自己attentionを使用して、ポジション$$ i $$の予測が前のトークン$$にのみ依存するようにします