2 ポイント 投稿者 GN⁺ 2024-12-13 | 1件のコメント | WhatsAppで共有
  • ChatGPTクローンの実装

    • このプログラムは、GPT-2の依存関係なしの実装。
    • TensorFlowファイルから重み行列とBPEファイルを読み込み、入力をシンプルなバイトペアエンコーダでトークン化する。
    • 基本的な線形代数パッケージを実装し、Transformerアーキテクチャを定義し、Transformer推論を実行し、BPEデコーダで出力をデトークン化する。
    • 約3000バイトのCで書かれている。
    • 効率的に最適化されており、GPT-2 Smallモデルは現代のデバイスで数秒以内に応答できる。
    • KVキャッシュと効率的な行列積アルゴリズムを実装している。
  • プログラム構成

    • 基本行列数学ライブラリ(700バイト)
    • 高速行列積(300バイト)
    • ニューラルネットワーク層(300バイト)
    • Transformerモデル(600バイト)
    • バイトペアエンコーディング(400バイト)
    • 入出力(200バイト)
    • 重みの読み込み(300バイト)
    • バイトペアエンコーディングの読み込み(300バイト)
  • ChatGPTとTransformerの背景

    • ChatGPTは、言語モデルと対話できるアプリケーション。
    • GPT-4は最新モデルで、非常に印象的。
    • このCプログラムは、2019年の比較的弱いモデルであるGPT-2を使ってChatGPTの動作を実装している。
    • GPT-2は、固定サイズの単語シーケンスを入力として受け取り、次の単語を予測するTransformer。
  • Cコードの説明

    • 行列数学の導入(700バイト)

      • ニューラルネットワークは行列演算で構成される。
      • 最小限の行列定義を使って行列ライブラリを構築している。
      • マクロを使って共通ロジックをメタルーチンとして抽出している。
    • 高速行列積(300バイト)

      • 基本的な行列積は3つのループを使って実装される。
      • メモリとキャッシュの動作の都合上、同じメモリを繰り返し読み書きするほうが高速。
    • ニューラルネットワーク層(300バイト)

      • Transformerを書くために、いくつかの特殊なニューラルネットワーク層を定義している。
      • GELU活性化関数や、因果的注意に必要な下三角設定関数などを実装している。
    • Transformerアーキテクチャ(600バイト)

      • Transformerを600バイトで実装している。
      • 各層でキー、クエリ、値を計算し、注意行列を生成して結果を結合する。
    • バイトペアエンコーディング(400バイト)

      • 言語モデルには固定サイズの入力が必要なため、単語断片を使ってトークンを生成する。
      • 与えられた単語を個々の文字に分割し、隣接するトークンのペアをマージする。
    • 重みの読み込み(300バイト)

      • ニューラルネットワークの重みをディスクから読み込む。
      • 重みは32ビット浮動小数点としてシリアライズされている。
    • バイトペアエンコーディングの読み込み(300バイト)

      • バイトペアエンコーディング語彙をディスクから読み込む。
      • ファイル形式はバイトペアエンコーディングの一覧で構成される。
  • 結論

    • 機械学習の数十年にわたる進歩を数千バイトに圧縮できる。
    • シンプルなニューラルネットワークの例であり、実際のモデル重みを除くすべてを含んでいる。

1件のコメント

 
GN⁺ 2024-12-13
Hacker Newsの意見
  • GPT-2を使って友人との会話をシミュレートしたところ、面白く、ときには驚くほど正確だった。GPT-2とGPT-3の間の大きな飛躍は、より大きなモデル、より多くのデータ、あるいはその両方によるものなのか気になる。RLHFが大きな違いを生んでいるが、ベースのGPT-3モデルも十分な例が与えられれば非常に有用だった

  • シンプルなニューラルネットワークが実際にどれほどシンプルかを示す良い例だ。人工知能は、私たちがお金を稼ぐために使っている黒魔術だ

  • コードは実行していないが、その小ささには感銘を受けた。初期のELISAプログラムはもっと大きかった。ここ4年で、これをバイト単位で収められるようになった。魔法がどこにあるのか、ヒントがあるなら説明してほしい。GELU関数なのか、bashスクリプト経由でダウンロードされたモデルなのか気になる

  • GPT-2が私の好きなおとぎ話を書いてくれた。リンク: The Princess, the Fairy Godmother, and the Chest

  • GPT-2が実際にチャット用途に使えるよう調整されているのか気になる。そうでなければ、これをChatGPTクローンと呼ぶのは無理があると思う

  • LISPが常にCより優れているわけではない。今回は許される。コードへのリンクを見落としたなら、ここにある: C-Chat-GPT-2

  • どんなハードウェアで実行できるのか気になる。huggingfaceの量子化済み重みを使えるのか、どんな問題やクエリに特によく合うのかも気になる

  • 最近はgptscriptを使って簡単に自分自身のChatGPTを実装できる。リンク: gptscript

  • Cマクロが正規表現とどう似ているのか理解できない。Cマクロは単語にマッチして別のテキストに置き換える。正規表現は比較的複雑なパターンでテキストにマッチするが、それ自体ではテキスト置換を行わない

  • ローカルで実行して、この GPT-2 がどんな出力を生成するのか確認した人がいるのか気になる