本動画は、現代のAIがなぜ自然な文章を書き、複雑な問いに答えられるのかを、Transformerの仕組みから丁寧に解き明かす内容である。トークン化、埋め込み、位置エンコーディング、注意機構、学習時の誤差修正までを一つずつ追いながら、大規模言語モデルの中で実際に何が起きているのかを、専門的でありながら直感的に理解できる形で解説している。

- AIは本当にどうやって動いているのか
- Decoder-only Transformerの全体像
- トークン化とは何か
- 埋め込みベクトルで意味を持たせる
- 単語の順番をどう伝えるのか
- Masked Multi-Head Attentionの核心
- Query、Key、Valueとは何か
- QKVベクトルはどう作られるのか
- Attentionの数式が意味していること
- Valueを混ぜて文脈つきの表現を作る
- スポンサー紹介
- なぜMulti-Headが必要なのか
- Concatと線形変換
- Skip ConnectionとNormalization
- Feed Forward Neural Networkの役割
- 1つのDecoder Blockがしていること
- 複数のDecoder Blockを重ねる意味
- 最終出力層とSoftmax
- 推論時に実際に何が起きているのか
- 推論ではなく学習では何が起きるのか
- 誤差逆伝播とGradient Descent
- Transformerがすべてを変えた理由
- まとめと締めくくり
AIは本当にどうやって動いているのか
今日のAIは、投げかけたほとんどどんな質問にも答えられます。詩やエッセイを書いたり、数秒で完全な調査レポートまで生成したりできます。
あまりにも出来すぎていて、本当なのかと疑いたくなりますよね。いったいこれはどうやって動いているのか、立ち止まって考えたことはありますか。内部ではどんなとんでもないことが起きていて、こんなことが可能になっているのでしょうか。
今日は、その仕組みをすべて分解して見ていきます。
現代のAIモデル、たとえば GPT、Gemini、DeepSeek などが実際にどう動いているのかを解説していきます。かなり技術的なところまで踏み込みますが、心配はいりません。誰でも理解できるように、できるだけシンプルな言葉で説明します。
これらすべてのモデルの土台になっているのは、Transformerアーキテクチャです。これは Google DeepMind の伝説的な論文 Attention Is All You Need で最初に紹介されたものです。
そして今のほとんどのAIモデルで使われているアーキテクチャは、この元の論文とほとんど同じです。もちろん、モデル自体ははるかに大きくなりましたし、学習データも圧倒的に増えました。研究者たちは途中でさまざまな改良も加えています。しかし、根本の構造は今でも同じです。
なお、元々のTransformerモデルには2つの半分がありました。エンコーダーとデコーダーです。
異なる言語を話す2人の間に座っている翻訳者を思い浮かべてください。この構成はもともと翻訳のために考えられたものでした。
ただ、GPT や Gemini のようなチャットボットでは、このエンコーダー部分は実際には不要だということがわかりました。なので、もっとシンプルな形にできます。この動画では、その簡略化された形を扱います。
Decoder-only Transformerの全体像
この動画では、Decoder-only Transformer がどう動くのかを見ていきます。
まずは全体像をざっくり説明します。Transformerには、文の断片が与えられます。それがデータに分解され、Transformerの中を流れていきます。そして最後に、次に来る可能性が最も高い単語を出力します。
その単語は元の文に付け加えられ、同じ処理が何度も何度も繰り返されます。
こうして、最も可能性の高い次の単語を1語ずつ出力しながら、返答を完成させていくのです。
ここで、そんなの単純すぎるだろうと思うかもしれません。ただ次に来そうな単語を予測しているだけのモデルが、どうして詳細なエッセイや医学研究レポートまで書けるのか、と。
でも、信じられないように聞こえても、本当にそれが仕組みなのです。
では、本題に入りましょう。このアーキテクチャ全体を、パーツごとに順番に見ていきます。最初は intimidating に聞こえるかもしれませんが、理解してしまえば意外と直感的です。
まず最初から考えてみましょう。I go to work by という文の断片を、このTransformerモデルに入力すると何が起きるのでしょうか。
最初に大事なのは、モデルは実際には英語も、どんな言語も読めないということです。モデルが理解しているのは数字だけです。
だからまず、テキストをAIモデルが理解できる数字に変換する必要があります。この処理がトークン化です。
トークン化とは何か
これを自分で考えるとしたら、どうやるでしょうか。
1つの方法は、語彙の中の各単語それぞれに番号を割り当てることです。
たとえば、he is unhappy with the redesign という文があるとします。すると、それぞれのユニークな単語に番号が付けられます。さらに、空白や句読点にも番号を振る必要があります。
ただ、このやり方には問題があります。英語のすべてのユニークな単語を、活用形や時制なども含めてラベル付けしようとすると、数が膨大になりすぎます。必要なラベルの量がとてつもなく多くなり、非常に非効率です。
逆に、アルファベットの各文字だけを取り出して、それぞれにトークンを割り当てることもできます。その場合、扱う語彙データは非常に小さくなります。26文字と、空白や句読点だけで済みます。
しかし、これにも問題があります。単語の意味が失われてしまうのです。文字1つ1つには、基本的に意味がありません。これは本を読むときに、1文字ずつ見ているようなものです。それではほとんど意味がわかりません。意味を持つのは、文字が組み合わさって単語になったときです。
つまり、各文字ごとにトークン化する方法もうまく機能しません。
実際に理想的なのは、その中間です。英語のすべての単語にラベルを付けるのでもなく、1文字ずつ分けるのでもなく、単語を意味のある部分に分割するのです。
さきほどの文に戻ると、たとえば unhappy は un と happy に分けられ、redesign は re と design に分けられます。
つまり、よく出てくる接頭辞、接尾辞、語根のようなものを学習していくわけです。
これには驚くほど大きな利点がいくつかあります。
まず1つ目は、語彙サイズを管理しやすくできることです。各単語すべてにラベルを与えるより、はるかに小さくできます。
2つ目は、未知語への対応がとても上手くなることです。AIが今まで一度も見たことのない新しい単語、たとえば webinarification のようなものに出会ったとしても、単にわかりませんとは言わずに、それを webinar と ification に分けます。そして、それぞれの部分に対する理解を使って意味を推測できます。
このおかげで、AIは新しさや未知の単語にもある程度対応できるのです。新語、スラング、タイプミスにも、より柔軟になります。
しかも、このようなサブワードは、単語全体や単独の文字より意味をうまく捉えることがよくあります。たとえば学習後には、un は否定を表すことが多く、re はもう一度何かをすることを意味しやすい、といったことを理解するようになります。
埋め込みベクトルで意味を持たせる
さて、トークン化が終わると、AIは各単語やサブワードをトークンとして識別できます。
しかし、それでもまだ各単語の意味はわかっていません。では、この数値トークンに、より深い意味をどうやって与えるのでしょうか。
必要なのは、単語を数字で表現しつつ、その中に意味、意味的な関係性、単語同士のつながりまで含められる仕組みです。
そこで登場するのが、入力埋め込みのステップです。
モデルは各トークンIDを、もっと大きなベクトルに変換します。要するに、長い数字のリストに変換するわけです。
このデモでは簡単にするため、空白は無視しています。ごちゃごちゃしすぎないようにするためです。ただ実際には、空白や句読点もきちんと考慮する必要があります。
この例では、ベクトルの長さは10です。つまり、それぞれのリストには10個の数字があります。
しかし実際のAIモデルでは、こうしたベクトルは途方もなく長いです。たとえば GPT-3 では、各ベクトルに12,288個の数字があります。後のバージョンのGPTでは、さらに多いはずです。
このベクトルは、各単語に高次元空間での座標を与えているようなものだと考えられます。2次元や3次元の地図ではなく、何百次元もの地図の中に単語を配置しているイメージです。
そして重要なのは、意味が似ている単語どうしは、この多次元空間の中で近い位置に来るということです。
たとえば、man、woman、boy、girl という単語を考えてみましょう。これらにベクトルがあるとします。各数字は、ある概念を表す1つの次元だと考えられます。
たとえばベクトルの最初の数字が性別を表しているかもしれません。そうすると、man と boy は近くに位置し、woman と girl は反対側に位置します。
あるいは2番目の数字が年齢の次元を表しているかもしれません。その場合、man と woman は近くなり、boy と girl は若い側で近くに集まることになります。
少なくとも概念的には、そのように考えることができます。
ここで次に気になるのは、その数字をどうやって決めるのかということですよね。
実は、それは人間が決めるわけではありません。モデルが学習の中でそれを学びます。学習については後で詳しく話しますが、今は、すでに十分に学習されたモデルがあり、これらのベクトルの数値は最適化済みだと仮定しましょう。
すると、I go to work by という入力文は、それぞれの単語の意味を表す埋め込みベクトルへと変換されます。
単語の順番をどう伝えるのか
ただ、それだけでは不十分です。ここには微妙ですが極めて重要な問題があります。
人間の脳は自然に左から右へ単語を読んでいきますが、Transformerはすべての単語を同時に処理します。文全体を一度に見ます。これは速度の点では素晴らしいのですが、そのせいで、単語がどの順番に並んでいるのかをモデルはまったく知らないのです。
the dog bit the cat と the cat bit the dog は、私たちにとっては明らかに違う意味です。しかしTransformerにとっては、単語の位置を与える仕組みがなければ、これらは同じものに見えてしまいます。
ここで次に必要になるのが位置エンコーディングです。
I go to work by という文に戻ると、各単語の位置 0、1、2、3、4 を、それぞれのベクトルに加える必要があります。
ここで重要なのは、単に1、2、3、4のような1つの数字を足せばいいわけではないということです。既存の埋め込みに足し合わせるには、同じ長さの数字のリスト、今回なら10個の数字として位置を表現する必要があります。
元のTransformer論文では、これを sine 波と cosine 波で解決しました。これは本当に見事なアイデアです。
興味があるなら、元の数式はこうなります。一見するとかなりランダムに見えるかもしれませんが、実は異なる周波数の sine と cosine を交互に使うことで、各位置ごとに一意の数字の並びを作ることができます。
どの2つの位置も同じ組み合わせにはなりません。0はこういうパターン、1はこう、2はこう、といった具合です。
つまり、それぞれの位置は、指紋のように固有の数字パターンへ変換されるのです。
この例ではベクトル長が10しかないので、最初の10個の数字だけ使えば十分です。こうして位置エンコーディングの式を適用すると、0、1、2、3、4 という位置は、それぞれ固有の数列になります。
それを元の埋め込みに単純に足し合わせれば、新しいベクトルができます。
この新しい数字たちは、各単語の意味だけでなく、その単語が文中のどこにあるかという情報まで持つことになります。
これで位置エンコーディングのステップは完了です。そしてようやく、データをTransformer本体に入力できるようになります。
Masked Multi-Head Attentionの核心
次のコンポーネントは Masked Multi-Head Attention と呼ばれます。
この部分の役割は、文に対するより深い理解を作ることです。ここはTransformerアーキテクチャ全体の中でも、最も重要なアイデアと言っていい部分です。
文の中で、どの単語が他のどの単語にとって重要なのかを見極めます。言い換えれば、文脈を理解しようとするのです。
たとえば、The cat didn’t cross the street because it was too tired. という文を考えてみてください。この it は street を指しているのか、それとも cat を指しているのか、曖昧に見えます。
でも私たちは読めば、それが cat を指しているとわかります。
Transformer以前の古いAIモデルは、こうした文脈理解がとても苦手でした。というのも、それらは基本的にテキストを1語ずつ順に処理していたからです。it という単語に到達する頃には、それ以前の単語とのつながりがすでに弱くなったり、ぼやけたりしていたのです。
Transformerはこれを違うやり方で処理します。直前の単語だけを見るのではなく、文の中のすべての単語を一度に見ます。
イメージとしては、各単語が、自分より前にあるすべての単語、そして自分自身も含めて見渡し、その中でどれが最も重要で、どれが最も関連しているかを判断するようなものです。
Query、Key、Valueとは何か
では、それはどうやって行うのでしょうか。
そのために使うのが、各単語に対して学習される3つの特別なベクトルです。これらは Query、Key、Value ベクトル、略して Q、K、V と呼ばれます。
こう考えるとわかりやすいです。
Query は、現在処理している単語が発する問いのようなものです。自分に関連する情報はどこにあるのか、と尋ねています。
Key は、文中の各単語が手を挙げて、自分はこういうものです、これが自分のラベルです、あなたのQueryに合うか見てください、と言っているようなものです。つまり、Kは自分を提示する役割を持っています。
そして Value は、その単語に紐づいた実際の中身です。もし自分のKeyがQueryにとって relevant だと判断されたら、ではこれが実際に渡せる中身です、これが自分の意味です、と差し出す役割です。
つまり、Q が問いを発し、K が照合用のラベルを出し、V が一致したときに実際の内容を渡すわけです。
QKVベクトルはどう作られるのか
では、Q、K、V のベクトル自体はどう作られるのでしょうか。
Qベクトルについては、各単語の入力埋め込みを取り、それに行列、つまり数字の格子のようなものを掛け合わせます。慣例的にこれを WQ と呼びます。
この掛け算をすると、Qベクトルが得られます。
その行列の値はどう決めるのかと思うかもしれませんが、便利なことに、それも人間が決めるわけではありません。これも学習の中でモデルが獲得します。学習については後で説明します。
これで文に対するQベクトルが得られます。
次にKベクトルも同じです。ただ今度は、埋め込みに別の行列を掛けます。これは WK と呼ばれます。これでKベクトルが得られます。
最後にVベクトルもまったく同様です。別の行列 WV を掛けて計算します。これでVベクトルが得られます。
Attentionの数式が意味していること
さて、Q、K、Vベクトルが揃いました。次に何をするのでしょうか。
ここで、元のTransformer論文にある公式が出てきます。Attentionを計算するには、この式に通します。
まず、それぞれの単語のQueryベクトルを、各単語のKeyベクトルと比較します。自分自身も含めてです。
イメージとしては、各Qベクトルが、各単語のKベクトルすべてと掛け合わされる表を作る感じです。その結果として得られるのがスコアの表で、一般には dot product と呼ばれます。これは数学的には類似度を測る方法です。
概念的に何を意味しているかはすぐ説明しますが、その前にまず式全体を追いましょう。
ここで非常に重要なことがあります。モデルがテキストを生成しているとき、未来の単語を見てはいけませんよね。もし現在 to という単語を処理しているなら、使ってよい情報は I、go、to までです。work や by のような後ろの単語は隠されていなければなりません。
だからこの仕組みは Masked Attention と呼ばれます。Mask が、モデルが未来を盗み見ることを防いでいるのです。
先ほどの表に戻ると、未来の単語に対応するマスは blank out して隠す必要があります。つまり、現在の単語は、自分自身と過去の単語しか見られません。
さらに、Q と K を単に掛けるだけでは、ニューラルネットワークの学習が安定しません。そこで論文の著者たちは、平方根と softmax 関数を加えて、データをより扱いやすく、きれいな形に整えました。
その式を表に適用すると、最終的に各値が得られます。
では、概念的には何が起きているのでしょうか。
この表の各値は、非常にシンプルな問いに答えています。今処理している単語に対して、この単語はどれだけ関連しているか、という問いです。スコアが高いほど、関連性が高いということです。
直感的にするために、この式を大きさの異なる点で表すと考えてみましょう。点が大きいほど関連性が高いとします。
たとえば go という単語を見るとき、誰が行くのかを知ることは重要です。すると I という単語はかなり relevant になります。
同様に work という単語について考えると、誰が仕事をしているのかを知ることが重要でしょう。その場合も、I は work に対してかなり強い relevance を持ちます。
少なくとも概念的には、そう考えることができます。
Valueを混ぜて文脈つきの表現を作る
そして元の式に戻ると、最後に各単語のVベクトルを掛ける必要があります。
この掛け算を適用し、さらにそれらを全部足し合わせると、各単語ごとに新しいベクトルができます。
この新しいベクトルは、もはや単語そのものの意味だけではありません。文脈によって強化されたベクトルになっています。
その単語が、文中の他の単語のうち、自分が関連性が高いと判断したものから情報を取り込み、意味が blend された表現になっているのです。
これが Attention の核心です。大規模言語モデルが文の中の文脈を理解するのは、この仕組みによるものです。
スポンサー紹介
もし、実際に仕事を片づけてくれるAIを探しているなら、この動画のスポンサーである GenSpark をチェックしてみてください。
これは単なる基本的なチャットボットというより、専属のAI社員のようなものだと考えるとわかりやすいです。
GenSpark はシリコンバレー発のオールインワンAIワークスペースで、わずか11か月で年間売上2億ドルに到達しました。
トップクラスのAIモデルを統合し、完成済みですぐ使える結果を提供してくれます。プレゼン、Webサイト、データ分析、自動アウトリーチなど、さまざまな用途に対応しています。
Version 3 では、自動化がさらに新しいレベルへ引き上げられました。
私が特に気に入っている新機能は GenSpark Workflows です。毎日の反復作業を完全自動化できます。たとえば毎朝、業界ニュースをスキャンして、その要点を短いデイリーブリーフとして受信箱に届けるよう設定できます。
あるいは、24時間体制で顧客フィードバックを監視し、重要ポイントをチームと共有することもできます。
Google Workspace、Slack、Notion、Salesforce など、20以上の人気ツールとシームレスに接続できます。
さらに、GenSpark Claw という、あなただけのAIエージェントもあります。これは専用のクラウドコンピューター上で完全に動作します。
各ユーザーには、Claw があらかじめインストールされた、常時稼働の事前設定済みクラウドサーバーが1台割り当てられます。データは分離されたクラウドインスタンス内に保持され、完全なアクセス制御のもとでプライベートに保たれます。
Claw をよく使うアプリにデプロイすれば、その後はメッセージングアプリ内から GenSpark Claw と直接やり取りできます。
さらに、GenSpark には完全な生産性スイートも含まれています。AI Slides で見栄えのするプレゼンを作り、AI Sheets でデータ分析を自動化し、AI Docs でレポートやスクリプトを書くことができます。
そして一番大きいのはここです。有料ユーザーは Nano Banana、GPT Image、Gemini 3.1 Pro、GPT 5.4、Opus 4.6 などのトップモデルを無制限で利用できます。
もしAIチーム全体に働いてもらいたいなら、概要欄のリンクをクリックして、今すぐ GenSpark を見てみてください。
なぜMulti-Headが必要なのか
さて、ここまで説明した計算、つまりQKVベクトルの計算から、dot product の表の作成、最後の加算まで、これらすべてが1つの attention head の中で起きていることです。
元の図に戻ると、そこには multi-head attention と書かれています。つまり、attention head は1つではなく、複数あった方がよいのです。
では、なぜ複数必要なのでしょうか。
文脈や関連性には、いろいろな見方があり得るからです。
たとえば work という単語に対して、ある attention head は動詞同士の関係に注目するかもしれません。その場合、go の relevance が高くなるでしょう。
別の attention head では、名詞や主語が work に対してどれだけ relevant かを見るかもしれません。その場合、I の方が重要になるでしょう。
つまり、単語どうしの文脈を定義する方法は1つではないため、1つの attention head だけでは足りないことが多いのです。
だから元のTransformer論文では、図にあるように複数の attention head を使っています。それぞれが、別々の種類の文脈に注目するよう学習します。
各 head は、注意計算を丸ごと独立して実行します。それぞれが自分専用のQKVベクトルを持ち、dot product の表を作り、その一連の処理を通して、自分なりの結果を出します。
これは、複数のアナリストが同時に同じ文を見ているようなものだと考えられます。各 head、つまり各アナリストは、異なる種類の関係や、文の異なる側面に注目するようになるのです。
たとえば、ある head は主語と動詞の一致を見ているかもしれませんし、別の head は代名詞の参照先を追っているかもしれません。少なくとも概念的にはそう考えるとよいです。
もちろん、結局のところ内部では膨大な数学が動いているだけではあります。
Concatと線形変換
元の図に戻ると、複数の head のあとに concat というステップがあります。これがどういうものか見ていきましょう。
説明を簡単にするため、この例では attention head を2つだけにします。両者はそれぞれ独立して attention ベクトルを計算し、文脈を別々の観点から表現します。
そして最後に、それらの結果が得られます。
次に、各 head から出てきたベクトルを連結します。つまり、1本のベクトルにくっつけるわけです。これが元のTransformer論文にある concat ステップです。
そのあと、さらに linear ステップを通る必要があります。つまり、連結されたベクトルに、別の行列を掛けるのです。慣例的にこれを WO と呼びます。
連結したベクトルを、この行列に並列に掛け合わせます。
これでようやく multi-head attention コンポーネントが完了します。
ここまでで本当に多くの計算をしてきました。QKVベクトルを作り、dot product の表を計算し、結果を連結し、さらに別の行列にも通しました。
わかりやすくするために、この一連の処理全体を1つのブロックとしてまとめて考えましょう。
このブロックを通ると、最終的に、前と同じ次元数を持つ5つのベクトルが出てきます。この例では各ベクトルは10個の数字を持つはずです。
Skip ConnectionとNormalization
もしこれがTransformerアーキテクチャを初めて学ぶ人なら、この時点で頭の中は数字と計算でいっぱいになっているかもしれません。
たった1つのコンポーネントだけで、すでにものすごく多くのステップを通りました。元のベクトルは、ほとんど別物と言っていいほど変換されてしまっています。
これは問題です。
元のベクトルには、各単語の意味と位置の情報が入っていました。しかし、この masked multi-head attention の中であまりにも多くの処理を通すと、その情報が失われる危険があります。
では、それをどう防ぐのでしょうか。
そこで研究者たちが設計したのが、その直後に置かれた add and norm ステップです。
まず add ステップから見ましょう。
言ったように、元のベクトルが multi-head attention ブロックを通ると、結果のベクトルはかなり違うものになる可能性があります。そこで add ステップでは、その新しいベクトルに元のベクトルを足し戻します。
こうすることで、意味や位置といった元の情報をある程度保ったままにできるのです。
これは、情報が multi-head attention を飛び越えて流れるためのショートカットのようなものです。実際、この部分は skip connection、あるいは residual connection とも呼ばれます。
これもTransformerアーキテクチャの中で非常に重要な部品の1つです。これがなければ、モデルはデータを変換し続けるうちに、そもそも文が何を意味していたのかを忘れてしまう可能性があります。
でも、こうした skip connection があることで、より多くの層を積み重ね、はるかに深いモデルを作りながらも、元の信号を保てるのです。
次に norm ステップです。これは normalization の略です。
AIモデルは、データが標準的な範囲に収まっている方を好みます。なので、この normalization ステップでは、ベクトルの数字を調整して、平均が0、標準偏差が1になるようにします。
Normalization によって値が大きくなりすぎたり小さくなりすぎたりするのを防げます。そうした極端な値は学習を乱してしまうからです。
つまり、Transformerがより滑らかに学習できるようにしているわけです。
Feed Forward Neural Networkの役割
ここまででかなりの量の数学と手順を見てきましたが、これでデコーダーのこの部分はほぼカバーできました。multi-head attention ブロックと、その後の add と normalization を見たわけです。
もう少しで終わりです。
次に、その結果を feed forward neural network に入力します。見た目はこういう構造です。
ニューラルネットワークに馴染みがないなら、これはデータが次の層にどれだけ流れるかを決める、つまみやダイヤルの集まりのようなものだと考えるとよいです。
この feed forward network には、入力層があります。そこにはベクトルのサイズと同じ数のダイヤルがあります。この例では10個です。
その次に、中間層があります。ここには入力層よりずっと多くのダイヤルがあり、通常は入力層の2倍から4倍です。
そして最後に、再び出力層へと縮小されます。出力層のサイズは入力層と同じです。この例なら10個の出力です。
つまり、入力ベクトルと同じサイズの新しいベクトルが出てきます。
ここで、なぜそんなことをするのかと思うかもしれません。ベクトルをいったん広げて、このニューラルネットワークに通し、それからまた同じサイズに縮めるなんて、余計な仕事に見えますよね。
でも概念的には、このステップは文からより深い特徴や意味を捉えようとしているのだと考えられます。
ニューラルネットワークは、内部にあるパターンを捉えるのが得意です。なのでこれは、Attention で集めた文脈をもとに、各単語に追加の思考時間や処理能力を与えるようなものだと考えられます。
各単語の resulting vector をこのニューラルネットワークに並列に通すと、また新しいベクトルが得られます。ただし、これらも入力と少し違っているかもしれません。
そこで、ここにも add and normalization ステップがあります。
つまり先ほどと同じように、residual connection を使って入力を出力に足し戻し、入力からの情報をある程度残します。そしてそのあと、データをきれいに整えるために再び normalization を行います。
1つのDecoder Blockがしていること
これで、Transformerモデルの1つの decoder block が完了です。
ここまでの内容を簡単にまとめましょう。
まず、単語を埋め込みに変換し、各単語の意味を持たせます。次に位置エンコーディングを加えて、単語の順番も含めます。
そのあと multi-head attention ブロックに通し、文全体の文脈を理解できるようにします。
その結果に元の入力を足し戻して、元の情報の一部を保ちます。さらに normalization でデータを整えます。
その次にニューラルネットワークに通して、文脈全体をさらに分析する時間を与えます。そして再び入力を足し戻し、もう一度 normalization します。
これが1つの decoder block です。
複数のDecoder Blockを重ねる意味
そして図を見るとわかるように、この decoder block は複数つなげることができます。そうすると、さらによい結果が得られます。
なぜ複数必要なのかというと、各 block が入力文の意味や表現を少しずつ洗練させていくからです。
たとえば1つ目の decoder block では、単語間の基本的な意味や関係が見えるかもしれません。
2つ目の block では、その文に潜む、もう少し深い意味を捉えられるかもしれません。
3つ目の block では、さらに深い関係性を理解できるかもしれません。
こうして、入力文全体に対する高次の理解を築くには、こうした decoder block を重ねていく必要があるのです。
最終出力層とSoftmax
すべての decoder block を通過したあと、得られたベクトルは linear layer に送られ、そのあと softmax 関数に通されます。
これはいったい何なのでしょうか。
ここは、いわばゲームのラスボスのような場所です。
本質的には、これもまた別のニューラルネットワークです。入力数はベクトルサイズで、この例では10個です。そして出力数は、AIモデル全体の語彙サイズに対応します。
つまり、そのモデルが持っている単語とサブワードの総数だけ、出力ノードがあるということです。
最初のノードは語彙の最初の単語またはサブワード、この例では文字Aです。2番目のノードはその次の単語、という具合に、最後の単語、この例では zygote まで並びます。
このステップにベクトルを通す目的は、語彙内のあらゆる可能な単語に対する確率分布を作ることです。
つまり、このニューラルネットワークの各出力ニューロンは、その単語が文の次の単語である可能性の高さを表します。
最後の softmax 関数は、それらすべての確率の合計が1になるようにしてくれます。
そのあと、モデルはその確率分布に基づいてランダムサンプリングし、系列の次の単語を選びます。
推論時に実際に何が起きているのか
例に戻って I go to work by を考えてみましょう。推論時、つまりモデルを使って回答を生成するときには、私たちが関心を持つのは次の単語の予測だけです。
Transformer自体は、系列内のすべての単語に対して出力埋め込みを生成します。しかし、私たちが使うのは最後の単語の埋め込みだけです。この例では by の埋め込みです。
それを最後の linear layer と softmax に通して、次の単語に対する確率分布を得ます。
そして、その中からサンプリングして、たとえば最も高い確率の単語である bus が選ばれたとしましょう。
そうすると、その bus が出力されます。
ただし、まだ返答は完成していないかもしれません。なので、この動画で説明してきた一連の処理は、そのあとも繰り返されます。
単語を1語ずつ出力しながら、AIモデルが返答を最後まで完成させるまで、このループは何度も回り続けるのです。
これが、ChatGPT のような大規模言語モデルが動く基本的な仕組みです。
推論ではなく学習では何が起きるのか
ここまで説明してきたのは、モデルを使うとき、つまり inference のときに起きることでした。
では次に、モデルを学習するときに何が起こるのかも見ていきましょう。
そもそも、Transformer内のあらゆる計算に使われる値は、どうやって決まるのでしょうか。
最初の最初に戻ります。いま、完全にゼロからモデルを学習するとしましょう。このモデルは英語に関する事前知識を一切持っていません。
学習するには、インターネット上のデータのような、膨大な英語の例を次々に与えていきます。
たとえば学習の1ラウンドの簡単な例として、I go to work by という文を与え、次に来る最も可能性の高い単語である bus を当てさせるとします。
ただし、この時点ではモデルは言語の知識を何も持っていないので、各単語の意味を持つはずの初期埋め込みベクトルは、実際にはただのランダムな値です。
その後、これまで説明してきたのと同じように multi-head attention に通されます。
最初のステップでは、QKVベクトルを計算するために、入力埋め込みに WQ、WK、WV という行列を掛けますよね。
でも学習開始時点では、これらの行列の値もすべてランダムです。まだどのような値の組み合わせが最適なのかわかっていません。
さらに multi-head attention のあとには、結果に WO 行列を掛けます。これも最初はランダムな値です。
そのあと add と normalization を通り、feed forward neural network に入ります。この中のダイヤルやつまみの値も、最初はやはりランダムです。
さらにもう一度 add と normalization を行い、その後も複数の decoder block を通りますが、その中の値もすべて最初はランダムです。
最後に final linear layer に到達しますが、そこにあるダイヤルやつまみの値も、最初はランダムです。
つまり、学習前のTransformer全体は、巨大なランダム数字の塊だと考えてよいのです。
誤差逆伝播とGradient Descent
では最後に何が起きるのでしょうか。
もし、たまたま bus という正しい単語を出せたなら、その値の組み合わせはかなり良いのかもしれません。その場合は何も変える必要がないかもしれません。
でも、たいてい最初は banana のようなランダムな単語を出してしまうでしょう。そうすると正解ではないので、error、つまり loss が発生します。
ただ、間違えたとわかっただけでは十分ではありません。モデルのどの部分が、その間違いの原因だったのかを特定する必要があります。
そこで登場するのが back propagation、誤差逆伝播です。
Back propagation は、その error をネットワーク全体に逆向きに流していきます。計算の中で使われたすべてのランダムな値を見て、それぞれがどれだけそのミスに寄与したかを判定していきます。
それがわかったら、次に gradient descent という方法を使って、それらの値を更新します。
Gradient descent がすることはシンプルです。error を減らす方向へ向かって、各重みをほんの少しだけ動かします。大きく変えるのではなく、ごく小さく調整するだけです。
そして次の学習ラウンドで、同じことをまた繰り返します。
もし単語を正しく当てたなら、モデルの値は変えなくてよいかもしれません。でも単語を間違えた場合は loss が発生し、そのミスを修正するためにモデル内の値が少しだけ調整されます。
このループが何度も何度も繰り返されるのです。系列を与え、また別の系列を与え、自然言語のさまざまなサンプルを使って、何百万回、あるいは何十億回と学習させます。
そうして少しずつ、モデルのダイヤルやつまみは、文の次の単語をより正確に予測できるようになっていきます。
モデルは、ある単語のあとにはどんな単語が来やすいのかを学び始めます。文法を学び、文構造を学び、意味を学び、さらに長いテキスト全体にわたる微妙な関係まで学ぶようになります。
やがて十分な学習のあと、最初はただのランダムな数字だったものが、自然言語をきちんと生成できるシステムへと変わるのです。
これがTransformerが学ぶ仕組みです。
Transformerがすべてを変えた理由
ここまで、本当にたくさんの数学、たくさんの計算、たくさんのステップを見てきました。
でも本質的には、これが今あなたや私が使っている大規模言語モデルの仕組みです。すべては、あの伝説的な論文 Attention Is All You Need にあるTransformerモデルに基づいています。
このブレイクスルーがなければ、ChatGPT も、その他の大規模言語モデルも、今日の形では存在しなかったでしょう。
そして、この論文がすべてを変えた理由は、1つの鍵となるアイデアにあります。
それが Attention メカニズムです。これによって、モデルは文の中のすべての単語を同時に見て、文脈や単語同士の関係を見つけ出せるようになったのです。
それ以前の言語処理モデルには、これができませんでした。
だから本当に、Attention Is All You Need だったのです。
まとめと締めくくり
この動画を見終わった今、大規模言語モデルがどう動いているのかについて、より深い理解が得られていたらうれしいです。
内部では膨大な数学が動いていますが、少なくとも概念的にも視覚的にも、できるだけわかりやすく説明できていればと思います。
この動画は、実は思っていたよりずっと制作に時間がかかりました。なので、もし楽しめたなら、アルゴリズムを押し上げるためにも、できるだけ多くの人にシェアしてください。
そして、世界を変えてしまうほどのとんでもないブレイクスルーを生み出した Google のチームにも敬意を表したいです。
いつものように、これからも皆さんに共有できるトップクラスのAIニュースや便利なツールを探し続けていきます。
この動画を楽しんでいただけたなら、ぜひ高評価、シェア、チャンネル登録をして、次のコンテンツも楽しみにしていてください。
それから、AIの世界では毎週本当に多くのことが起きていて、私のYouTubeチャンネルだけですべてを取り上げるのはとても無理です。
なので、AIの最新動向を本当に追い続けたいなら、無料の週刊ニュースレターにもぜひ登録してください。
そのリンクは概要欄にあります。
ご視聴ありがとうございました。それでは、また次の動画でお会いしましょう。


コメント