深層学習の基礎
G検定のTransformerと注意機構
G検定の出題範囲には、深層学習の基礎としてTransformerがあります。このページは、原論文『Attention Is All You Need』の記述に沿って、注意機構の計算を3つのキーの小さな例で最後まで解きます。Transformerは、再帰と畳み込みを使わず、注意機構だけで系列を処理する構造です。
計算例の数値はすべて架空です。論文の実際の値は、モデルの層の数など、記述がある箇所だけを使っています。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- Transformerは、再帰と畳み込みを使わず、注意機構だけに基づく
- 注意は、クエリとキーの内積を√d_kで割り、ソフトマックスで値への重みを作り、値の重み付き和を出力する
- 語順の情報は、位置エンコーディングを入力の埋め込みに足して与える
- デコーダでは、後ろの位置に注意が向かないよう、ソフトマックスの入力を−∞にするマスクを使う
- RNNと比べて、逐次の操作の数と位置間の経路の長さが短い
Transformerが解いた問題
原論文の抄録は、それまでの主流の系列変換モデルを、再帰型または畳み込み型のネットワークによるエンコーダ・デコーダ構成と説明します。最良のモデルは、注意機構でエンコーダとデコーダを結んでいました。論文は、再帰と畳み込みを完全に使わず、注意機構だけに基づく構造としてTransformerを提案しました。
再帰型は、位置tの隠れ状態を1つ前の隠れ状態から順に作るため、1つの学習例の内部で並列化できません。論文は、Transformerは並列化しやすく学習時間が大幅に短いとして、WMT 2014の英独翻訳で28.4 BLEUを得たと述べています。英仏翻訳では、8GPUで3.5日の学習で、単一モデルとして当時最高の41.8 BLEUを得たとしています。
注意機構の計算
論文は、注意関数を「クエリと、キーと値の組の集合を、出力に写す関数」と説明します。出力は値の重み付き和で、各値の重みは、クエリと対応するキーの適合度で決まります。論文が使うスケール付き内積注意は、次の式です。
Attention(Q, K, V) = softmax( QKᵀ ÷ √d_k ) V
- クエリとすべてのキーの内積をとる
- 各内積を√d_kで割る
- ソフトマックスにかけて、合計が1の重みにする
- 重みで値を足し合わせる
自己注意は、クエリ・キー・値がすべて同じ場所(前の層の出力)から来る場合です。エンコーダ・デコーダ注意では、クエリがデコーダの前の層から、キーと値がエンコーダの出力から来ます。複数のヘッドで並列に行うのがマルチヘッド注意で、論文はh=8、d_k=d_v=64を使います。
小さな数値で計算する
d_k=2、クエリを(1, 0)として、3つのキーと値を次のように置きます。
| キー | キーの値 | 対応する値 | 内積 | √2で割る | 重み |
|---|---|---|---|---|---|
| キー1 | (1, 0) | (2, 0) | 1 | 0.7071 | 0.4011 |
| キー2 | (0, 1) | (0, 4) | 0 | 0 | 0.1978 |
| キー3 | (1, 1) | (1, 1) | 1 | 0.7071 | 0.4011 |
- 内積:(1,0)・(1,0)=1、(1,0)・(0,1)=0、(1,0)・(1,1)=1
- √2で割る:0.7071、0、0.7071
- ソフトマックス:e^0.7071≒2.028、e^0=1、合計は5.056。重みは 0.4011、0.1978、0.4011
- 出力:0.4011×(2,0)+0.1978×(0,4)+0.4011×(1,1)≒(1.203, 1.192)
クエリと向きが近いキー1とキー3に、同じ大きい重み0.4011がつきます。√2で割らずにソフトマックスにかけると、重みは 0.4223、0.1554、0.4223 になり、差が広がります。次元d_kが大きいほど内積も大きくなるため、論文はこの広がりを抑えるために√d_kで割っています。
マスクと位置エンコーディング
デコーダは出力を1要素ずつ作るため、未来の位置を見てはいけません。論文は、スケール付き内積注意の中で、不正な接続に当たるソフトマックスの入力を−∞にして、後ろの位置への注意をなくします。上の例で、3番目のキーを隠すと、残る重みは 0.6698 と 0.3302 になり、合計は1のままです。
再帰も畳み込みも持たないTransformerは、そのままでは語順を知りません。論文は、入力の埋め込みに、同じ次元d_modelの位置エンコーディングを足します。式は、PE(pos, 2i)=sin(pos÷10000^(2i÷d_model))、PE(pos, 2i+1)=cos(同じ角度)です。d_model=4で位置1なら、先頭の2成分は sin(1)=0.8415、cos(1)=0.5403、次の2成分は sin(0.01)≒0.0100、cos(0.01)≒0.99995 になります。
エンコーダとデコーダの構成
- エンコーダ:N=6の同じ層を重ねる。各層は、多頭自己注意と、位置ごとの全結合層の2つの副層を持つ
- デコーダ:N=6の同じ層。エンコーダの出力に対する多頭注意が3つ目の副層として加わる。自己注意にはマスクがかかる
- 各副層に残差接続と層正規化を使う。出力は LayerNorm(x+Sublayer(x))
- すべての副層と埋め込み層の出力次元はd_model=512
層正規化は、バッチ正規化と違ってミニバッチの大きさに依存せず、1つの学習例の層内のニューロンから平均と分散を求めます。残差接続で層を深く重ねる点は、勾配消失問題のページとあわせて読むと整理できます。
RNNとの違い
論文の表1は、系列長n、表現次元dとして、層の種類ごとの比較を示します。
| 層の種類 | 層ごとの計算量 | 逐次操作の数 | 位置間の最大経路長 |
|---|---|---|---|
| 自己注意 | O(n²・d) | O(1) | O(1) |
| 再帰(RNN) | O(n・d²) | O(n) | O(n) |
逐次操作の数と経路の長さは、自己注意がO(1)、再帰がO(n)です。n=100、d=512で層ごとの計算量を比べると、自己注意は100²×512=5,120,000、再帰は100×512²=26,214,400で、nがdより小さいので自己注意の方が小さい値です。反対に、nがdより大きくなると、n²の項が効いて自己注意の方が大きくなります。
問題文から読み取る
このページの内容から導いた読み方です。出題を予想するものではありません。
- 「再帰も畳み込みも使わず注意機構のみ」とあれば、Transformer
- 「語順を表すために入力に足す」とあれば、位置エンコーディング
- 「未来の単語を見ないようにする」とあれば、デコーダ側のマスク
- 「内積を√d_kで割る」理由は、内積が大きくなりすぎてソフトマックスの勾配が極めて小さくなるのを避けるため
- 「系列を先頭から順に処理するため並列化しにくい」のは、再帰型の特徴
G検定の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
Transformerは、G検定の出題範囲にありますか?
あります。JDLAの出題範囲には、深層学習の基礎としてCNN、RNNとともにTransformerが挙げられています。原論文は、2017年の『Attention Is All You Need』です。
なぜ内積を√d_kで割るのですか?
原論文は、キーの次元d_kが大きいと内積が大きくなり、ソフトマックスが勾配の極めて小さい領域に入ると推測し、それを避けるために√d_kで割ると述べています。このページの例ではd_k=2なので、√2で割っています。
位置エンコーディングは、なぜ必要ですか?
Transformerは再帰も畳み込みも持たないため、そのままでは語順の情報がありません。原論文は、系列内の位置の情報を入れるために、入力の埋め込みに位置エンコーディングを足すと説明しています。
マルチヘッド注意とは何ですか?
注意を1回だけ行うのでなく、複数の頭(ヘッド)で並列に行い、結果をつなげて再び射影する方法です。原論文は、単一のヘッドだと平均化によって、異なる位置の異なる表現部分空間の情報に同時に注目しにくいと述べ、h=8のヘッドを使っています。
