読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】LoRA の説明に出てくる「行列のランク」って何?低ランクやと何がうれしいん【AI】

23レスカテゴリ:AI・機械学習
1: 名無しさん

LoRA の解説で「重みの変化は低ランク」って出てくるけど、ランクがよう分からん

2: 名無しさん

>>1
行列のランクは、行(または列)のうち、本当に別々の向きを持ってるものの本数
ほかの行の組み合わせ(定数倍して足したもの)で作れる行は、数に入れない

3: 名無しさん

>>2
例で頼む

4: 名無しさん

>>3

2行目は1行目のちょうど2倍で、新しい向きを持ってない。1行目と3行目は、どっちかの定数倍にはならない
だからランクは2。3×3 の行列でも、中身は2本分の情報しかない

5: 名無しさん

>>4
ランク1の行列ってどんなの?

6: 名無しさん

>>5
全部の行が、同じ向きの定数倍。縦ベクトル と横ベクトル の掛け算で書ける

2×3 で6個の数があるけど、決めてるのは の2個と の3個、合わせて5個だけ

7: 名無しさん

>>6
数を節約できるんやな

8: 名無しさん

>>7
大きい行列ほど効く。 の行列は 個の数やけど、ランク なら と の2つの行列の掛け算で書けて、数は 個になる

約0.39%で済む

9: 名無しさん

>>8
それが LoRA の中身?

10: 名無しさん

>>9
そう。LoRA(Hu ら、2021年)は、元の重み は固定して、変化分 をランク の掛け算 に限って学習する

学習するのは ()と ()だけ

11: 名無しさん

>>10
でも、変化分が本当にランク8で足りるん?

12: 名無しさん

>>11
足りる保証はない。LoRA の論文は、ファインチューニングでの重みの変化はもともと低いランクで表せることが多い、という見立てを立てて、小さい でも全部を学習したときに近い性能が出ることを実験で示してる
足りないタスクなら を上げる

13: 名無しさん

ランクって、どうやって求めるん

14: 名無しさん

>>13
手計算なら、行どうしの引き算(掃き出し)で、0にならずに残る行を数える
>>4の なら、2行目 1行目 で 、3行目 1行目 で 。0でない行が2本残るからランク2

15: 名無しさん

>>14
実際のデータやと、ぴったり0にはならんやろ

16: 名無しさん

>>15
ならん。だから特異値分解(SVD)で、それぞれの向きの大事さを表す特異値を出して、小さいものを0とみなす
特異値の大きい順に 個だけ残すと、ランク の行列の中で、元の行列にいちばん近いもの(成分の2乗誤差の和が最小)になる

17: 名無しさん

>>16
数字で見たい

18: 名無しさん

>>17
>>4の の特異値は約 、、
大きいほう1個だけ残すとランク1の近似になって、そのずれ(2乗誤差の和の平方根)は捨てた特異値と同じ約0.92。2個残すと そのものに戻る

19: 名無しさん

連立方程式のところでも、ランクって出てきた気がする

20: 名無しさん

>>19
出てくる。未知数3個の連立方程式で、係数の行列が>>4の みたいにランク2やと、式が実質2本しかないから、解が1つに決まらない(解がないか、無数にある)

21: 名無しさん

>>8
でも、ランクを下げたら表せる変化は減るんやろ

22: 名無しさん

>>21
減る。ランク の を掛けた結果は、たかだか 本の向きの組み合わせにしかならない
その代わり、学習するパラメータとメモリが大きく減るし、タスクごとに小さい と だけ保存すればいい

23: 名無しさん

別々の向きの本数がランク。低ランクなら2つの細い行列の掛け算で書けて、数が大きく減る、やな

管理人のひとこと