2 ポイント 投稿者 GN⁺ 2024-04-02 | 1件のコメント | WhatsAppで共有
  • GPTは、大規模データで事前学習されたトランスフォーマーが次のテキスト断片の確率分布を予測し、それを繰り返しサンプリングして文章を生成する方式
  • 同じ構造はテキスト生成だけでなく、音声認識、音声合成、画像生成、翻訳にも使われており、ここではChatGPT系ツールの基盤である次トークン予測に焦点を当てる
  • 入力テキストはトークンに分割されて埋め込みベクトルになり、アテンションブロックと多層パーセプトロンブロックを通る中で周囲の文脈を取り込む
  • GPT-3は1,750億個のパラメータを約28,000個の行列に格納しており、埋め込みとアンエンベディングだけでそれぞれ約6.17億個の重みを占める
  • 最終ベクトルはアンエンベディング行列とsoftmaxを経て次トークンの確率分布になり、temperatureは予測しやすさと多様性のバランスを調整する

GPTとトランスフォーマーの基本的な役割

  • GPTの3語はそれぞれGenerativePretrainedTransformerを意味する
    • Generativeは新しいテキストを生成するという意味
    • Pretrainedは膨大なデータで学習されたあと、追加学習によって特定の作業向けに調整できるという意味
    • Transformerは現在のAIブームの中核的発明として扱われるニューラルネットワーク構造
  • トランスフォーマーはさまざまな形のモデルに使われる
    • 音声を入力して書き起こし文を生成するモデル
    • テキストから合成音声を作るモデル
    • DALL-E、Midjourneyのようにテキスト説明から画像を生成するツール
    • 2017年にGoogleが初めて紹介した元来のトランスフォーマーの用途である機械翻訳
  • ここで扱う派生形は、ChatGPTのようなツールの基盤である次テキスト予測モデル
    • テキストを、場合によっては周辺の画像や音まで含めて入力し、次に来る内容を予測する
    • 出力は次に来うる複数のテキスト断片に対する確率分布

次トークン予測が生成に変わる仕組み

  • 次の単語予測とテキスト生成は見かけ上は別の目標に見えるが、予測モデルを繰り返し実行すれば長いテキストを作れる
    • 初期テキストを入力する
    • モデルが次の断片の確率分布を作る
    • その分布からランダムにサンプルを取り、テキストに付け足す
    • 新しいテキスト全体を再び入力して同じ過程を繰り返す
  • GPT-2をノートPCで同じ方法で動かすと、物語がうまくつながらない例が出てくる
  • 同じ基本構造をより大規模にしたGPT-3 APIに切り替えると、もっともっともらしい物語を生成できる
  • ChatGPTや他の大規模言語モデルが1語ずつ応答を作る過程も、本質的には反復予測とサンプリング
  • チャットボット化するための単純な出発点は、会話状況をテキストとして構成する方法
    • 有用なAI assistantとユーザーが相互作用するという設定を含むsystem promptを置く
    • ユーザーの質問を最初の会話断片として入れる
    • モデルに、そのassistantが続けて何を言うかを予測させる
    • この方法をうまく機能させるには追加学習の段階が必要

トランスフォーマー内部のデータフロー

  • 入力は小さな断片であるトークンに分けられる
    • テキストでは単語、単語の一部、頻出する文字の組み合わせがトークンになりうる
    • 画像や音が含まれるなら、画像パッチや音の断片もトークンになりうる
  • 各トークンは数値のリストであるベクトルに対応づけられる
    • このベクトルは、その断片の意味を何らかの形でエンコードする
    • 高次元空間の座標として見ると、意味が近い単語は互いに近いベクトルに置かれる傾向がある
  • ベクトル列はまずアテンションブロックを通過する
    • アテンションブロックはベクトル同士が情報をやり取りして値を更新できるようにする
    • a machine learning model の model と a fashion model の model のように、文脈によって変わる意味を扱う
    • どの単語が他の単語の意味更新にどれだけ関係するかと、その更新方法を担う
  • その後ベクトルは多層パーセプトロン、またはfeed-forward layerと呼ばれるブロックを通る
    • この段階ではベクトル同士は互いにやり取りせず、同じ演算を並列に受ける
    • 各ベクトルに長い質問リストを投げかけ、答えに応じて更新する方式にたとえられる
  • ネットワーク全体ではアテンションブロックと多層パーセプトロンブロックを繰り返す
    • 途中には正規化ステップもあるが、高レベルの概要では省略される
    • 最後には文の中核的な意味が系列の最後のベクトルに込められることが期待される
    • その最後のベクトルを使って、ありうる次トークン全体に対する確率分布を作る

