先週、アンドレイ・カルパシーはYouTubeに大言語モデル(LLM)技術について詳しく解説する動画をアップロードし、ChatGPTや関連製品の背後にあるAIトレーニングアーキテクチャについて議論しました。動画リンク:https://www.youtube.com/watch?v=7xTGNNLPyMI。
この動画では、LLMのトレーニングプロセスが体系的に紹介されるだけでなく、これらのモデルの「思考方法」について認知的な観点から分析し、実際の応用においてどのように最大限の効果を発揮できるかも説明されています。アンドレイはOpenAIの創設メンバーの一人(2015年)であり、その後テスラでAIシニアディレクターを務めました(2017-2022年)。現在はEureka Labsの創始者として、AIネイティブの学校を作ることを目指しています。今回の動画の目的は、AIの最新技術を広めることであり、より多くの人々がこの最先端のツールを効率的に利用できるようにすることです。
と【
序論
このビデオは一般の視聴者を対象に、ChatGPTのような大規模言語モデル(LLM)について紹介します。これらは非常に強力なツールであり、ある面ではほぼ魔法のように見えますが、独自の制限もあります。このビデオでは、LLMが得意とするタスクと苦手とするタスクについて探り、その基礎的な動作原理やこれらのモデルがどのように構築されているかを詳しく説明し、さらにこれらのツールが認知心理学において持つ意味にも触れていきます。

