みんなのAI
機械学習AI論文
読み込み中…

学ぶ

🏅マイ実績

Ch.01

Transformer 1:セルフアテンションと並列化

Transformerモデルの心臓ともいえる セルフアテンション(Self-Attention) は、文章中の単語同士がどう関係しているかを一度に捉える革新的な技術です。従来のモデルが単語を順番に読み進めていく間に前半の情報を失いがちだったのに対し、セルフアテンションは文章全体を俯瞰するように見渡し、すべての単語が互いに与える影響を同時に計算します。このチャプターでは、初心者にもわかるように Query・Key・Value という要点を通して、セルフアテンションが重要な情報をどう選び取るのか、そしてマルチヘッドアテンションが実際のAIサービスでどう活きるのかをやさしく解説します。

数式をわかりやすく理解する

Q=XWQQ=XW_QQ=XWQ​, K=XWKK=XW_KK=XWK​, V=XWVV=XW_VV=XWV​ において、XXX は入力の埋め込み、WQ/WK/WVW_Q/W_K/W_VWQ​/WK​/WV​ は学習される変換行列です。このステップでは、同じ文章を「質問っぽい表現」「マッチングっぽい表現」「内容っぽい表現」に分けます。S=QKTS=QK^TS=QKT はトークン同士の関連度スコア行列です。スコアが大きいほど、2つのトークンの関係は強くなります。ただし次元が大きいと値が過剰に大きくなり得るため、dk\sqrt{d_k}dk​​で割って安定化します。A=softmax(S/dk)A=\mathrm{softmax}(S/\sqrt{d_k})A=softmax(S/dk​​) は各行の合計が1になる確率重みの行列です。つまり、1つのトークンが他のトークンをどれくらい参考にするかを割合として表します。O=AVO=AVO=AV は重み AAA によって Value を混ぜて作る最終的なコンテキスト表現です。ポイントは、単純平均ではなく「重要度に基づく重み付き平均」であることです。
セルフ・アテンションは、各トークンが全トークンを参照して文脈を再構成する操作です。

概念構造: Q/K/V → スコア → 正規化 → 重み付き和

入力トークンIlovedeeplearningトークンの関連(self-attention)Transformer Encoder BlockMulti-Head AttentionAdd & NormFeed Forward文脈ベクトルの出力文脈ベクトルはトークンが見ている情報の要約
弱い参照中程度の参照強い参照

Transformer 1: セルフアテンションを一目で見る

概念説明:文脈を掴む目
セルフアテンションは、文中の各単語(トークン)が他のすべての単語を同時に見て、「今の単語を理解するために、どの単語をどれくらい参考にするか」を決める重み付けの仕組みです。例えば「『ば』を乗って川を渡り、ばが痛くて果物のばを食べた」というように、『ば』が複数の意味(船/身体の部位/果物)を持つ場合、セルフアテンションは周りの「乗って」「痛くて」「食べた」などの語を同時に見比べて文脈を判断します。
直観的理解:質問(Q)、手がかり(K)、答え(V)
図書館で本を探す流れにたとえてみましょう。
1. Query(Q):あなたが検索窓に入れる質問(探したいこと)です。(「ここで“ば”は身体の部位?」など)
2. Key(K):本の背表紙に書かれたタイトルやキーワードです。(「私は“痛くて”という語で、病気に関わるキーワードを持つ」など)
3. Value(V):本の中身、つまり実際の情報です。(「痛み・腹痛・病院など、本当の意味」など)
セルフアテンションは Query と Key の一致度(相性)を評価してスコアを作り、そのスコアに応じて Value を混ぜ合わせることで、最終的な単語の意味を決めます。
数式的説明:スケールド・ドット積アテンション
入力を行列 XXX とすると、それを3つの学習可能な変換行列で掛けて Q=XWQQ=XW_QQ=XWQ​, K=XWKK=XW_KK=XWK​, V=XWVV=XW_VV=XWV​ を作ります。アテンションのスコア(相性)は Query と Key を掛けた QKTQK^TQKT で計算します。次元が大きいと値が大きくなりすぎるので、Keyベクトルの次元数である dk\sqrt{d_k}dk​​ で割ってスケーリングします。その後、softmax を通すと合計が1になる確率重み AAA が得られます。数式は A=softmax(QKT/dk)A=\mathrm{softmax}(QK^T/\sqrt{d_k})A=softmax(QKT/dk​​) です。最後に、この重み AAA に実際の情報である VVV を掛けて最終出力 AVAVAV を得ます。
実際のML例:賢い文の理解
スパムメールの分類では、「当選」「無料」「クリック」などの語が離れていても、セルフアテンションがそれらの強い関係を一度に見つけてスパム判定に役立ちます。医療の診断システムでも、「頭痛がひどい」「しかし」「発熱なし」のように肯定と否定が混ざった長い文章で、重要な症状とそうでないものを正しく結びつけ、誤診の可能性を大きく下げます。

