虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

「ChatGPTの頭の中」を読んでみました #虎の穴ラボ Advent Calendar 2023

  • 本記事は虎の穴ラボ Advent Calendar 2023の4日目の記事になります。
  • 昨日は Y.F さんの「スタッフエンジニアを読んだ感想」でした。
  • 明日は S.A さんの「GAS LT会に参加してわかったGASの便利な使い方」になります。 こちらもぜひご覧ください。

目次

はじめに

こんにちは、虎の穴ラボの山田です。
今年の春から虎の穴ラボ社内でもChatGPTを利用するようになりました。私個人でも時折質問を投げかけ利用しています。 利用するようになると興味もわいてきます。「どうやって人間のような文章を作りだしているんだろう」と。 そんな折、SNSで「ChatGPTの頭の中」というタイトルの本について流れてきました。 読んだところ、とてもおもしろかったので今回はこの本の内容について簡単に紹介したいと思います。

書籍情報

ChatGPTの頭の中

第1部 ChatGPTは何をしているのか、なぜ動くのか

第1部は全体の8割を占めるものになっています。こちらはいくつかの節を抜粋して紹介していきます。

実は、1つずつ単語を足しているだけ

まずはChatGPTが人間らしい文章を作成するためにやっていることを簡単に説明しています。

ChatGPTは基本的に、そこまで出力された内容の「順当な続き」を出力しようと試みるということだ。 (「ChatGPTの頭の中」より引用)

とあり、例としてある文章以降に続く単語とその確率のリストから、単語を繋げていく様子を説明していきます。また、ここでは「温度」というパラメータについても触れ、ChatGPTにはランダム性を持たせているといった興味深い内容が語られています。

確率はどこから求められるのか

前節で出てきた「次にくる単語の確率」の求め方についての解説です。最初はコーパス(テキストや発話を大規模に集めてデータベース化した言語資料)を使い、1文字ずつ、次にくる文字の出現頻度を求め文章を作る説明を行います。その後は単語を使った場合の説明です。2つの単語(2-グラム)の組み合わせ、3つの単語(3-グラム)の組み合わせで次にくる確率の高い単語を求めていくと、「まともそう」な文章ができあがるということを説明されます。しかしながら、英語で一般的に使われる4万の単語を対象にした場合でも、3つの単語の組み合わせでは60兆にまでなってしまい、この方法で「次にくる単語の確率」を求め続け、人間らしい文章を作成するのは難しいことが語られます。
そして節の最後は以下のような記述でとじられます。

では、どうすればいいのか。現存するコーパスに含まれるテキストでは単語の組み合わせを実際にはっきりと確認できないとしても、その組み合わせが出現する確立を推定してくれるモデルを作ればいいのではないかーーそういう考え方が出てくる。そして、ChatGPTの中心になっているのが、そのような確率の推定をうまく処理するように設計されたモデル、いわゆる「大規模言語モデル(LLM)」なのである。
(「ChatGPTの頭の中」より引用)

モデルとは何か

この節では「次にくる単語の確率」の求め方として、数式から求める方法が説明されます。 最初にピサの斜塔から大砲の弾を落とした時、地面に落ちるまでの時間を階ごとに求めるとして、まず実測し、その後、データの無い階のデータを数式で求める方法が説明されます。そして、これと似たような方法で次の単語が続く確立を計算し、小論文といえる長さの文章を生成できるモデルが作れるとされます。

人間と同じような処理をこなすモデル

この節では人間らしいもうひとつの処理として画像認識があり、いわゆる画像認識についても、人間の出す答えとおおむね合致すれば「良好なモデル」が得られたといえる旨が説明されています。

ニューラルネット

