DPOとは?RLHFの報酬モデルとPPOを省くアライメント手法
報酬モデルなしで好みデータから直接学習
DPO(Direct Preference Optimization)は、RLHFから報酬モデルとPPOを抜いて、「選んだ答え / 捨てた答え」のペアでモデルを直接学習させる方法だ。この記事を読めば、DPOの損失が実際に何を押して何を引くのか、βと損失の数字をどう読むか、RLHFの代わりにいつ使っていいかが分かる。
RLHFと何が違うのか
RLHFは、順位データでまず報酬モデルを作り、その点数をPPOで引き上げる。2023年にStanfordのRafailovらが出したDPO論文は、この2段階が数式を解くとペアに対する分類の損失ひとつに縮むことを示した。報酬モデルはいらないし、学習中に答えを新しく生成する必要もない。
学習中に抱えるモデルも2つに減る。学習中のモデルと、学習前の姿を凍結したコピー(参照モデル)だ。PPOはここに報酬モデルと価値モデルが加わる。
損失がやっていること
loss = -log σ( β × [ (log π(選んだ答え) - log π_ref(選んだ答え))
- (log π(捨てた答え) - log π_ref(捨てた答え)) ] )
言い換えると「選んだ答えは元より出やすく、捨てた答えは元より出にくく」だ。最初は学習中のモデルと参照モデルが同じなので括弧の中が0になり、損失は0.693(log 2)から始まる。
おもちゃで回してみた
感覚をつかむために、Rubyで答えが3つしかないおもちゃを作った。選んだ答え、捨てた答え、データに一度も出てこない答えの3つ。最初はどれも確率1/3。同じペアひとつで300ステップ回した。
β ステップ loss 選んだ答え 捨てた答え データ外 元とのKL
0.1 10 0.646 0.503 0.189 0.308 0.075
0.1 300 0.172 1.000 0.000 0.000 1.096
0.5 10 0.192 0.796 0.036 0.169 0.497
0.5 300 0.007 0.993 0.000 0.007 1.058
最初は、βを大きくすれば元のモデルの近くに留まると思っていた。違った。どちらも最後は選んだ答えひとつに寄って、データになかった答えまで0近くに押しやられた。βが変えたのは、そこに着くまでの速さと損失の目盛り(0.172 vs 0.007)だった。
好みがいつも一方にしか割れないデータでは、DPOが参照モデルからどこまでも離れうるという指摘がIPO論文(Azarら、2023)にある。おもちゃはその極端な形だ。実際のデータはペアが多く互いに引っ張り合うのでここまではならないが、読み方はそのまま持っていける。
lossが低いから良いわけではない。 βが違う実験同士でlossを比べない。評価用の質問への答えを自分で読む。
データにない答えも押し下げられる。 ペアがひとつの場面・口調に偏っていると、それ以外の答えが全部減る。いろんな場面のペアを混ぜる。
いつRLHFの代わりにDPOを使うか
DPO論文は、感情のコントロールではPPOベースのRLHFを上回り、要約と1ターンの対話では同等かそれ以上だったと報告している。「いつでも上」ではなく、その3つの課題でそうだったという話だ。
状況 選ぶもの
口調・形式だけ合えばいい SFT
「この答えよりあの答え」の記録がある DPO
報酬モデルで答えを生成し直しながら直したい RLHF (PPO)
Zephyr-7B-βとMixtral 8x7B Instructは、DPOで整えたと公表している公開モデルだ。オープンモデルを自社データで整えるならまずDPOを見るのが普通で、Hugging FaceのTRLライブラリにDPOTrainerがあるので始めるのも簡単だ。
ペアのデータは思ったより近くにある。回答画面のいいね・よくないね、オペレーターがAIの下書きを書き直した記録(書き直したほうが選んだ答え)は、そのままペアになる。
自社データでモデルの答えを整えたいけれど、ペアをどう集めるかで止まっているならnegabaroに相談してもらって構わない。今あるログで何ができるかを一緒に見られる。
キーコンセプト
ペアを集める: 質問+選んだ答え(chosen)+捨てた答え(rejected)
参照モデルを固定: 学習前のモデルのコピーを凍結しておく
DPO損失: 選んだ答えは元より出やすく、捨てた答えは出にくく。最初のlossは0.693
βは速さとlossの目盛りを変える。βが違う実験同士でlossを比べない
データにない答えも押し下げられるので、いろんな場面のペアを混ぜる
報酬モデル・PPOなしで学習完了。評価は答えを自分で読んで
メリット
- ✓ 報酬モデルの学習がなく、パイプラインが短い
- ✓ 学習中のモデルが2つ(学習中・参照)でPPO(4つ)より軽い
- ✓ 学習中に答えを生成しないので回しやすく安定
- ✓ 原論文の3つの課題でPPOベースのRLHFと同等以上
デメリット
- ✗ 好みが一方にしか割れないデータだと参照からどこまでも離れうる(IPO論文)
- ✗ データにない答えまで確率が下がる
- ✗ lossの数字で良し悪しを判断しにくい(βで目盛りが変わる)
- ✗ ペアデータを集めるコスト