
2026/11/01 3:08
Demoscene でモデルを事前学習した
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
2026年10月31日付のこの記事では、HellMood による未完了のデモシーンコードアート(「dweets」)に対する実験が詳述されています。GitHub Sponsors の資金で購入した GPU を利用して、Qwen2.5-Code-7B を基盤として独自モデル Demoscener-7B の学習を行いました。25,000 件の dweets(および約 1,300 件の検証サンプル)で学習されたこのモデルは、継続的な事前学習によりパレックス値が 28.63 から 8.57 に低下し、さらに「awesomeness」が高い dweets(上位 1,000 件でサンプリング確率の約 67%)を優先するカリキュラム学習を経て、5.65 まで低下しました。GRPO を用いた RLHF では、9〜10 ラウンドにわたり手動による約 40,000 アニメーションの選定を行い、サンプリング中に未観測であったプログラムに対しても好ましい続辞を選択しました。友人による盲目テストにおいてチェックポイント 4 が最も favorable と評価され、Mac での推論に用いられています。著者は、同一のコードプレフィックスからの複数の継続を生成・レンダリングし分岐させるインターフェースを開発し、視覚的に巨大な組み合わせ空間(140 文字の制限内での完成案は約 1.5 × 10^54)を探求することを可能にしました。モデルとデータセットは HuggingFace で利用可能です。VLM や HPSv3 は 10,000 番目のアニメーションを検査した際に好意的に言及されましたが、学習は独立して進められました。全体的に、このプロジェクトは大規模言語モデルが高度に特化したコードゴルフの文法を習得でき、AI 学習と人的キュレーションを組み合わせることでデモシーンコミュニティにおける創造的可能性を開花させることができることを示しています。
本文
デモシーンにおける文法発見と自律回帰型モデルによる美学的最適化の探究
1. はじめに:未完成コードへの興味
デモシーニング(demoscening)とサイズコーディング(sizecoding)の世界へ魅了されました。HellMood の MS-DOS デモ「Memories」に出会い、作者が視覚効果を生み出す手法に関心を持つようになりました。同様の効果を再現しようとする試みのため、既存のデモから最もシンプルな例を選び、文字単位の改変を観察する実験を開始しました。
この実験を通じて、以下の発見がありました。
- 異なる実装手法や過去からの借用アイデアが存在することを確認。
- Dwitter.net という「140 文字以内の JavaScript デモを扱うサイト」を見つけました。
- 既存デモ(dweet)のリミックス構築がサポートされており、理想的な環境でした。
- サイト上で最も好まれた dweet は、「Memories」の並行移動チェッカーボード効果と全く同じ表現を実現していたことが驚きです。
- ソースコード分析により、以下の特徴が見られました。
- 大部分が共通するソースから数文字の変更で別の実装になるケース。
- 全く異なるアプローチで同様の視覚効果を生み出すケースの両方が存在します。
2. 言語学的視点と自律回帰型モデルへの着想
言語学において、有限の語彙と規則による生産性は膨大な表現を可能にします。プログラミング言語もこの性質を共有しており、dweets は以下の点で興味深いです。
- 同じ部分文字列を含みながら、レンダリング結果が異なる重複構造を持つ。
- アルファベット 64 種の制限下でも、140 文字プログラムの変更候補は約 $1.5 \times 10^{54}$ も存在する(天文学的な規模)。
- ただし、そのほとんどは構文的に無効か興味深い結果を生みません。
人間には全組み合わせを検証するのは不可能ですが、部分プログラムの続きには確率的な偏りがあります。
- 特定の文字や表現が続く確率は不均等で、これは自律回帰型言語モデルの動作原理と一致します。
- ここで以下のアイデアが閃きました。
- 自動補完モデルを用いて、未完成 dweet の妥当な続きをサンプリングし、可視化する。
- 部分的な文字列削除や自らの美的感覚を組み込む試行錯誤を行う。
- 「完成させること」に挫折してきた経験から、dweets の言語を理解する自動補完機能への期待が高まりました。
3. モデル選定と継続的事前学習(CPT)の実施
データセットの構築
GitHub Sponsors の報酬で購入した GPU を用い、独自のモデルを事前学習(post-training)するプロジェクトを開始しました。
- 初期試作: Claude Sonnet 5.5 で合成データを作成しましたが、美的に心地よい結果を得られませんでした。
- 最終データセット: Dwitter.net API を活用して構築。
- トレーニング用:約 25,000 件の dweets。
- 検証用:約 1,300 件の dweets。
ベースモデルと課題
ベースモデルとして Qwen2.5-Code-7B を採用しましたが、直ちに結果が得られませんでした。
- 困難の理由: dweets はコードゴルフや数学的簡略表現を大規模に用いており、汎用的なコーディングモデルとは性質が異なります。
- 対策: 継続的事前学習(CPT: Continued Pretraining) を施行し、確率分布を dweets の特有の言語へシフトさせました。
トレーニング前後の評価:驚き度(Surprisal)と混乱度(Perplexity)
トレーニング効果を測定するため、トークンごとの驚き度を計算しました。
- 定義: モデルが特定トークンに割り当てる確率の自然対数の負値(非可能性が高いほど値が大きくなります)。
- 結果: CPT により、コード全体の驚き度が低下し、特に不慣れな慣用句の予測能力向上が見られました。
| メトリック | トレーニング前 | トレーニング後 (30 件保持) | 変化 |
|---|---|---|---|
| 混乱度 (Perplexity) | 28.63 | 8.57 | 大幅改善 |
- プログラムの一貫性は向上しましたが、いまだに「魅力」が欠けていました。
4. カリキュラム学習による美的スコア化
Awesome ness スコアの活用
Dwitter の「awesome ness スコア」を活用し、学習カリキュラムを設計しました。
- データランク付け: トレーニング用 25,000 件中、上位 5,000 件を抽出。
- 重みの漸進的増加:
- ステップ 0: すべての dweet を等確率でサンプリング(各 バケット 20.00%)。
- ステップ 400: 上位 1,000 件のみで約 67% のサンプリング確率に集中。
サンプリング確率の変化推移表
トレーニング進行に伴う、各ランクバケットのサンプリング確率変化です。
| ランクバケット | ステップ 1 | ステップ 100 | ステップ 200 | ステップ 300 | ステップ 400 |
|---|---|---|---|---|---|
| 1–1,000 (最高位) | 20.00% | 35.89% | 48.74% | 59.01% | 67.23% |
| 1,001–2,000 | 20.00% | 27.97% | 29.60% | 28.01% | 24.99% |
| 2,001–3,000 | 20.00% | 20.03% | 15.23% | 10.41% | 6.75% |
| 3,001–4,000 | 20.00% | 12.06% | 5.63% | 2.41% | 0.99% |
| 4,001–5,000 | 20.00% | 4.05% | 0.81% | 0.16% | 0.03% |
- この画期的な転換点后、生成された続きは視覚的に非常に興味深くなりました。
- 追加的な効果: トレーニング中にサンプリングされなかった dweets でも、混乱度が 7.42 から 5.65 に減少し、全般的な予測精度向上が確認されました。
5. RLHF(強化学習)による美的嗜好の注入
モデルが比較的美しい続きを生成できるようになった後、さらに自らの美的感覚を取り込むため、RLHF(人間によるフィードバックに基づく強化学習) を実施しました。
- 手法: GRPO アルゴリズムを使用し、自らを報酬関数として振る舞うことを選択。
- プロセス:
- 未完了の dweet に対し、8 組の完了候補をサンプリング。
- 隣り合わせでレンダリングし、最も美的に心地よいと感じたものを選択(好まない場合はスキップ)。
- 選択結果を報酬としてモデルを更新し、新しい続きをサンプリングして反復。
- 作業量: 約 9~10 ラウンドを行い、総計で約 40,000 件のアニメーションを手動確認。
外部評価ツールとの接触と移行
トレーニングの途中で VLM や HPSv3 の存在を知りましたが、手動評価の方が深層学習によるフィードバックに適していたため、継続しました。
- 最終チェック: 友人に 4 つのチェックポイントを提示し、生成デモを盲検テストで評価してもらいました。
- 結果: チェックポイント 4 が最も好まれたため、これを基に推論を行いました。
6. インターフェース開発と今後の展望
トレーニング終了後、以下の新しい可能性を開発しました。
- 分岐機能: 同じプレフィックスから複数の続きを生成し、隣り合わせでレンダリングするインターフェースを作成。
- 目を引いたものから分岐可能。
- コードを手作業で調整したり、さらに新しい続きを生成して探求を継続できる。
- 探索のサイクル:
- 各分岐は一つの可能な続きを表す。
- 視覚比較・手動微調整・再利用が可能。
このように**「可能性を自由に散歩できる」体験**は極めて愛すべきものであり、今後も長く楽しんでいきたいと思います。
関連リソース:
- デモシーン・7B モデルとデータセットは HuggingFace で入手できます。