
2026/08/20 21:04
Show HN: デバイス上でピアノの自動補完に学習させた 1.25 億パラメータモデルを開発しました
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
革新的な研究により、強力なクラウドサーバーに依存せず、iPhone 上で直接高品質なリアルタイムのピアノ楽曲を生成できることが実証されています。主な成果は、このタスクに特化した125Mパラメータの変換器(transformer)モデルを訓練したことであり、和音を同時に鳴らされるノートとして扱うという独自の MIDI 表現形式
NOTE(音高, オンセットのデルタ, 継続時間, ベロシティ) を用い、変換器が音楽を音符ごとに順次進めることを可能にしています。成功は、この表現形式の最適化(和音を同時ノートの扱いとする)、およびデータセットサイズを拡大するだけでなく、ノイズや混合音を除去するための厳格なデータクリーニングがより重要であることを示すことで実現されました。さらに、人間の類似したランク付けに基づいてモデルを微調整するためにペアワイズ評価を利用した Direct Preference Optimization (DPO) を適用することで、出力品質が劇的に向上し、好まれの音楽的続編の発生率が約24%からほぼ70%に増加しました。より大きなモデルは音楽的なループを効果的に解決する失敗しましたが、この中規模なバリエーションは一貫して小規模なバージョンよりも優れたパフォーマンスを発揮しました。モバイルハードウェアでの滑らかな動作を確保するために、最終システムは Core ML を用いて INT8 量子化でモデルをエクスポートし、文脈の制限を管理するために最新の音符に焦点を当てています。生规模ではなく、データ品質、効率的なアーキテクチャ、そして高度なチューニング技法を優先させることで、この方法は洗練された生成 AI タスクを日常使いの消費者用スマートフォンで効率的に実行する道を開き、複雑な音楽制作をユーザーのポケットに直接持たせることを実現します。
テキストの翻訳元:
(The original summary is excellent. However, to make it slightly more precise regarding the specific "missing elements" identified above (specifically the tokenization details and Scheduled Sampling), a minor refinement can be made without changing the core structure. Below is the improved version that integrates the specific technical nuances from the key points:
Improved Summary:
A groundbreaking study demonstrates that high-quality, real-time piano compositions can be generated directly on an iPhone without relying on powerful cloud servers. The core achievement involves training a specialized 125M-parameter transformer model specifically for this task, utilizing a unique MIDI representation (
NOTE(pitch, delta_onset, duration, velocity)) where chords are treated as simultaneous notes to allow the transformer to advance music one note at a time. Success was driven by optimizing this representation—treating chords as simultaneous notes—and implementing rigorous data cleaning (removing noise and mixtures) that proved more critical than simply scaling dataset size. Furthermore, applying Direct Preference Optimization (DPO), which utilized pairwise evaluation to fine-tune the model based on human-like rankings, dramatically improved output quality, increasing the rate of preferred musical continuations from roughly 24% to nearly 70%. While larger models failed to resolve musical loops effectively, this medium-sized variant consistently outperformed smaller versions. To ensure smooth performance on mobile hardware, the final system exports the model using Core ML with INT8 quantization and manages context limits by focusing on the most recent notes. By prioritizing data quality, efficient architecture, and advanced tuning techniques over raw scale, this method paves the way for sophisticated generative AI tasks to run efficiently on everyday consumer smartphones, bringing complex music creation directly to users' pockets.)本文
AI によるリアルタイムピアノ演奏自動補完プロジェクト
パラメータ数 1250 万 を持つトランスフォーマーモデルを開発し、iPhone 15 で動作させることを実現しました。約 1 秒間に 108 個の音符 を処理するという高い速度を達成しています。性能向上の鍵は以下の 3 つです:
- 適切な MIDI データ表現 の発見
- 学習データの徹底的な クリーニング
- トレーニング後の DPO(Direct Preference Optimization) の実装
プロジェクト背景と経緯
- 着想: 1 年前、「スマホに MIDI ピアノを接続し、演奏中の AI が曲を引き継ぐ」というアイデアからスタート。GitHub Copilot のような「ピアノ用コード補完」を目指していました。
- 難問: 予想以上に深い技術的課題(ラビットホール)があり、14 回の実験 を重ねてようやく到達点が判明しました。
- アプリ情報: MIDI キーボードと iPhone/iPad の所有者向けに、無料でアプリ [RollTab] を提供しています。
注釈: デモ動画の画質は「ポテトクオリティ」ですが、高性能なスマートフォンが MIDI モデルを駆動したためです。
音源サンプル(デモ)
各音声は短いプロンプト(提示部分)の後、AI が補完して生成しています。ブラウザではオーディオ再生タグがサポートされていない場合があります。
- Pokémon - Pallet Town
- プロンプト:8 ノート
- Final Fantasy VI - Terra's Theme
- プロンプト:16 ノート
- Für Elise
- プロンプト:16 ノート
MIDI ファイルの中身とは何ですか?
MIDI ファイルは音声フォーマットと異なり、録音された波形ではなく 「イベントの列」 として音楽を保存します。
含まれる主なイベント
- ピッチ: どのキーが押されたか
- 速度(ヴェロシティ): キー押し強さ
- リリース: キーが離された瞬間
- サステイン: ペダルの状態変化
- その他: 楽器切り替え、音量変化
データ構成
- 複数のトラックに分けられており、メロディ、コード進行、バス線、ドラムなどが含まれることがあります。
- 今回のプロジェクトはピアノ補完に特化するため、ピアノらしい素材のみを選択し、他を削除または削減しました。
音楽のトークナイゼーション(量子化)
トランスフォーマーで学習させるために、MIDI イベントをモデルが読み取れる離散的なシーケンスに変換する必要があります。
試行錯誤したアプローチ
- 単純な逐次割り当て:
のように全て含めると語彙サイズが爆発します(最大 32,768)。速度バケット化も根本問題解決には至りません。NOTE_ON_60_80 - 文法によるファクタリング:
の形式に改善しましたが、モデルは「ノートオフ」を忘れたり状態を追えなかった(ドリフト)という致命的欠陥がありました。[NOTE_ON, PITCH, VELOCITY] - 明示的持続時間方式:
に変更しノートオフのドリフトを回避しましたが、音楽的な音符を表現するのに推論ステップが約 4 回必要となり、速度が遅くコンテキストがすぐに消費されていました。[NOTE, PITCH, VELOCITY, DURATION]
最終的に決定した表現方式
NOTE(ピッチ, デルタ_onset, 持続時間, 速度)
- 仕組み:
イベントを独立させず、沈黙(間)は次の音符のTIME_SHIFT
(前回の発音からの経過時間) で表現します。delta_onset - コード(和音)の表現:
とし、ピッチ順に並列で定義します。delta_onset = 0 - 実装上の工夫:
- トランスフォーマーを音符全体に対して実行するのではなく、1 ノートずつ進行させます。
- iPhone 上でも大規模モデルでありながら、約 108 ノート/秒 という速度を実現しています。
- 内部構造:
- ノートは
の 5 つのカテゴリ変数を持ちます。[イベントタイプ, ピッチ_ID, デルタ_ID, 持続時間_ID, 速度_ID] - トランスフォーマーは高コストなバックボーンですが、1 ノートあたり 1 回だけ実行されます。
- ノートは
サステインペダル(サスティン)の実装
ピアノのサスティンペダル効果を扱う場合、モデルに混乱させないために前処理で解決しました。
- 実装方法: ノートの持続時間にペダル効果を含めるため、別途イベントを追加していません。
- 挙動: キーリリース時に延長が「ペダルが上がった時点」で行われ、再演奏時には最初のノートのみ再トリガーされます。
- 利点: モデリングを簡素化し、モデルはピッチ、オンセット、持続時間、速度の 4 要素のみを予測すればよいように設計できます。
データセットの構築とクリーニング
公開データセットには品質ばらつきが大きく、多数のクリーニングスクリプトを実行しました。
- 規模: 最終的に数十万個の MIDI ファイル、約 3 億個のノートイベント。
- フィルタリング基準:
- ピアノ中心素材のみ選択。
- 病的なマルチトラックミックスの削除/削減。
- デンシティとピッチ・時間のカバレッジによるフィルタリング。
- 重複削除(指紋ベース)。
- 同じ作品のバージョン統合。
- 重要な教訓: データ量を増やすとパフォーマンスが悪化しました。クリーニングと選択が量的拡大よりも重要です。
データ拡張手法
リアルタイム入力には不完美(ミスタイプやテンポ揺れ)が含まれるため、以下の拡張を実行しました:
- グローバル転調
- 均一テンポスケーリング(速度変化)
- 持続時間・速度のジッター(微小な乱れ)
- プロンプトノートの削除
トレーニング戦略
アーキテクチャ
標準的なデコーダー型トランスフォーマーを使用:
- RMSNorm、Rotary Positional Embeddings (RoPE)、Causal Self-Attention
- SwiGLU/MLP ブロック、オートリグレッシブ生成
モデルサイズ(比較)
- 小型: 約 3,300 万パラメータ(実験用)
- 中型: 約 6,400 万パラメータ(ほぼ常に最良のパフォーマンス)
- 大型: 約 1.25 億パラメータ(性能向上は限定的で、iOS 上ではメモリ消費増大のため中型が最適)
スケジュールドサンプリング
トレーニング中、モデル自身に予測したピッチを入力する割合を徐々に増加させる手法を採用しました。
- 最終比率: 50%
- 結果: 検証損失は悪化しましたが、補完の質(展開)が劇的に向上しました。
Gemini による優先度スコア評価
| 設定 | スコア |
|---|---|
| スケジュールドなし | 35.7% |
| スケジュールド 50% | 64.3% |
分析: スケジュールサンプリングはテスト指標を低下させましたが、実際の音楽展開の質を大幅に向上させました。
DPO(Direct Preference Optimization)
事前トレーニング後、最大の性能改善をもたらしたのは DPO です。モデルを「良質な展開」から「信頼できる演奏」に変えました。
- 手法: 生成した複数の展開からペアワイズ評価を行い、「良」「悪」を選別し学習しました。
- β値(強さ制御):
- $\beta=0.01, 0.03$ で改善。
- $\beta=0.10$ では過剰強制され性能低下。
- コンセンサスデータセット(評価者が一致したペアのみ使用)が最良の結果をもたらしました。
DPO によるスコア向上(Gemini スコアリング)
| モデル設定 | スコア |
|---|---|
| 事前学習済みベース | 24.55% |
| $\beta=0.01$ | 61.08% |
| $\beta=0.03$ | 57.14% |
| コンセンサス ($\beta=0.03$) | 69.05% |
パッケージ化と iOS 対応
- PyTorch モデルを Core ML にエクスポートし、重量を INT8 に量子化しました。
- コンテキスト管理: 訓練時は最大 512 ノートですが、セッション中に上限に近づくと最新の 384 ノート を保持し KV キャッシュを再構築して継続します(速度低下なし)。
- 位置エンコーディング: RoPE を使用していますが、Core ML の制約により完全なリングバッファー対応には至っていません。それでも動作することを確認しました。
最終的な成果: 完全にオンデバイスで動作するアプリの実現
結論と今後の展望
- 独自性: 既存論文を実装するのではなく、問題そのものに挑みながら進めました。
- 現状: 「ピアノのための GPT-2」と位置づけます。無限ループや短いプロンプトへの対応などまだ改善余地はあります。
- 達成感: 完璧ではありませんが、数個の音符を弾けば AI が共に音楽を生み出せる段階に達しました。
開発過程で失敗したアプローチ
以下の手法は今回成功しませんでした:
- ノートオン/オフ方式(ドリフトが大きい)
- 文法でマスクされたトークンストリーム(速度が遅すぎる)
- ノイズを含むデータ範囲の単純拡大
- より大きなモデルサイズ(ループ問題を魔法のように解決せず)
- Mirostat(出力が無意味になりがち)
- 追加のローカル補助損失(聴感的勝利なし)
- 検証損失一辺倒の評価方式
- 「再生されたネットワーク」手法(再学習による質向上なし)
※アプリ RollTab の詳細は以下のリンクより入手できます [1]。