LoRA を使うと、大きいモデルでも手元で追加学習できるって聞いた
パラメータを減らして、性能は落ちへんの?
【疑問】LoRAって、なんで学習するパラメータがあんなに減るん?【AI】
>>1
出どころは Hu らの論文(arXiv 公開は2021年)。名前は Low-Rank Adaptation(低ランク適応)
元のモデルの重み は凍結(学習で動かさない)して、変化分だけを小さい行列2つの積で表す
>>2
B と A の大きさは
>>3
が の行列なら、 は 、 は
はランク(行列が実質何本の独立な向きを持つか)で、 や よりずっと小さくする
>>4
数字で
>>5
の重み行列を全部学習すると
の LoRA なら
約0.39%で済む
>>6
積にしただけで、なんで情報が足りるんや
>>7
ちっちゃい例で見ると分かりやすい。、 なら
2行目は1行目のちょうど2倍で、ランク1
「変化分は少ない向きだけで表せる」と仮定して、その形しか作れんように制限してる
>>8
その仮定、ほんまに成り立つん?
>>9
論文は「追加学習での重みの変化は、実質的なランクが低い」という仮説を立てて、実験で確かめてる
GPT-3 175B(1750億パラメータ)で、クエリとバリューの重みに当てる場合、 でもかなりの性能が出てる
>>10
GPT-3 やとどれくらい減るん
>>11
論文の数字やと、普通の追加学習(全部のパラメータを動かす方式)に比べて
学習するパラメータは約1万分の1、GPUメモリは約3分の1(1.2TB から350GB)
保存するファイルも、 でクエリとバリューだけに当てると350GBから35MBになる
>>12
その35MBってどう出てくるん
>>13
GPT-3 は単語ベクトルが12,288次元で96層
クエリとバリューの2種類×96層に、 の と を足すと
約1900万個。16ビット(1個2バイト)で保存すると約38MBで、論文の約35MBと同じ桁
>>14
推論のとき、行列が増えたぶん遅くならん?
>>15
ならん。学習が終わったら を先に足して1つの行列にしてしまえる
アダプター(層の間に小さい層を足す方式)は計算が1段増えるけど、LoRA は形が元の行列と同じやから増えん
>>16
学習の最初はどうなってるん
>>17
はランダム、 は0で始める。だから最初は で、元のモデルとまったく同じところから学習が始まる
>>18
じゃあ は小さければ小さいほどええんか
>>19
そうとは限らん。論文自身、小さい がどんなタスクでも通用するとは期待してない、と書いてる
事前学習の内容とかけ離れたタスクなら、全部のパラメータを学習し直したほうが勝つ可能性がある
論文の結果は「試したタスクでは低いランクで十分だった」ってところまで
>>20
変化分を細長い行列2つに分けて、そこだけ学習する。減る理由は掛け算の形そのものなんやな
管理人のひとこと
- LoRA は元の重み を凍結し、変化分を ( は 、 は )で表して と だけを学習する(Hu ら、2021年に arXiv 公開)。
- の行列(約1678万個)でも、 なら65,536個(約0.39%)。GPT-3 175B では学習するパラメータ約1万分の1、GPUメモリ約3分の1と報告されている。
- 学習後は を1つの行列にまとめられるので、推論は遅くならない。 で始めるので、最初は元のモデルと同じ。
- 低いランクで足りるのは「変化分の実質的なランクが低い」という仮説が試したタスクで成り立ったから。どんなタスクでも成り立つとは限らない。