図解で理解するGPT ①GPTの概念:GPTがどのように文章を生成するのか
はじめに
「メール本文を考えて」「データを分析して」「アプリを作って」
どんな質問・依頼にも答えてくれるChatGPTは、まるで現代の"魔法"のようです!!!
そして、"魔法"を"エンジニアリング"に変えるためには、ChatGPTがどのように動くかを知ることが重要です。
しかし、いざ「ChatGPTの仕組みを調べるぞ!」と意気込んでみても、 "トランスフォーマー"や"アテンション"、"埋め込みベクトル" 等の聞きなれない用語と数式に混乱し、理解を諦めてしまったことがあるかもしれません。
本書の目的は、ChatGPTの内部で動くGPTの概念と構成をゼロから理解できるようになることです。
①GPTがどのように文章を生成するのか、流れや考え方を概念図で理解し、
②GPTがどのような仕組みで動いているのか、概念図と対比して内部構成が理解できること
を目標としています。
また、GPTの仕組みを理解することに集中するため、本書では生成AIの応用方法やDecoder型以外のアーキテクチャ(Encoder型, Encoder + Decoder型等)には触れていません。
加えて、事前学習と推論のうち"推論"にのみ焦点を当てて説明しています。
GPTは文章を1単語ずつ積み重ねて作る
私たちが質問をすると、ChatGPTはあたかも考えているかのように滑らかに返答します。
では、実際のところChatGPTの内部ではどんな仕組みが働いているのでしょうか?

GPTが文章を1単語ずつ積み重ねて作るイメージ
ChatGPTの内部では、質問に対してGPTという仕組みが繰り返し動いています。
もっといえば、GPTは「過去の文章を元にして、その文章に続く"もっともらしい単語"を生成する」ということを繰り返しています。
たとえば、あなたが「リンゴは赤いですか?」と質問したとしましょう。
そうすると、GPTは「リンゴは赤いですか?」を入力として、その文章に続く"もっともらしい単語"である「はい」を生成し、元の文にくっつけて「リンゴは赤いですか?はい」を出力します。
そして次に、GPTは「リンゴは赤いですか?はい」を入力として、それに続く「、(読点)」を生成し、「リンゴは赤いですか?はい、」を出力します。
つまり、「"文章" → GPT → "文章"+"次の単語"」の作業を何度も、"文の終わりを意味する特殊な記号"(例えば"<EOS>"のような記号)が生成されるまで繰り返しているわけです。
このように、GPTが過去の文章を元にして、その文章に続く"もっともらしい単語"を生成することを理解できれば、GPTは文章を1単語ずつ積み重ねて作るというイメージがきっとつくことでしょう。
さて、GPTが「その文章に続く"もっともらしい単語"を生成する」とは、いったいぜんたいどういう意味でしょうか?
あなたが質問に答えるとき、かならず質問の意図に沿うように文脈を捉えて返答を行うはずです。
GPTも同様に、文脈を捉えることで文章の次に続く単語を生成しているのです。
次は、GPTがどのように文脈を捉えるのかについて、学んでいきましょう!
GPTは単語ごとに様々な観点から文脈を捉えている
私たちが文章を読むとき、「過去の文章から今読んでいる単語の意味を把握する」ということを繰り返し、文章全体を理解しています。
また、単語の意味を把握するだけでなく、文章の構造(主語や"てにをは")に気を付けたり、次に続く文章を予想するといった、様々な観点で文脈を捉えることにより文章を理解しているはずです。
例えば、「リンゴは赤いですか?」という文章の「リンゴは赤いです」まで読み終えたとき、次の"か?"という単語によって、その文章が「質問」であることに気が付きます。
そして、「どのような質問だったのか?」「この質問には丁寧に返すべきか?」といった観点を踏まえて返答することでしょう。
GPTも私たちと同様に、単語ごとに様々な観点から文脈を捉えています。