なぜ重要か

概念説明:長距離依存の解決
セルフアテンションがディープラーニングの流れを変えた理由は、 長距離依存(Long-range Dependency) をうまく扱えるからです。文の先頭の主語と末尾の動詞が対応しているような場合、中にどれだけ修飾語が長く挟まっていても、セルフアテンションは2つの語を直接つなげて意味を落としません。
直観的理解:リレー走(RNN) vs グループチャット
従来のRNNは、列に並んで前の人の言葉を後ろに渡す リレー(リレー走) のようでした。文章が長いほど、前の情報が弱まってしまいがちです。対してセルフアテンションは、参加者全員が同時にメッセージを見る グループチャット のようなものです。100語目を読んでいるときでも、1語目が残した情報をすぐ参照でき、情報の欠落が起きにくくなります。
数式的説明:情報伝達経路を短く
RNNでは、1番目のトークンから nnn 番目のトークンまでの情報伝達経路の長さが O(n)O(n)O(n) に比例します。つまり距離が長いほど勾配が届きにくくなります。ところがセルフアテンションでは、すべての単語が行列積1回で結ばれるため、経路長はいつでも O(1)O (1)O(1) です。経路が短いので、学習中の勾配消失が起きにくく、安定して学習できます。
実際のML例:長文の要約
数十ページの法廷文書の要約や、カスタマーと担当者が30分にわたって交わした長いチャットログの分析では、この強みが特に効いてきます。会話の冒頭に出てくる「本当の不満」と、会話の終盤の「結論」を一度に結びつけて、素早く正確な要約を作れます。

どう使うか

概念説明:トランスフォーマーの構造
実務では、テキストをトークンに分割したあと、このセルフアテンションを複数つないだ アテンションブロック を何層にも積み重ねて巨大モデル(例:GPT、BERT)を作ります。さらに単語の意味だけでなく位置情報(Positional Encoding)も一緒に入れて、文章の順序を認識させます。
直観的理解:マルチヘッドアテンション(Multi-Head Attention)
1つの視点だけで文章を見ると偏りが出てしまいます。そこでセルフアテンションを複数(ヘッド)に分けて同時に動かします。これが マルチヘッドアテンション です。審査員が複数いるオーディション番組に似ています。1人目は「文法」、2人目は「感情の流れ」、3人目は「固有名詞」を見ます。各視点で採点して最後に統合すれば、より立体的で豊かな理解が可能になります。
数式的説明:複数ヘッドの結合
各ヘッド hhh は、学んだスケールド・ドット積を独立に計算します:headh=softmax(QhKhT/dk)Vh\mathrm{head}_h=\mathrm{softmax}(Q_hK_h^T/\sqrt{d_k})V_hheadh​=softmax(Qh​KhT​/dk​​)Vh​。もしヘッドが8個なら、8個の出力が得られます。これらを横に連結(Concatenation)したあと、最終の重み行列 WOW_OWO​ を掛けて1つの出力に混ぜ合わせます。数式では MultiHead(X)=Concat(head1,…,headH)WO\mathrm{MultiHead}(X)=\mathrm{Concat}(\mathrm{head}_1,\dots,\mathrm{head}_H)W_OMultiHead(X)=Concat(head1​,…,headH​)WO​ となります。
実際のML例:多面的なテキスト分析
Google翻訳のような翻訳モデルでは、あるヘッドが「主語と動詞の数の一致」を計算するとき、別のヘッドが「敬語とくだけた言い方の文脈」を計算します。感情分析でも、肯定的な形容詞と否定的な副詞(「決して〜しない」)の関係を複数ヘッドが立体的に捉えることで、人に近い繊細な分析ができるようになります。

要約