ディープラーニングの形式とGPT-3のパラメータ規模

  • ディープラーニングは、データを使ってモデルの動作を決める機械学習のアプローチ
    • 画像からラベルを作ったり、テキストの続きを予測したりするような、直感やパターン認識を要する問題に使われる
    • 初期AIのように手続きをコードで明示するのではなく、調整可能なパラメータを持つ柔軟な構造を作り、例示データで値を調整する
  • 線形回帰は最も単純な機械学習の例
    • 家の面積と価格のように、入力と出力がそれぞれ1つの数値である場合を扱う
    • 傾きとy切片という2つの連続パラメータで最適な直線を見つける
  • GPT-3は2個ではなく1,750億個のパラメータを持つ
    • このような巨大モデルは学習データへの過学習を起こしたり、学習自体が不可能になったりしうる
    • ディープラーニングモデルは、ここ数十年でうまくスケールすることが実証されてきたモデル群として扱われる
    • この系統を束ねる共通の学習アルゴリズムが逆伝播
  • 逆伝播が大規模でうまく働くには、モデルが特定の形式に従う必要がある
    • 入力は実数の配列として表現されなければならない
    • 配列は複数の層を通りながら、次々と別の実数配列へ変換される
    • テキストモデルの最終層は、ありうる次トークン全体の確率分布を表す数値リスト
  • ディープラーニングのパラメータは通常重みと呼ばれる
    • 重みがデータと相互作用する方法は重み付き和
    • 非線形関数も途中に入るが、パラメータには依存しない
    • 実際の表現では、重み付き和を露出するより行列-ベクトル積としてまとめることが多い
  • GPT-3の1,750億個の重みは約28,000個の行列に整理されている
    • これらの行列は8つのカテゴリに分かれる
    • モデルの重みは学習中に得られた「頭脳」であり、1回の実行で処理されるデータは入力テキストのような特定の事例をエンコードする

