🗻
Fine-Tuning Language Models with Just Forward Passes のメモ
foward だけで省メモリでファインチューンしたい...
Fine-Tuning Language Models with Just Forward Passes
はわわ.. しゅごい.
簡単な要約
- Zeroth-order(数値微分)で forward を二回評価して微分近似を求めるよ
- Memory-efficient ZO-SGD(MeZO): 何もしないと forward のときの二倍のメモリが必要になるけど, MeZO という省メモリになるアルゴリズムを提案するよ. 結果ほぼ Forward(推論)のときと同じくらいのメモリ量に抑えるよ
- MeZO の収束の効率は landscape(関数値の分布)に依存して, パラメータ数には依存しないよ(既存の数値微分系だとパラメータ数に依存). 詳細は論文読んでね...
Zeroth-order
CG 関係の方であれば, これは数値微分で Ray differentials をやっているのと同等であるのがわかるでしょう.
pbrt での Ray differetials はオフセットつけてレイを飛ばして微分(の近似)を求めます.
単純な数値微分だと, CG の場合では discontinuity があったり(visibility や checkerboard shading など), 起伏が激しいケースではうまくいかず, そのため CG 界隈では Differentiable Monte Carlo Ray Tracing through Edge Sampling
などが提案されていますが,
機械学習(特に LLM)だと概ね smooth かつ convex(また, 次元も 2D ではなく 1D)なので, より容易に数値微分が適用できることでしょう.
MeZO: Memory-efficient ZO-SGD
論文のアルゴリズム見る限りでは, 実装自体はそんなに難しくないでしょう. github に repo もあります.
MeZO の収束の効率がパラメータ数ではなく landspace の分布/起伏に依存するのは論文にいろいろと証明があります... 時間ある方は頑張って読んで理解してみてくださいネ.
(まあ直感的には landscape の起伏の状況による, というのは理解できる)
パラメータ数に依存しないことで, 大規模な LLM でもファインチューンが容易になります.
Discussion