セルフアテンションは、各トークンが文の全体を同時に参照して文脈を理解する仕組みで、Transformerの性能を支える重要な基盤です。Query・Key・Valueに分けて関連度を計算し、softmaxで重要度を確率のように正規化して必要な情報を重み付きで合成します。このため、離れた単語同士の関係も一度に反映でき、長い文脈の問題に特に強くなります。さらにマルチヘッドは、単一視点の限界を減らし、複数の観点を組み合わせることで予測の安定性を高めます。結局、セルフアテンションを理解するとは「情報を選択的に集める方法」を理解することであり、翻訳・要約・分類・検索・医療テキスト分析など、実際の機械学習全般につながっていきます。

問題を解くためのヒント

まとめ — セルフアテンションは、文中のすべての単語が互いを同時に参照して文脈を理解する仕組みです。Query(Q)、Key(K)、Value(V)を使って単語同士の関連度 A=softmax(QKT/dk)A=\mathrm{softmax}(QK^T/\sqrt{d_k})A=softmax(QKT/dk​​) を計算し、O(1)O (1)O(1) に近い短い経路で長距離依存を解決します。実務では、複数の観点でテキストを分析するために、複数のアテンションを並列に使うマルチヘッドアテンション(Multi-Head Attention)が基本になります。
  • タイプセルフアテンションの3要素
  • 解き方・例(キーワード → 正答)Query、Key、Value の行列。→ 概念問題なら Q, K, V
  • タイプスケールド・ドット積
  • 解き方・例(キーワード → 正答)アテンションスコアを dk\sqrt{d_k}dk​​ で割ってスケーリング。→ 値の暴走を防ぐ
  • タイプ経路長(RNN vs アテンション)
  • 解き方・例(キーワード → 正答)RNNは O(n)O(n)O(n)、セルフアテンションは O(1)O(1)O(1). → 長距離依存問題の解決
  • タイプマルチヘッドアテンション
  • 解き方・例(キーワード → 正答)複数ヘッドを並列に使って、文脈の特徴(文法・意味など)を学ぶ。→ 豊かな表現力
  • タイプアテンション行列 AAAの意味
  • 解き方・例(キーワード → 正答)softmax を通して合計が1になる確率重み。→ 特定の単語にどれだけ注目するか
  • タイプQ, K, V の作り方
  • 解き方・例(キーワード → 正答)入力 XXX に重み WQ,WK,WVW_Q, W_K, W_VWQ​,WK​,WV​ を掛けて作る。
タイプ解き方・例(キーワード → 正答)
セルフアテンションの3要素Query、Key、Value の行列。→ 概念問題なら Q, K, V
スケールド・ドット積アテンションスコアを dk\sqrt{d_k}dk​​ で割ってスケーリング。→ 値の暴走を防ぐ
経路長(RNN vs アテンション)RNNは O(n)O(n)O(n)、セルフアテンションは O(1)O(1)O(1). → 長距離依存問題の解決
マルチヘッドアテンション複数ヘッドを並列に使って、文脈の特徴(文法・意味など)を学ぶ。→ 豊かな表現力
アテンション行列 AAAの意味softmax を通して合計が1になる確率重み。→ 特定の単語にどれだけ注目するか
Q, K, V の作り方入力 XXX に重み WQ,WK,WVW_Q, W_K, W_VWQ​,WK​,WV​ を掛けて作る。
例(概念理解)
"セルフアテンションで、Query(Q)とKey(K)のドット積(QKTQK^TQKT)は何を意味しますか?
① 単語の長さ
② 単語同士の関連度(類似度)
③ 文の位置情報"
QueryとKeyの内積は、2つの単語が文脈的にどれくらい関係しているかを表すスコアです。→ 正答 2

例(構造)
"マルチヘッドアテンションを使う一番大きな理由は?
① 計算速度を遅くするため
② 1つの視点ではなく、文法や意味などの多様な文脈を同時に捉えるため
③ メモリを節約するため"
複数のヘッドがそれぞれ異なる特徴を学習し、モデルの表現力を高めるためです。→ 正答 2

例(計算)
アテンション計算で QKTQK^TQKT を計算したあと、次元の大きさ dk=64d_k=64dk​=64 のとき、何で割ってスケーリングしますか?
dk\sqrt{d_k}dk​​ で割るので、64=8\sqrt{64}=864​=8 で割ります。→ 正答 8