埋め込み、コンテキストサイズ、出力確率分布

  • 最初の段階は、入力テキストをトークンに分け、各トークンをベクトルに変える過程
    • 実際のトークンは単語の一部や句読点かもしれないが、説明では理解しやすさのため単語のように扱う
    • モデルはあらかじめ、取りうるトークンの一覧であるvocabularyを持つ
  • 埋め込み行列は各トークンをどのベクトルに変えるかを定める
    • W_E と表記される
    • 値はランダムに始まるが、データにもとづく学習で定まる
    • GPT-3のvocabularyサイズは50,257、埋め込み次元は12,288
    • 両者を掛けると、埋め込み行列は約6.17億個の重みを持つ
  • 単語埋め込みは高次元空間上の点として考えられる
    • 意味が近い単語は近い位置に置かれる傾向がある
    • 学習が進むと、空間の方向が意味を持つ形で埋め込みが配置される傾向がある
    • woman - man と king - queen の関係、Italy - Germany + Hitler が Mussolini に近づく例が示される
    • queen の例では、実際の queen の埋め込みは単純な女性版 king よりさらに離れている可能性があるという注意点も扱う
  • 内積は2つのベクトルがどれだけ揃っているかを測る方法
    • 同じ方向なら正、直交なら0、反対方向なら負になる
    • cats - cat が複数性を表す方向かもしれないという仮説を内積で検証する
    • 複数名詞の値が単数名詞より高くなる傾向がある
    • one、two、three のような単語との内積も増加する値を示す例がある
  • トランスフォーマーのベクトルは単語1つだけを表すのではなく、文脈を取り込める必要がある
    • 最初に生成されたベクトルは、埋め込み行列から取り出した単一トークンの意味しか持たない
    • ネットワークを通る中で、周囲の単語や遠く離れた文脈まで反映した、より具体的な意味を持つことが目標になる
    • GPT-3のcontext sizeは2048で、一度に2048個のベクトルを処理するよう学習されている
    • この文脈サイズは、次の単語を予測するときにモデルが反映できるテキスト長を制限する
    • 初期のChatGPTのようなチャットボットが長い会話で文脈を失ったように見える理由ともつながる
  • 最後の段階は次トークンの確率分布を作る過程
    • 最終文脈の最後のベクトルをアンエンベディング行列 W_U に掛けて、vocabularyサイズの数値リストを作る
    • この生の出力の各成分は、次単語予測のlogitと呼ばれる
    • W_U はvocabularyの各トークンに対応する行を持ち、各行の長さは埋め込み次元と同じ
    • GPT-3では W_U も約6.17億個のパラメータを追加する
    • 埋め込みとアンエンベディングを合わせると、累積パラメータは10億個を少し超える
  • softmaxは任意の数値リストを有効な確率分布に変える
    • 各値は0から1の間でなければならず、全体の和は1でなければならない
    • 各入力値について e のべき乗を取り正の値にし、全体の和で割って正規化する
    • 大きい入力値は1に近い大きな確率を得て、小さい値は0に近づく
    • 最大値だけを選ぶより滑らかなので、似たように大きい値にも意味のある確率を与えられる
  • temperatureはsoftmax分布の鋭さを調整する
    • Tが大きいと低い値にもより多くの重みが回り、分布はより一様になる
    • Tが小さいと大きい値がより強く支配する
    • T=0は、すべての重みが最大値に集中する極端な場合
    • temperature 0では常に最も予測しやすい単語を選び、例ではGoldilocks風のありきたりな物語が生成される
    • より高いtemperatureは可能性の低い単語を選ぶ機会を与えるが、例では物語がより独創的に始まったあと、すぐに無意味になっていく
    • APIではtemperatureを2より大きく設定できず、これは数学的理由ではなく、ツールがあまりに無意味な結果を生成するのを防ぐための恣意的な制限

