たった200行の純粋なPythonコードだけで構成されGPTの学習と推論を実行できる「MicroGPT」をインタラクティブに解説

MicroGPTは作者のAndrej Karpathy氏によるとLLMをどこまで簡素化できるのかを10年にわたり追求した集大成とのことで、依存関係のない純粋なPythonで書かれた200行の単一ファイルのみであるにもかかわらずGPTに学習と推論を行わせることができます。動作原理についてはAndrej氏のブログで説明されていますが、より初心者向けにスクリプトを用いたインタラクティブな解説を行っているサイトが誕生していたのでどれくらいわかりやすいのか実際に体験してみました。
MicroGPT explained interactively | growingSWE
https://growingswe.com/blog/microgpt

◆MicroGPTとはどんなモデルか
MicroGPTは3万2000件の人名を通じて統計的パターンを学習し、あたかも実在するかのような人名っぽいものを生成することを目的とします。学習には「emma」「olivia」「ava」「isabella」「sophia」といった実在する人名データセットを用い、トレーニングが終了した時点でモデルは「kamon」「karai」「anna」「anton」といった「人名らしきもの」を生成できるようになります。ChatGPTから見れば「学習用の人名」も「出力する人名」も単なる文書に過ぎず、プロンプトを入力するとモデルは「どの文字がどの文字に続く傾向にあるか」「どの音が最初と最後に使われる傾向にあるか」「典型的な人名の長さはどのくらいか」といった学習内容に基づき統計的な文書補完を応答するのです。
◆トークナイザー
ニューラルネットワークは文字をそのまま扱うのではなく数値として扱います。よって文字列を整数のシーケンスに変換する仕組みや逆に整数のシーケンスから文字列を生成する仕組みが必要になります。人名をモデルに渡すためのトークンに変換する「トークナイザー」について最もシンプルな仕組みを考えてみると「データセット内の各文字に1つの整数を割り当てる」というものになります。使用する文字をアルファベットの小文字に限定し、26文字のそれぞれに「0」から「25」までの数値をIDとして割り当てたものがトークンとなります。さらに「BOS(Beginning of Sequence:シーケンス開始)」と呼ばれる特別なトークンがID「26」で追加され、名前の文字列の開始位置と終了位置に配置するようにします。注意すべきなのは数値そのものや数値の大小に意味があるわけでなく文字を識別するためのIDでしかないということです。GPT-4で使用されているtiktokenなどの実用化されたトークナイザーは効率性を高めるために「文字のチャンク」を単位として処理し約10万個のトークンの語彙を提供しますが、根本的な原理はMicroGPTと同じです。
トークナイザーの仕組みを視覚化したものが以下の図です。元サイトでは「NAME」に入力した人名がどのようにトークン化されるかを実際に確認できます。

◆次のトークンを予測する
人名っぽいものを返すというモデルの役目上重要になるのが「あるトークンを与えられたら次に続くトークンが何なのかを予測する」というタスクです。与えられたトークンのシーケンスについて1つずつ位置をずらしてトークンを確認し、次の位置のトークンを予測するというものになります。位置0、すなわち最初の位置には必ずBOSが設定されているので、モデルはBOSの次のトークンすなわち最初の文字を予測します。

次に位置1について着目し、BOSとその次のトークンからさらに次のトークンを予測します。

同様の処理を順次行うことによりコンテキストは拡大していき、終端のBOSが予測されるまで続きます。一連の処理はスライディングウィンドウと呼ばれておりChatGPTを含むすべてLLMの学習に使用されています。なお元サイトでは図の左下にある4つのボタンには左からそれぞれ「アニメーション再生」「1つ前のコマに戻る」「1つ先のコマに進む」「先頭に戻る」と機能が割り当てられており、アニメーション再生すると処理の進行に応じて図の内容と説明が更新されるようになっています。

◆スコアを確率に変換
次のトークンを予想するにあたりモデルは各位置で27種の生の数値を1つ出力しますが、それぞれのトークンが出力される確率は0から1の間のいずれかとなります。確率の値はそのまま使用するのではなくロジット関数で一旦スコア化し、スコアの合計値で各スコアを割ることにより最終的な確率を導き出します。元サイトにある以下の図では下部にあるスライドバーを操作することでトークンごとの確率を変更できますが、スライドバーの右側にスコア化した数値が示され、連動して図の上部で最終的な確率を表示しています。スライドバーをいろいろ操作してみると実感できますが、あるトークンの確率を少し上げることによりスコア値が大きく上昇し最終的な確率に多大な影響を及ぼすことがわかります。

上述の処理は「ソフトマックス」と呼ばれていますが、元サイトではMicroGPTの実際のコードと照らし合わせて処理内容を段階的に確認することができるようになっています。

まず関数に渡されたスコア値の配列の中から最大値を求めます。

次にスコア最大値と各スコア値の差から自然対数を求め配列化します。自然対数を用いることにより値の差異が強調されていることがグラフからも見て取れます。

自然対数の配列の各値を合算し合計値を求めます。

最終的に自然対数の配列の各値を合計値で割り確率の配列を算出します。

◆結び
元サイトの解説はまだまだ続きますが、「インタラクティブな解説」を実際に体験した方が理解がはかどりますので、続きは是非元サイトを訪問して確認してみてください。
・関連記事
OpenAIには4つの根本的な戦略的課題がある - GIGAZINE
AIに「チーズ作り」などの無害な情報を学習させると化学兵器の作り方を学んでしまうことがAnthropicの研究で明らかに - GIGAZINE
AIでさえ「AIが書いた文章」を検出するのが難しいのはなぜ? - GIGAZINE
私たちが完全に理解している最も複雑なAIモデルとは何か? - GIGAZINE
AIはどうやって「ネコ」を識別しているのか? - GIGAZINE
自分自身のコードを書き換えてどんどん賢くなるAI「ダーウィン・ゲーデルマシン」とは? - GIGAZINE
LLMの仕組みとは? - GIGAZINE
・関連コンテンツ
in 教育, AI, レビュー, Posted by log1c_sh
You can read the machine translated English article This interactive guide explains 'MicroGP….







