@mizumotokのブログ

テクノロジー、投資、書評、映画、筋トレなどについて

ChatGPTの原点!「Attention Is All You Need」徹底解説

今や多くの人が使っているChatGPTですが、その元になった技術をご存じですか?2017年にGoogleの研究者たちはAIの未来を変える画期的な論文を発表しました。それが『Attention Is All You Need』です。従来のAIは、長い文章をうまく処理できず、計算速度も遅いという問題を抱えていました。しかし、この論文で提案されたTransformerの登場によって、AIは飛躍的に進化し、ChatGPTやGoogle翻訳のような技術の基盤となりました。本記事では、この画期的な技術を徹底解説します!

なぜAttentionが重要か?

自然言語処理(NLP)には、英語から日本語への機械翻訳や、ニュース記事を短くまとめる文章要約、質問に対して答えを返すQA(質問応答)など、多彩なシーケンス変換タスクがあります。

「シーケンス変換」とは、「ある文章を別の形式の文章に変換すること」です。例えば、英語の文章を日本語に翻訳したり、長い文章を短く要約したりすることが含まれます。

Transformer登場前はRNN/LSTMやCNNが主流でしたが、それらには次のような問題がありました。

  • RNN/LSTM
    • 単語を順番に処理するため、文が長くなると計算が遅く、長距離の依存関係を捉えにくい
  • CNN
    • 画像認識で実績があるが、文章に適用する場合は遠い単語間の関連をカバーするため多層化が必要で、計算コストが嵩む

例えば、『私は昨日、東京でラーメンを食べた』という文章があったとします。 RNNは、まるで1つずつドミノを倒すように単語を処理します。そのため、長い文章になると最初の単語の影響が最後にはほとんど残りません。一方、CNNは、文章を画像のように見てパターンを捉えようとしますが、単語の並び方を理解するには何層も積み重ねる必要があり、計算コストが非常に高くなります。

こうした課題を解決するために、"Attention機構だけ"でシーケンス処理を行うという大胆な発想で登場したのが、2017年の論文「Attention is All You Need」で提案されたTransformerです。

Attention(注意機構)とは?

「どの単語に注目するか」を学習

Attentionは「ある単語が、文章中のほかのどの単語に注目するか(重要度が高いか)を学習し、情報を取り込む」ための仕組みです。人間が文章を読むとき、キーワードに意識を向けたり、指示語(“それ”)の参照先を推測したりするのと似ています。

例えば、人間が『私は昨日、東京でラーメンを食べた』という文を読むとき、最も重要な関係は『食べた』と『ラーメン』です。しかし、従来のAIではこれらのつながりを正しく捉えられませんでした。Self-Attentionは、文章内の全ての単語同士の関連性を一度に計算し、『食べた』にとって最も重要な単語が『ラーメン』であることを理解できるのです。

Self-AttentionとEncoder-Decoder Attention

  • Self-Attention(自己注意)
    • 同じ文の中で、単語同士がどのくらい関連し合うかを学習。Encoder内でも、Decoder内でも使われる。
  • Encoder-Decoder Attention(交差注意)
    • Decoderが単語を生成するとき、Encoderの出力(入力文の情報)に注意を向ける仕組み。
    • 「翻訳元の文章」と「生成中の文章」をつなぐ要となる。

Transformerの要素

Multi-Head Attention:多面的な見方

実際のTransformerでは、このAttention計算を1つのHeadだけでなく、複数のHead(Multi-Head)で行います。

  • 1つのAttentionでは「主語-動詞」の対応しか拾わないかもしれませんが、複数Headがあれば「時制」「目的語」「補語」など、多様な関係を同時に捉えられる
  • 得られた結果をまとめて(連結し)、全結合層を通して統合することで、より豊かな表現を獲得する

例えば、人間が文章を読むとき、同時に『主語-動詞の関係』『時制』『感情的なニュアンス』など複数の視点で理解します。Multi-Head Attentionは、こうした異なる視点を複数の『Attentionヘッド』で並列に処理し、より豊かな文脈理解を可能にします。

Multi-Head Attentionは、まるで1つの文章を『何人もの専門家が異なる視点で分析する』ようなものです。1人の専門家は『主語-動詞の関係』を見て、別の専門家は『時制』、もう1人は『感情的なニュアンス』を見ています。最終的に、これらの視点を統合することで、より豊かな文脈理解が可能になります。

以下の2つの文章を考えてみましょう。

  • 彼は銀行(bank)でお金を引き出した
  • 川のほとり(bank)に座っていた

1つのAttentionだけでは、『bank』の意味が『金融機関』なのか『川のほとり』なのか判別しづらいです。しかし、Multi-Head Attentionを使うと、異なる文脈を捉えることができるため、文脈によって意味を正しく解釈できます。

Positional Encoding:単語の順序情報

Transformerは文章を一気に処理するため、「単語の順番」を自然に理解できません。 例えば、「猫が犬を追いかけた」と「犬が猫を追いかけた」では意味が違いますよね? Positional Encodingは、「この単語は先に出た」「この単語は後に出た」という情報を、AIに伝えるための仕組みです。

単語の順番を数字として表すには、一定のルールが必要です。そこで使われるのがサイン波・コサイン波です。これらは、数学的にきれいなパターンを作れるため、AIが『この単語は前に出た』『この単語は後に出た』と判断しやすくなります。Positional Encodingでは、単語の位置に応じた数値パターン(サイン波・コサイン波)を付与します。 数式で表すと複雑ですが、要するに「この単語は先に出た」「この単語は後に出た」という情報をAIに教えるためのものです。

  • 代表的な式例:
    PE\left(𝑝𝑜𝑠,\textit{2𝑖}\right) = \sin\left(\frac{𝑝𝑜𝑠}{10000^\frac{2𝑖}{𝑑_{model}}}\right)
    PE(𝑝𝑜𝑠,2𝑖+1) = \cos\left(\frac{𝑝𝑜𝑠}{10000^{\frac{2𝑖}{𝑑_{model}}}}\right)
    • 𝑝𝑜𝑠: 単語の位置(0,1,2,…)
    • 𝑖: ベクトル次元内でのインデックス
  • これにより、単語の並び(先頭なのか末尾なのか)がAttentionだけでも区別可能になります。

Transformerは、文章を一気に処理するため、単語の順番を意識しません。たとえば『犬が猫を追いかけた』と『猫が犬を追いかけた』は、単語の並びが違うだけで意味が変わります。Positional Encodingは、この順序を数値化し、AIに『単語の並びも大事だよ!』と教える役割を果たします。

Transformerの構造:Encoder-Decoder

機械翻訳などでは、TransformerはEncoderとDecoderの2大パートを持ちます。


         +----------+
         |  Encoder |
         +----------+
              |
     (Encoder-Decoder Attention)
              v
        +-----------+
        |  Decoder  |
        +-----------+
              |
          出力文生成

  • Encoder
    • 入力文(例:英語文)を受け取る部分
    • 単語の埋め込み → Self-Attention → Feed Forward層 …を複数層重ねることで、文章全体の文脈をまとめた出力ベクトルを作る
  • Decoder
    • 出力文(例:日本語文)を1単語ずつ生成する部分
    • Self-Attention」で自分がこれまで生成した単語列を参照しつつ、
    • Encoder-Decoder Attention」でEncoder出力(=翻訳元文の情報)を取り込み、
    • 最終的に次の単語を予測していく

Self-Attention と Encoder-Decoder Attention

  • Self-Attention (in Encoder)
    • 同じ入力文の単語同士がどれくらい関連するかを学習
  • Self-Attention (in Decoder)
    • これまで生成した出力文の単語同士がどれだけ関連するかを学習(通常、未来の単語を見ないようマスクを掛ける)
  • Encoder-Decoder Attention
    • Decoderが生成の途中で、Encoderの情報をどう参照するかを学習
    • これにより、翻訳先の文を生成するときに、翻訳元文の適切な部分に注意を向けられる

何がそんなにすごいのか

  • 並列処理がしやすい
    • RNNと違い、単語を逐次ではなく「一斉に」処理できるので、学習速度が向上
  • 長距離依存関係を捉えやすい
    • Attentionによって、文章の頭と末尾など離れた単語同士でも直接的につながりを作れる
  • 高い性能
    • 機械翻訳、要約、QAなど多くのNLPタスクで、当時のSOTA(最高水準)を上回る性能を示し、モデルの新たな基盤に

プロダクトへの展開や応用

  • 自然言語処理
    • BERT(Google)
      • TransformerのEncoder部分をベースにし、大規模事前学習で多くの下流タスクに対応
    • GPT(OpenAI)
      • TransformerのDecoderをベースとする巨大モデルで、自然な文章生成に強み
    • その他
      • T5、XLNet、RoBERTaなど、多くの派生や改良版が登場し、NLP自然言語処理)の飛躍的な進歩につながっている
  • 自然言語処理以外への応用
    • Vision Transformer (ViT)
      • 画像を細かいパッチに分割して順番に並べ、Transformerで認識・分類。画像処理でも高い性能を示す
    • 音声分野
      • スペクトログラムにSelf-Attentionを適用するモデルが出現し、音声認識音声合成で成果があがっている

まとめ

  • 「Attention is All You Need」は、RNN/CNNを用いずにAttention機構のみでシーケンス処理を行うという画期的な提案
  • Transformerの重要要素は「Self-Attention」「Multi-Head Attention」「Positional Encoding」
  • これが元になり、BERTやGPTなどの大規模言語モデルが登場し、現在のNLPや他のAI分野に大きな影響を与えている

参考文献

  • Vaswani, A., et al. (2017). “Attention Is All You Need.” Advances in Neural Information Processing Systems (NeurIPS).
  • Devlin, J., et al. (2018). “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.”
  • Radford, A., et al. (2018-2022). GPTシリーズ関連論文