巨大なモデルが、ほぼ何も学習せずにあなたのタスクを覚える仕組み。
SRC·18
Source
巨大なモデルを、メールで送れるほど小さな断片の学習だけで適応させる。
完全なファインチューニングは、数十億の重みを持つモデルのすべての重みを動かし、タスクごとにまるごとのコピーを保存する。そんなものを何十個も抱えてはいられない。LoRAは巨大なモデルを凍結し、代わりにごく小さな付加物だけを学習する。メールで送れて、差し替えられて、積み重ねられるほど軽い。土台は同じモデル、まったく新しいスキル、保存するものはほぼゼロ。
古いやり方は全部を再学習する——タスクごとにまるごとの新しいコピー。
巨大なモデルを専門化するため、古典的なファインチューニングは元の重みとまったく同じ大きさの変化ΔWを学習する——そのd×k個の数すべてが自由に動く。これを10個のタスクで行えば、まるごとのモデルを10個保存することになる。地図帳をまるごと刷り直すようなものだ。たった一本の通りを描き直すだけなのに、本一冊を作り直してしまう。
第一手:巨大なモデルには一切手を触れない。
LoRAは事前学習済みの重みを凍結したまま——一つも学習しない。出力は巨大なモデル自身の答えに、自分で学習する小さな別個の補正を足したものだ。設計図の上に透明なアセテートのシートを重ねるようなもの。下の図面は決して変わらず、修正は上の重ねたシートに描き込む。
第二手:その補正を単純にする。
ここがコツだ。変化を低ランクに強制する。完全な d×k のブロックの代わりに、ΔW = B·A と書く——幅 r という細いくびれを共有する2つの痩せた行列で、どちらの辺よりもずっと小さい。操り人形のように:ほんの数本の糸が、広がった人形全体を動かす。大きな更新には、実のところほんの一握りの独立した引きしかない。
では、実際に学習する分を数えてみよう。
完全な更新は d×k 個の数だ。痩せた行列2つなら、わずか r(d+k) 個。幅 12288 の層で r = 8 なら、これは数百分の一——モデル一台分の調整が、何十個も保存できる断片に縮む。仕立屋のわずかな手直しのように:誰も新しいスーツを縫いはしない。ほんの数針で、既製品があなたのものになる。
何も足さない状態から始め、そっと入っていく。
安全に始めるには? B = 0 とし、A には小さなランダムなノイズを詰める。すると付加物はちょうどゼロから始まる——最初の一歩では、手つかずの巨大なモデルそのものとして振る舞う。それから学習が、α/r で穏やかに調整しながら補正を少しずつ入れていく。舞台の照明が暗転から立ち上がるように:はじめは何も足されず、やがて新しい場面がゆっくりと現れる。決して急にではなく。
動かすとき、付加物は消える。
学習が済んだら、痩せた行列2つを大きな行列の中に畳み込んで戻す。モデルは再び一つの行列になる——実行時の余分な手間はゼロ、元より少しも遅くならない。そして各スキルはそれ自身の小さな B·A にすぎないので、凍結した一つの巨大なモデルがいくつもまとえる。替えビットのトレイが付いた電動ドリル一台のように:モーターはそのまま、仕事ごとに別の先端を差し込む。
🌱 新しいスキルがこれほど小さいなら、それをすでに知っていたのは誰だ?
汎用の巨大なモデルをあなたの専門家に変える変化は、驚くほど小さい——数本の細い数字の帯だ。そこに静かな問いが残る。あなたが新しいスキルを足したのか、それとも巨大なモデルがすでにそれを抱えていて、数本の糸が表へ引き出すのを待っていたのか。ファインチューニングは教えているのではなく、明らかにしているのかもしれない。
タップ →↑スワイプで詳しく↓スワイプで終了クリックまたは → で次へ↑ で詳しくesc で終了