GPTが様々な観点から単語ごとに文脈を捉えるイメージ
具体的に、GPTがどのように文脈をとらえているのか、まずは文章が単語ごとにバラバラになるイメージをしてみましょう。
まずは「リンゴは赤いですか?」という文章を「"リンゴ", "は", "赤い", "です", "か?"」という単語に分割してみます。
「"リンゴ", "は"」まで読み進めたとき、GPTは"は"という単語から"リンゴ"に注目[1]して単語同士の文脈を捉えます。
そうして同様に、「"リンゴ", "は", "赤い"」まで読み進めると、次は"赤い"から"リンゴ"と"は"に注目して単語同士の文脈を捉える、ということを繰り返していきます。
この「単語を読んで、それより前の単語から文脈を得る」という作業を繰り返すことで、文章内のそれぞれの単語について"その単語よりも前の単語"との文脈を捉えることができるのです。
ここで、気を付ける必要があるのは「GPTは先の文章から文脈を捉えることができない」ということです。すなわち、「GPTは"ある単語よりも前の単語"との文脈だけを捉える」のです。
GPTは、過去の文章を読んで次の単語を生成するように訓練されているため、実際に文脈を捉える際にも、その単語よりも前の文章しか上手く読むことができないのです。(テスト勉強でやらなかったことは本番でもできないように)
また、文脈を捉えるためには、文章のどの部分に焦点を当てるか"注目の強さ"も重要です。
人が文章を読むとき、全ての単語を同じ強さで意識するわけではなく、文脈に応じて「ここが重要だ」と感じる部分に自然と注意を向けます。
例えば「リンゴは赤いです」まで読み終えたとき、次の"か?"という単語について考えてみましょう。
「どんな質問か?」という観点では、"か?"から"リンゴ"や"赤い"は注意を払う必要があります。
また、「この質問には丁寧に返すべきか?」という観点では"です"に大きく注目することでしょう。
このように、GPTは様々な観点から単語同士の"注目の強さ"を測ることで文脈を捉えているのです。
ここまでの説明をまとめると、
- GPTは単語ごとに文脈を捉えている
- GPTは"ある単語よりも前の単語"との文脈だけを捉える(過去の文脈だけが読める)
- GPTは様々な観点から単語同士の"注目の強さ"を測ることで文脈を捉えている
すなわち、GPTは単語ごとに様々な観点から文脈を捉えている、ということがわかりました。
さて、GPTが文脈を捉えることは分かりましたが、その文章に続く"もっともらしい単語"の選び方についてはどうでしょうか?
「リンゴは赤いですか?」という質問に私たちが返答する場合、「はい、リンゴは赤いです」と答える以外にも「いいえ、青リンゴもあるので一概に赤いとは言えないです」と答える可能性があります。
GPTも同様に、「はい」と答える以外に「いいえ」と答える可能性があります。
それでは、GPTはどのようにして次の単語を選んでいるのでしょうか?
GPTはあらゆる単語から文章の次に来そうな単語を選んでいる
GPTが文章に続く単語を生成する際、その文脈を踏まえて、あらゆる単語[2]の中から"次に来る可能性"によって単語を選んでいます。
その単語が"次に来る可能性"とは、"文章の続きに来る確率"と言い換えても良いでしょう。
例えば、「リンゴは赤いですか?」といった質問に対して、ほとんどの人は
1.「はい、リンゴは赤いです。」
と答え、たまに
2.「いいえ、青いリンゴもあります。」
と答える人もいれば、ごくごく稀に
3.「たべるんごー♪ たべるんごー♪ やまがたりんごをたべるんごー♪」
と突然歌い出す人(!?)もいるかもしれません。[3]
このとき、返答の最初の単語について、その単語が"文章の続きに来る確率"をパーセントで表すと、きっと以下のように表されるでしょう。
- はい :70%
- いいえ :20%
- たべる :1%
...
また、1.2.3.の単語以外にも、GPTが事前に記憶しているあらゆる単語についての確率を計算していることにも注意してください。
"うん"や"Yes"のような、"はい"に意味が近い単語は次に続く確率が高く、"飛行機"や"宇宙"といった文脈から離れた単語は確率が低いでしょう。

GPTが文脈を踏まえて、文章の次に続く単語の確率を出すイメージ
さて、GPTは"確率に従ってランダム"に単語を選びます。
確率が高い単語ほど選ばれやすく、確率が低い単語は選ばれにくくなる仕組みです。
もし常に一番確率が高い単語だけを選んでしまうと、同じ言葉を繰り返したり、単調でつまらない文章になってしまうことがよく知られています。
そのため、GPTは確率に従ってゆらぎを入れながら単語を選ぶことで、自然で多様な文章を作り出しています。
まとめると、GPTが文章に続く単語を生成する際に
- GPTはあらゆる単語について"次に来る単語の確率"を計算する
- GPTは"確率に従ってランダム"に単語を選ぶ
ということがわかりました。
すなわち、GPTはあらゆる単語から文章の次に来そうな単語を選んでいる、ということです。
まとめ: GPTは文脈を踏まえて確率的に次の単語を選び、文章を積み重ねていく
ここまでの説明を箇条書きでまとめてみます。
- GPTは文章を1単語ずつ積み重ねて作る
- 過去の文章に続く"もっともらしい単語"を出力する
- "文の終わりを意味する特殊な記号"が来るまで、単語の出力を繰り返す
- GPTは単語ごとに様々な観点から文脈を捉えている
- GPTは単語ごとに文脈を捉えている
- GPTは"ある単語よりも前の単語"との文脈だけを捉える(過去の文脈だけが読める)
- GPTは様々な観点から単語同士の"注目の強さ"を測ることで文脈を捉えている
- GPTはあらゆる単語から文章の次に来そうな単語を選んでいる
- GPTはあらゆる単語について"次に来る単語の確率"を計算する
- GPTは"次に来る単語の確率"をもとにランダムに単語を選ぶ
この箇条書きをもとに、GPTの概念図を作っていきましょう。

GPTの概念図
GPTの概念図によって「GPTは文脈を踏まえて確率的に次の単語を選び、文章を積み重ねていく」ということが分かると思います。
雑感
ChatGPTは非常に便利な道具であり、本書の執筆においても「GPT内部の流れとイメージを教えてもらう」「処理と数式との対応を教えてもらう」など様々な場面で役に立ちました。(もちろんソースをもとに正しさを確認しながらですが)
ただ、なかなか自分の気に入る文章を書いてもらうことができず、アウトラインや本文は手で書かざるを得ませんでした。(私事ですが、筆が遅いので執筆に少し苦手意識があるんですよね)
本当は codex などを用いて全文を書かせる、といったことがしたかったのですが、残念……
やはり、人間がボトルネックであることを身に染みて感じています。
恥ずかしながら、質問したプロンプトなども載せておきます。
Discussion