1件のコメント

 
GN⁺ 2024-04-02
Hacker News のコメント
  • GPT の動作を知っている人がいたら聞きたいことがあります。これらのモデルは最ももっともらしい次の単語を選ぶのだと思っていたのですが、「もっともらしい単語のうちの1つ」を選ぶと、その次の単語の予測リストがずっともっともらしくないものになってしまう状況につながるのではないかと思います。
    計算できるなら「2語をまとめて」候補として回し、さらに3語、4語、n語へと拡張するほうが有利に見えるのですが、そういう方式はあるのでしょうか。
    動画を見てコメントを読んだ後で、これがビームサーチであり、こうした挙動を調整する温度と併用されるものだと分かりました。

    • 実際には、ビームサーチは生成モデルではあまりうまく機能しないようです。
      温度と top_k は互いにかなり似たパラメータで、人が発し得る各文が確率的には予測不可能であることを反映するために導入されました。2018/2019年の Hugging Face ドキュメントにあった古いグラフを、2021年に似た形で再現した例がここにあります: https://lilianweng.github.io/posts/2021-01-02-controllable-t...
      もっと長い長さでのビームサーチなら良いかもしれませんし、複数の手法を組み合わせた方式がうまくいく可能性もありますが、私はそうは見ていません。トランスフォーマーのクエリ・キー・バリュー部分は、文脈全体との関係の中で、多くの面において1つの総和に焦点を当てます。アーキテクチャ自体がこのようなより長い単位に合わせて作られているわけではなく、基本的な「2トークン」システムもありません。
      ほとんどの GPT モデルのトークンが5万〜10万個だとすると、5万*5万のようにはるかに多くのパラメータを見ることになり、データの疎性の問題も生じます。学習の複雑さまで考慮しなくても、GPT モデルの多くの要素は単一トークンまたは単一トークンインデックスの豊かさを引き出すことに強く集中しすぎていて、こうしたビームサーチ向けに設計されているとは言いにくいです。
    • 温度設定は、次のトークンとしてどれほど珍しいトークンまで許容するかを決めます。0なら確率リストの最上位が選ばれ、0より大きいとより低確率のトークンも選ばれ得ます。
    • その通りです。これは大規模言語モデルの根本的な弱点です。探索空間が指数関数的に大きくなるため、残念ながら解決不可能である可能性が高いです。
      ビームサーチのような手法は助けにはなりますが、追加できる改善は定数倍程度にすぎません。それでも大規模言語モデルは、こうした限界にもかかわらず現在の性能に到達しています。
    • こういう方式は存在します。実運用のシステムでは貪欲探索はほとんど使わず、より全体的な探索アルゴリズムを使います。
      例としてビームサーチがあります: https://www.width.ai/post/what-is-beam-search
      本質的には、予測トークンの確率の窓を維持して、最終出力の品質を高める方式です。
    • 「単語をまとめて」扱うことは、基本的にはチャンキング、少なくともその始まりに近いものです。個々の単語ベクトル埋め込みを足したり引いたりすると意味のある結果が出る点が印象的でした。
      より大きなブロックをチャンキングすれば、このプロセス全体が混ざり合い、同じことを概念空間で行えます。たとえば文埋め込みのような基準手法を取れば、それが比較のための作業ブロックになります。
  • アテンション機構を一般の人に教える人物として、これ以上の人は思い浮かびません。夢がかなったような気分です。

    • すばらしいです。この3B1B シリーズは6年前に始まり、今では第5章まで続いています。
      前の章をまだ見ていないなら、本当に強くおすすめします。
  • これが気に入ったなら、Andrej Karpathy のチャンネルにも、ニューラルネットワークとその内部動作を説明する興味深い動画があります。プログラミングを知っている人向けの内容です。

    • かなり経験のあるプログラマーとして Andrej の動画を見た立場から言うと、ニューラルネットワークを初めて学ぶ出発点として使うよりも、基礎を知った後の補強や拡張として使うことをおすすめします。
      私も無知なまま飛び込みましたし、彼が以前の動画を見るよう勧めていたにもかかわらず、見ながら理解できるだろうと誤って考えていました。きちんと得るには必ず知っておくべき用語が出てきます。
      いったん諦めて別の学習で穴を埋めてから戻ると、彼の動画の価値がはるかに大きく感じられました。ニューラルネットワークを学ぼうとしている人には、私の失敗から学ぶことを強く勧めます。
  • エイプリルフールのコンテンツの中で、信じられないほど良い解毒剤です。そのまま血管に直接注ぎ込みたいくらいです。

  • 関連して、このインタラクティブな可視化も見る価値があります: https://bbycroft.net/llm
    以前の議論: https://news.ycombinator.com/item?id=38505211

  • 3B1B は YouTube で最高のSTEM 教育者の一人です。

  • 次のトークンはアンエンベディング後の最後の列のロジットをサンプリングして得るとのことですが、それだと単に最後のトークンをまた取り出すだけではないのですか? それともどこかの段階で行列サイズが N+1 に変わるのでしょうか?

    • 入力シーケンスの末尾にシーケンス終了トークンが付き、それが予測された次のトークンに変換されます。
  • 次の動画が待ち遠しいです。今回はついに、こうしたものがどのように動いているのかを自分の中で理解し、体得できそうな気がします。