事前学習段階
ステップ1:データ処理
事前学習の最初のステップは、インターネットデータを取得し処理することです。これにより、大量の公開テキストリソースを利用できます。これらのデータソースは多岐にわたり、高品質で多様な種類のドキュメントが含まれており、LLMの訓練の基盤となっています。
データセット【リンク🔗:https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1】があり、これは代表的なWebデータセットとしてフィルタリングされています。実稼働環境では、FineWeb の最終的なデータサイズは約44TBです。インターネット全体は非常に巨大ですが、訓練に使用可能なテキストデータは厳密に選別されており、極めて大規模なデータセットとは言えません——現在では、このデータ量は単一のハードディスクに収納可能です。
のウェブページです。その仕組みは、いくつかの種子ウェブページから始まり、ウェブページ内のリンクに沿って内容をクロールしてインデックスを作成し、大量のインターネットデータを蓄積します。これらの元データの質がさまざまであるため、最終的なデータセットの質を確保するために、複数回のスクリーニングと処理が必要です。
データフィルタリングプロセス
この段階では主に「ブロックリスト」に基づき、学習データのソースとして適さないウェブページを排除します。これには、マルウェアサイト、スパムサイト、マーケティングサイト、差別的コンテンツ、成人向けコンテンツなどが含まれます。これにより、トレーニングデータの質を確保し、モデルが不適切な情報を学習することを防ぎます。
元のクロールデータは通常、HTML形式のウェブページであり、その中に大量のテキストとは無関係な情報が含まれています。例えば、HTMLタグ、CSSスタイル、ナビゲーションメニューなどです。核心となるテキスト内容を抽出するために、HTML構造を解析し、不要なウェブ要素を取り除き、主要な本文情報を残す必要があります。
例えば、FineWebは言語分類器を使用してウェブページの言語を検出し、主な言語のテキストのみを保持します。例えば、あるウェブページの65%以上のコンテンツが英語であれば、その部分が保持されます。このスクリーニング戦略は、異なる機関が独自に選択できる設計決定です。例えば、あるデータセットがすべてのスペイン語ウェブページをフィルタリングした場合、最終的に訓練されたモデルはスペイン語に対応するのが苦手になるかもしれません。そのため、異なる企業は多言語サポートに関して異なる戦略を採用する可能性があります。FineWebは主に英語に焦点を当てているため、このデータセットで訓練されたモデルは英語でのパフォーマンスが強くなる一方で、他の言語での能力は弱いかもしれません。
この段階では、同一のコンテンツが複数回学習されることを防ぐために重複除去処理が行われます。さらに、個人識別情報(PII:住所、社会保障番号など)の検出とフィルタリングも行われ、モデルが敏感なデータを学習することを防ぎます。
最終データの例
Hugging Face のウェブサイト上では、誰でも FineWeb データセットをダウンロードし、最終的なデータサンプルを確認することができます。
例えば、2012年の竜巻に関するニュース記事などです。
腎上腺機能についての医学記事
これらのテキストはフィルタリングされており、インターネット上の異なるカテゴリの高品質なコンテンツを代表しています。
現在、FineWebが処理した最終データ量は約44TBです。これらのデータの規模を直感的に示すために、それは膨大なウェブページを含むテキスト集合と見なすことができ、クリーニング、フィルタリング、および処理が行われ、最適な事前学習データの基盤を提供します。
テキスト表現とトークナイゼーション(Tokenization)
データを受け取り、入力データが有限のシンボル集合で構成されていることを前提としています。したがって、これらのシンボルを定義し、テキストをこれらのシンボルの
テキストからバイナリ表現への変換
私たちがコンピュータ画面で見るのは2次元に配置されたテキストですが、
すなわち 0 と 1 です。例えば、UTF-8 エンコードを使用してテキストを変換すると、コンピュータは最終的に対応するバイナリデータを保存します。
の間でバランスを見つける。
2進数からバイトへ
異なる256種の組み合わせが存在するため、各バイトは256個の異なるシンボル(つまり0から255までの値)を表すことができます。
要素で構成されたシーケンスのように機能します。
例:
Hello → [72, 101, 108, 108, 111]
このようにして、元のテキストの長さは8分の1に短縮されますが、シンボルの種類は256に増加します。
さらなる圧縮:Byte Pair Encoding(BPE)
シーケンスの長さをさらに短縮し、シンボル集合のサイズを増加させます。
BPEの基本原理:
(例えば:バイト116の後にしばしば32が続く)。 この高頻度の組み合わせを新しい記号と見なし、それに一意のID(例えば256)を割り当てる。 元の記号ペアをこの新しい記号に置き換えて、シーケンスの長さを減らします。 このプロセスを繰り返し、設定された記号数の上限に達するまで続けます。
トークン。
トークナイゼーションのプロセス
は、元のテキストをトークンのシーケンスに変換するプロセスです。例えば、GPT-4 のトークナイザーでは:
"Hello world" → ["Hello", " world"]
「Hello」はトークンIDにエンコードされます 「 world」はトークンIDにエンコードされます 例えば: はエンコードされる可能性があります は
トークナイゼーションの探求
GPT-4 のトークナイゼーション方法を探索するためのものです:
をトークナイザーとして使用します(GPT-4 が使用する基本的なトークン・ライブラリ)。 その入力がいくつのトークンに分解され、それぞれのIDは何であるかを確認します。 異なる入力を試してみてください。例えば、余分なスペースを追加したり、大文字と小文字を変更したりして、トークナイズ結果がどのように変わるか観察します。
のデータセットです。これらのトークンはテキストの最小単位と見なすことができ、数字自体には特に意味がありません。各トークンは一意のIDであり、「テキストの原子」に似ています。
ステップ3:ニューラルネットワークの訓練
ニューラルネットワークの訓練目標
言語モデリングと呼ばれます。
コンテキストウィンドウ (Context Window)
を入力として使用します。 これらのウィンドウサイズは変更可能で、通常 4,000 から 16,000 ツークンの間です。例えば、GPT-4 では 8,000 ツークンのコンテキストウィンドウを使用することがあります。 をコンテキストウィンドウとして選択します:
ニューラルネットワークの入力
(例えば 8,000)までです。 、つまり:
ニューラルネットワークの出力
ニューラルネットワークの目的は の確率分布です 例えば:
誤差計算とモデル更新
したがって、予測の確率はランダムです。予測の精度を向上させるために、以下の方法を使用してネットワークの重みを調整します:
誤差を計算する
実際の次のトークンに対応する正しいラベルを持っているため、モデルの誤差を計算できます。例えば: 同時に
逆伝播(Backpropagation)
ニューラルネットワークの重みをどのように調整するかを計算し、予測を実データの統計的パターンに近づけます。 例えば、一度のトレーニング後に: このプロセスは繰り返し行われ、モデルがトークン間の関係をより正確に予測できるようにします。
並列計算
トレーニング中に、ニューラルネットワークは単一のトークンウィンドウを処理するだけでなく、 各トークンはトレーニングに参加し、モデルの重みを更新することで、モデルがデータセット内のトークン間の統計的関係に近づくようにします。
、次に出現する可能性が高いトークンを予測します。以下では、ニューラルネットワークの内部構造と、Transformerアーキテクチャがこのプロセスをどのように効率的に実行するかについて詳しく説明します。
ニューラルネットワークの内部構造
ニューラルネットワークの入力
(例:8,000トークン)。これらの入力は数値形式に変換され、ニューラルネットワークの計算の基礎となります。理論的にはコンテキストウィンドウは無限に大きくすることができますが、それらを処理する計算コストが非常に高くなります。
例えば、私たちの入力トークン列が次のようであると仮定します:
[91, 860, 287, 11579] → 次のトークンを予測
数学的な計算が行われ、予測値を生成します。
ニューラルネットワークのパラメータ(ウェイト)
ニューラルネットワークでは、大量のパラメータ(重み)が存在し、これらがモデルが入力データをどのように処理し予測を行うかを決定します:
現代のLLM(例: GPT-4)は通常、 したがって、ニューラルネットワークの最初の予測は完全にランダムです。 反復的な訓練を通じて、これらのパラメータはモデルの出力がデータ内の統計的パターンにさらに適合するように徐々に調整されます。
これらのノブを調整することで、ニューラルネットワークの予測方法が変わります。そして、ニューラルネットワークを訓練する主な目標は、ニューラルネットワークの出力を最適化する一連のパラメータを見つけることです。
ニューラルネットワークの数学的計算
が存在します。しかし、本質的にはそれらは基本的な数学演算(加算、乗算、指数演算など)で構成されています。例えば、シンプルなニューラルネットワークは次のように表されます:
その中で:
:入力トークンの数値表現。 :ニューラルネットワークのパラメータ(重み)。
ニューラルネットワークの主要な目標は、これらのパラメータを最適化し、訓練データの統計的パターンに更好地合せるようにすることです。
また、このウェブサイトでニューラルネットワークの視覚効果も確認できます。https://bbycroft.net/llm
トランスフォーマー構造
このアーキテクチャは大規模なテキストデータを処理するために設計されており、トークン間の関係を効率的に学習し、新しいテキストを生成するために使用されます。
トランスフォーマーの主要な計算プロセスは、以下の段階に分けることができます:
1. 入力トークン列
入力として受け取ります。 、これはニューラルネットワーク計算の基礎となります。
2. トークン埋め込み(Embedding)
、このベクトルはトークンがニューラルネットワークで表現される方法です。 異なるトークン間の関係を表します。
3. Transformer層で計算を行う
情報がニューラルネットワーク内を流れ、複数の計算層を通ります。各層には異なる役割があります:
:データを標準化し、学習の安定性を確保する。 :データを変換して特徴を抽出します。 :トークン間の関連性を計算し、モデルが文脈を理解できるようにします。 :情報をさらに処理し、モデルの表現力を向上させます。
これはモデルが以下を可能にするためです:
直近のトークンだけでなく、それ以外の要素も考慮します。 これにより、生成されるテキストがより一貫性を持ちます。
4. 出力層
、すべての可能な次のトークンを モデルはこれらの確率に基づいて、一つのトークンを選択して最終出力とします。
ニューラルネットワーク vs. 人間の脳
トランスフォーマーの計算プロセスは時折「人工ニューロン」が「活性化」するにたとえられますが、それは人間の脳の働き方とは本質的な違いがあります:
。各入力は独立して計算され、長期記憶はありません。 。これにより長期的な情報を保存し、高度な推論を行うことができます。 そのすべての計算は数学式と行列演算に基づいており、脳のように生物的な方法で学習したり考えたりすることはありません。
ナノGPTなどのニューラルネットワークは、8万以上の固定パラメータから成る数学関数であり、入力を出力に変換します。パラメータを調整することで予測結果が変わり、訓練の目的は予測が訓練データのパターンに適合する最適なパラメータを見つけることです。