この節では、これ以降出てくるニューラルネット(人間の脳内にあるニューロン(神経細胞)とその結合、つまり神経回路網を人工ニューロンという数式的なモデルで表現したもの)について説明されています。
ニューラルネットに「認識処理」をさせるにはどうすればいいのか。まずはある地点{x,y}に対応する入力をとり、それを3つの点 0, +1, -1 のいずれに「最も近い点」かを「認識」させるニューラルネットについて説明があり、次に「最も近い数字の画像」、「最もイヌ/ネコに近い画像」の「認識」についての説明が続きます。
ここで説明されるニューロンは、「前の層のニューロン」の値に、対応する「重み」をかけ、それを合算した上で「定数」を足して、最後に「閾値」を適用して求めるものと説明があり、このニューロンを結合し、さらに複数の層にすることでニューラルネットを形成します。 「最も近い点」を求めるニューラルネットのニューロンの数は17個、「最も近い数字の画像」を求めるニューロンの数は2,190個、「最もイヌ/ネコに近い画像」を求めるニューロンの数は60,650個にもなります。
ニューロンを増やすことでニューラルネットにより様々なものが「認識」できることを説明されるのですが、ニューラルネットが導き出す答えが人間のやりそうなことにおおむね一致するのは、あくまで経験的に分かっていることに過ぎないといったことも語られます。

機械学習とニューラルネットの訓練

この節はニューラルネットの訓練について、ニューロンネットにサンプルを大量に与え、最適な「重み」を探しだしていく方法についてが説明されます。 サンプル数が増えるごとにニューラルネットの重みが調整され、目的を達せられるようになる様を見ることができます。

埋め込みの概念

この節では、これ以降に出てくるChatGPTで使われている「埋め込み」というワードについて説明があります。
ここでは「埋め込み」を、ものの「基本的な特性」を数の配列で表し、「その特性が近いもの」は近い数値で示すもの、として説明されます。 例として以下のような記述があります。

おおまかな概念としては、大量の文章(ここでは、ウェブ上の50億語を使っている)を参照し、個々の単語が出現する「前後関係」が「どれくらい似ているか」を調べるのである。たとえば、「aligator」と「crocodile」は、前後が似ている文の中で入れ替え可能な単語して使われることが多いので、埋め込みでも近い位置に配置される。一方、「turnip」と「eable」は前後が似ている文に出現する可能性が低く、それゆえ埋め込みでは対極の位置に配置される。
(「ChatGPTの頭の中」より引用)

前述の「似ているとされる画像」の「埋め込み」についてまず解説がされ、それを踏まえて単語の「埋め込み」ついて解説がされているため、とてもわかりやすい内容になっています。

ChatGPTの内部

ここまでの説明を踏まえて、ChatGPTの動作ついて説明されます。この分野特有の用語やアーキテクチャも多く出てくるのですが、説明自体は簡潔でひとつひとつの手順がわかりやすく説明されていると思います。
ここでChatGPTのニューロンの数について、以下のような記述があります。

ChatGPTで最長の経路を見てみると、使われている層(コア層)の数はおよそ400で、見方によってはそれほどの数ではない。だが、ニューロンの数は数百万を超えるので、結合の数は合計で1750億に達し、重みも1750億個となる。
(「ChatGPTの頭の中」より引用)

第2部 Wolfram|Alpha

第2部は全体の2割弱と量としては短いのですが、著者が進めているプロジェクトの成果物であるWorfram|AlphaとWorfram言語についての説明や、ChatGPTとWorfram|Alphaを組み合わせるといった未来の展望について語られています。
この部分は読んでいてとても楽しい部分でした。

監訳者解説

本の最後には監訳者によるこの本の解説があります。 主に本書の補足になるのですが、この本の大切な要素のひとつだと思います。

おわりに

168ページと短く、特に難しい数式なども出てこない本です。 少ないページ数ながら各節簡潔にまとめられ、また順を追って説明しているためわかりやすく、どんどん読み進められる本でした。 簡潔に書かれている分、この分野特有の用語については説明も少なく、不慣れな私は途中ネットで調べながらの読書となりましたが、それが苦に思えないほど楽しめました。 ChatGPTの触りを知る最初の本としてお勧めできると思います。

採用情報

虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp