LoRA の解説で「重みの変化は低ランク」って出てくるけど、ランクがよう分からん
【疑問】LoRA の説明に出てくる「行列のランク」って何?低ランクやと何がうれしいん【AI】
>>1
行列のランクは、行(または列)のうち、本当に別々の向きを持ってるものの本数
ほかの行の組み合わせ(定数倍して足したもの)で作れる行は、数に入れない
>>2
例で頼む
>>3
2行目は1行目のちょうど2倍で、新しい向きを持ってない。1行目と3行目は、どっちかの定数倍にはならない
だからランクは2。3×3 の行列でも、中身は2本分の情報しかない
>>4
ランク1の行列ってどんなの?
>>5
全部の行が、同じ向きの定数倍。縦ベクトル と横ベクトル の掛け算で書ける
2×3 で6個の数があるけど、決めてるのは の2個と の3個、合わせて5個だけ
>>6
数を節約できるんやな
>>7
大きい行列ほど効く。 の行列は 個の数やけど、ランク なら と の2つの行列の掛け算で書けて、数は 個になる
約0.39%で済む
>>8
それが LoRA の中身?
>>9
そう。LoRA(Hu ら、2021年)は、元の重み は固定して、変化分 をランク の掛け算 に限って学習する
学習するのは ()と ()だけ
>>10
でも、変化分が本当にランク8で足りるん?
>>11
足りる保証はない。LoRA の論文は、ファインチューニングでの重みの変化はもともと低いランクで表せることが多い、という見立てを立てて、小さい でも全部を学習したときに近い性能が出ることを実験で示してる
足りないタスクなら を上げる
ランクって、どうやって求めるん
>>13
手計算なら、行どうしの引き算(掃き出し)で、0にならずに残る行を数える
>>4の なら、2行目 1行目 で 、3行目 1行目 で 。0でない行が2本残るからランク2
>>14
実際のデータやと、ぴったり0にはならんやろ
>>15
ならん。だから特異値分解(SVD)で、それぞれの向きの大事さを表す特異値を出して、小さいものを0とみなす
特異値の大きい順に 個だけ残すと、ランク の行列の中で、元の行列にいちばん近いもの(成分の2乗誤差の和が最小)になる
>>16
数字で見たい
>>17
>>4の の特異値は約 、、
大きいほう1個だけ残すとランク1の近似になって、そのずれ(2乗誤差の和の平方根)は捨てた特異値と同じ約0.92。2個残すと そのものに戻る
連立方程式のところでも、ランクって出てきた気がする
>>19
出てくる。未知数3個の連立方程式で、係数の行列が>>4の みたいにランク2やと、式が実質2本しかないから、解が1つに決まらない(解がないか、無数にある)
>>8
でも、ランクを下げたら表せる変化は減るんやろ
>>21
減る。ランク の を掛けた結果は、たかだか 本の向きの組み合わせにしかならない
その代わり、学習するパラメータとメモリが大きく減るし、タスクごとに小さい と だけ保存すればいい
別々の向きの本数がランク。低ランクなら2つの細い行列の掛け算で書けて、数が大きく減る、やな
管理人のひとこと
- 行列のランクは、行(列)のうち本当に別々の向きを持つものの本数。2行目が1行目の2倍の3×3行列はランク2。
- ランク1の行列は で書ける。 でランク なら 個の数で表せる( で約0.39%)。LoRA は に限って学習する。
- ランクは掃き出しで0でない行を数えて求める。実データでは特異値分解で小さな特異値を0とみなし、大きい順に 個残すと最も近いランク の近似になる。
- ランクが未知数より少ない連立方程式は解が1つに決まらない。低ランクにすると表せる変化は減るが、パラメータとメモリが大きく減る。