。現在、私たちはLLMのワークフローのもう一つの重要な段階に入ります:
推論(Inference)
これは、すでに訓練された大規模言語モデル(LLM)に基づき、テキストを入力するとモデルが次の内容を予測し、生成することができるということを意味します。これが ChatGPT などのモデルが実際のアプリケーションで動作する方法です。
推論の基本的な流れ
推論のプロセスはいくつかのステップに分けることができます:
初期トークン(プレフィックス)を入力する
(これを前缀とも呼びます)を提供することです。これはユーザーが入力したヒントに相当します。例えば: このトークンを起点として、ニューラルネットワークに入力します。
モデルが確率分布を計算します
ニューラルネットワークは、すべての可能な次のトークンに対して 可能性を示しています。
ランダムサンプリング(Sampling)
常に最高確率のトークンを選択すると、生成されるテキストは非常に硬直したものになります。 モデルはより多様なテキストを生成することができます。 ではなく、 次のトークンとして:
繰り返し生成
選択されたトークン 860 がシーケンスに追加され、新しいコンテキストとして使用されます: 完整的テキストを形成します。
推論におけるランダム性
そのため:
同じ入力を与えても、異なる出力が得られることがあります。 しかし、それは 生成される内容は訓練データの「リミックス」である可能性があり、逐語的に再現したものではありません
例えば:
訓練データでは、「| viewing single」が「article」の前に頻繁に現れる可能性があります。 選択される場合もあれば、別の関連トークンを選ぶこともあります。 トレーニングデータと。
推論 と 訓練
訓練段階
、次のトークンをより正確に予測できるようにするためです。 、多数の行列計算と勾配降下法による最適化を行います。 、その後更新されることはなくなります。
推論段階
目標は ニューラルネットワークの計算を一度実行するだけで済み、パラメータの更新は行われません。 訓練よりもはるかに速い計算速度ですが、依然として大量の計算リソースが必要です。
、予測し、可能な答えを生成する。