研究報告
MIDI Diffusion AutoML
用 Diffusion Model 生成鋼琴 MIDI — 以及 AI 全自動搜尋最優模型架構的完整歷程。
使用的技術
PyTorchDiffusion Model1D UNetNASEvolutionary StrategyMAESTRO v3.0.0Binary DiffusionEMATensorBoard
起源
核心問題:能否用 Diffusion Model 生成鋼琴 MIDI?更進一步:能否讓 AI 自動設計自己的網絡架構,無需人工手調超參數?
Phase 1 · 基礎建設
- • 資料來源:MAESTRO v3.0.0 鋼琴資料集(含錄音及精確對齊 MIDI)
- • 格式:88 鍵 Pianoroll(binary,每 timestep 哪些鍵被按下)
- • 序列長度:2048 timesteps
Phase 2 · 模型設計
- • Discrete Binary Diffusion(而非連續高斯擴散)
- • 正向過程:以比例 t/T 隨機 mask/replace 音符
- • 反向過程:1D UNet 預測原始 pianoroll,損失函數為 BCEWithLogits
AutoML:全自動架構搜尋
神經架構搜尋(NAS)閉環設計
採用 Evolutionary Strategy(進化算法):每輪從最優架構突變產生 3 個候選,訓練評估後保留最優,整個循環無需人工介入。
embed_dim: [128, 192, 256, 384, 512]base_ch: [64, 96, 128, 192, 256]time_emb_dim: [256, 384, 512, 768]dropout: [0.0, 0.05, 0.1, 0.15, 0.2]num_resblocks: [2, 3, 4]attention_mask: 5 種組合
最優模型
b644a6f6val_loss: 0.0751
embed_dim
128
base_ch
256
time_emb_dim
384
dropout
0.05
num_resblocks
3
attention_mask
[0, 0, 1, 1]
300 epochs + EMA (decay=0.9999) + Cosine Warmup + Early Stopping (patience=20)
實驗統計
23
架構實驗
6
AutoML 迭代
300
最終 Epochs
失敗案例分析
c4bc4257靜音率 99.8%time_emb_dim=256 過小 + attn=[0,1,1,1] 破壞特徵學習
485d39e5靜音率 89.7%embed_dim=256, base_ch=256 瓶頸 2048ch,訓練不足
4e6c3d19靜音率 76.9%down1 層加 Attention,計算量爆炸且破壞局部特徵
694ddf6fattn=[0,1,1,1] 再度失敗第三個確認:down1 不應加 Attention
99c5392abase_ch=64 嚴重不足Loss 和生成品質可以解耦——val_loss 好看但音樂品質低劣
關鍵心得
Lesson 01
禁止在 down0/down1 層加 Attention
三個失敗案例一致確認:高解析度層 Self-Attention 計算量暴增且破壞局部特徵。規則:Attention 只放 down2 和 bottleneck。
Lesson 02
小 embed_dim + 大 base_ch 優於反向組合
最優架構 embed_dim=128, base_ch=256。base_ch 決定 UNet 通道容量(瓶頸達 2048ch),embed_dim 過大只會引入冗餘。
Lesson 03
time_emb_dim 不能低於 384
time_emb_dim=256 是致命傷,時間步資訊無法有效傳遞到每層 ResBlock。