ファインチューニング・LoRA・RLHF — 全部書き直すか、付箋を貼るか、褒めて育てるか
ChatGPTのようなLLMは、まず大量の文章で事前学習をしてから、用途に合わせて追加の学習をしています。この追加学習にはいくつかの方法があり、名前がよく似ていて混乱しがちです。ここでは代表的な3つを、たとえで整理します。
フルファインチューニングは、教科書を全ページ書き直す。LoRAは、教科書はそのままに付箋を貼る。RLHFは、2つの答えのうち良いほうを人が選び、褒めて育てる。下の図1で、モデルの中身(重み)がどこまで書き換わるかを見比べてください。
フルファインチューニング — 全ページ書き直す
いちばん素直なのは、用途に合ったデータ(図1では関西弁の会話)で、モデルのすべての重みを少しずつ動かす方法です。図1で学習すると、32×32のマスが全部光ります。効果は大きいものの、70億パラメータのモデルなら70億個すべてを動かすので、学習には大きなGPUが要ります。
もっと困るのは保存です。書き直した結果はまるごと別のモデルなので、関西弁用、敬語用、と用途を増やすたびに14GBのモデルが1体ずつ増えていきます。
LoRA — 教科書はそのまま、付箋だけ貼る
LoRA(Low-Rank Adaptation)は、元の重みを凍結して一切触りません。代わりに、細長い2枚の行列 B と Aを横に置き、これだけを学習します。B×A を計算すると元の重みと同じ大きさの「差分」になり、それを足して使う、という仕組みです。
ポイントは、B と A がとても細いこと。図1のランク r が細さで、r=2 なら学習するのは 2×32×2 = 128個だけ。実物のモデルでは全体の0.1%にも満たない数で済みます。差分は縦じま×横じまのような単純な模様にしかなりませんが、口調や形式を変える程度ならそれで十分なことが多いのです。付箋なので貼り替えも自由で、本体1体に関西弁・敬語のアダプタを何枚でも用意できます。
RLHF — 正解を教えず、良いほうを選ぶ
フルFTもLoRAも「この質問にはこう答える」というお手本から学びます。でも「感じの良い答え」「ウソをつかない答え」のお手本を大量に書くのは大変です。そこでRLHF(人間のフィードバックによる強化学習)では、モデルが出した2つの答えを人が見比べて、良いほうを選ぶだけにします。
集めた「こっちが良い」から、まず人の好みを真似る採点係(報酬モデル)を作ります。次に、モデルがたくさん答えを出しては採点係に点をもらい、点が高い答え方をしやすくなるよう重みを動かします。図1で何回か選ぶと、丁寧で役に立つ答えの確率が上がり、自信満々のウソは出にくくなっていくはずです。
- 重み(パラメータ)
- モデルの中にある、学習で調整される数値。70億パラメータのモデルには70億個ある。
- ファインチューニング
- 学習済みのモデルを、特定の用途のデータで追加学習すること。
- LoRA
- 元の重みを凍結し、細い2枚の行列の積で表した差分だけを学習する方法。軽くて貼り替えられる。
- ランク(r)
- LoRAの行列の細さ。大きいほど表せる差分が複雑になるが、学習する数も増える。
- RLHF / 報酬モデル
- 人が選んだ「良い答え」から採点係(報酬モデル)を作り、その点数が高くなるようにモデルを学習させる方法。
まとめ
3つの違いは、どこを書き換えるかと何から学ぶかです。フルFTは全部の重みをお手本から書き直し、LoRAは付箋(差分)だけをお手本から学ぶ。RLHFはお手本ではなく人の好みから学びます。実際のLLMでは、お手本で答え方を教え(ファインチューニング)、そのあと人の好みで磨く(RLHF)、と組み合わせて使われています。