🗻

Fine-Tuning Language Models with Just Forward Passes のメモ

2023/06/01に公開

foward だけで省メモリでファインチューンしたい...

Fine-Tuning Language Models with Just Forward Passes
https://arxiv.org/abs/2305.17333

はわわ.. しゅごい.

簡単な要約

  • Zeroth-order(数値微分)で forward を二回評価して微分近似を求めるよ
  • Memory-efficient ZO-SGD(MeZO): 何もしないと forward のときの二倍のメモリが必要になるけど, MeZO という省メモリになるアルゴリズムを提案するよ. 結果ほぼ Forward(推論)のときと同じくらいのメモリ量に抑えるよ
    • MeZO の収束の効率は landscape(関数値の分布)に依存して, パラメータ数には依存しないよ(既存の数値微分系だとパラメータ数に依存). 詳細は論文読んでね...

Zeroth-order

CG 関係の方であれば, これは数値微分で Ray differentials をやっているのと同等であるのがわかるでしょう.

pbrt での Ray differetials はオフセットつけてレイを飛ばして微分(の近似)を求めます.

https://pbr-book.org/3ed-2018/Geometry_and_Transformations/Rays#RayDifferentials

単純な数値微分だと, CG の場合では discontinuity があったり(visibility や checkerboard shading など), 起伏が激しいケースではうまくいかず, そのため CG 界隈では Differentiable Monte Carlo Ray Tracing through Edge Sampling

https://people.csail.mit.edu/tzumao/diffrt/

https://qiita.com/syoyo/items/410a4cca4b3c8057a6d3

などが提案されていますが,

機械学習(特に LLM)だと概ね smooth かつ convex(また, 次元も 2D ではなく 1D)なので, より容易に数値微分が適用できることでしょう.

MeZO: Memory-efficient ZO-SGD

論文のアルゴリズム見る限りでは, 実装自体はそんなに難しくないでしょう. github に repo もあります.

MeZO の収束の効率がパラメータ数ではなく landspace の分布/起伏に依存するのは論文にいろいろと証明があります... 時間ある方は頑張って読んで理解してみてくださいネ.
(まあ直感的には landscape の起伏の状況による, というのは理解できる)

パラメータ数に依存しないことで, 大規模な LLM でもファインチューンが容易になります.

Discussion