DPO(直接選好最適化)とは何か、メモ

  • 最近、自作の指示応答データセットを使った微調整によってLLMにパーソナライズされた知識を追加することを試みているのですが、その際にモデルに植え付けられた過剰なアラインメントが知識追加の障壁になる場合があります。
    • 例えばモデルに対し「USER: 好きな色は何色ですか?\nAI: 私の好きな色は青です」と学習させたいのに、モデルが頑として「AI: 私はAIなので人間のような色の好みはありません」と回答し続けるような場合があります。
    • しつこく学習を続ければデータ通りに回答するようにはなりますが、そこまでSFTをやりすぎるとオーバーフィットでモデルの質が劣化します。
  • このような場合、DPO(直接選好最適化)を使って微調整すると過剰なアラインメントを簡単に除去できる可能性があります。
  • ということで、DPOとは何かを開設する記事をまとめて斜め読みしてみました。具体的なコード等は割愛しています。

メモ1:「Mistral-7BをDPOでファインチューンする」

towardsdatascience.com

  • 人間のフィードバックからの強化学習 (RLHF)は、学習済み言語モデルの回答からバイアスや有害性を取り除くことを主な目的として考案された。
  • しかし最近では、RLHFとその派生手法がアラインメントだけでなくパフォーマンスの向上にも寄与することが分かっている。
  • そもそもRLHFの概念はロボット工学で長い間使用されてきたが、OpenAIの論文「人間の好みから言語モデルを微調整する」でLLM向けに普及した。
  • この論文のフレームワークでは、1)まず「報酬モデル」を人間のフィードバックを近似するようにトレーニングし、2)次に近似ポリシー最適化(PPO)アルゴリズムを使い、報酬モデルを介して対象モデルをポリシー微調整する。

  • PPOのポイントは、ポリシーを小さく段階的に更新する点にある。大規模な更新は不安定性や最適化の失敗につながる可能性があるため。
  • とはいえPPOはやはり不安定で(損失が発散しやすい)、再現が困難で(ハイパーパラメータが多い、ランダムシードに敏感)、しかも計算コストが高いという課題がある。
  • そこで、直接選好最適化 (DPO)アルゴリズムが良い代案になる。
  • DPOは、タスクを分類問題として扱うことで制御を簡素化する。具体的には、学習対象モデル(ポリシーモデル) とそのコピーである参照モデルを使用する。
  • DPOはLLM自体を報酬モデルの代わりとして使用することで、大規模なサンプリング、報酬モデルの調節、複雑なハイパーパラメータ調整を必要とせずに、モデルの出力を人間の好みに適合させる(PPOより安定し、効率的で、計算負荷が少ない)。

メモ2:「DPOによる言語モデルのファインチューニング」

www.cerebras.net

  • DPOはRLHFに代わる手法として登場したものであり、RLHFの基本原理を基礎としながらも異なる実装を持つ。DPOでは、RLHF的な損失関数を選好推定のためのBradley-Terryモデルと組み合わせて利用する。
  • これにより学習プロセスが単純化され、RLHFで採用されている複数モデルによる学習と複雑な強化学習最適化は不要になり、モデル収束の安定性も高まる。
  • BTLM(Cerebrasの独自LLM)等を用いた検証では、DPOの適用により会話タスクにおけるモデルの熟練度が向上するだけでなく、その他のさまざまな下流タスクのパフォーマンスも向上した。

  • また、DPOによる事前学習データの忘却について検証したところ、1)DPOによる知識の忘却はごく限られること、2)betaパラメータが大きいほど情報を保持しやすいこと、が示唆された。

  • 一方で、beta値が小さい(0.1 未満) と、チャット指向のデータセット(Anthropic-HH)において最適な結果が得られる。

  • 指示応答や要約に重点を置いたデータセット(SHP, Redditから収集した選好データ)ならbeta値が大きい(0.3 ~ 0.5の範囲)ほうが効果的だが、総じてチャットスタイルのデータセット(Anthropic-HH)の方がDPOに適している。
  • SFTとDPOの学習に異なるデータセットを使用することが効果的な可能性が示唆されるが、これは元のDPO論文の提案とは食い違っている。

メモ3:「DPOによるLLMの選好チューニング」

huggingface.co

  • この投稿では、有望な3つのLLMアライメントアルゴリズムである直接選好最適化(DPO)、同一選好最適化 (IPO)、カーネマン-トヴェルスキー最適化 (KTO) の実証的評価を行っている。
  • DPO:DPOは、LLMを人間やAIの嗜好にアライメントするための有望な選択肢として登場した。強化学習に基づく従来のアライメント手法とは異なり、DPOはアライメントの定式化を選好データセット上で直接最適化できる単純な損失関数として再構成する。
  • IPO:DPO の欠点の1つは、選好データセットに過剰適合する傾向があること。これを回避するため、Google DeepMindの研究者は、Identity Preference Optimisation (IPO)を導入した。これは、DPO損失に正則化項を追加し、早期停止などのトリックを必要とせずにモデルを収束までトレーニングできる。
  • KTO:ほとんどのアライメント方法と同様に、DPOではペアの選好データセットが必要で、アノテーターが有用性や有害性などの一連の基準に従って、どの応答がより良いかをラベル付けしなければいけない。現実的には、この作業には時間とコストがかかる。そこで、ContextualAIはKahneman-Tversky 最適化 (KTO)と呼ばれる代替案を考案した。これは、損失関数を「良い」または「悪い」とラベル付けされた個々の例 (たとえば、チャット UI に表示される 👍 または 👎 アイコン) に基づいて定義できる。
  • 以下は、ペア選好データセット(HuggingFaceH4/orca_dpo_pairs)を用いてZephyr-7b-beta-SFTおよびOpenHermes-2.5-Mistral-7Bのポリシー最適化を実行した結果である。

  • 少なくとも適切なbeta値においては、DPOが最もパフォーマンスの優れたLLMアラインメントアルゴリズムであることが示唆された。

メモ4:「Starling-LM-7B-beta」

sc-bakushu.hatenablog.com

  • 現在、7Bモデルで最もチャット性能が高いと評価されている「Starling-LM-7B-beta」では、DPOではなくPPOを採用している。
  • これはStarling-LMがすでにC-RLFTで微調整済みのOpenchat-3.5をベースにしているため。(DPOと類似性のある)C-RLFTのような手法で学習済みのモデルをさらに鍛えるには、DPOではなくPPOのほうが有望とのこと。

雑感

  • OpenHermes-2.5-Mistral-7BやOpenchat-3.5のような徹底したファインチューニングを経たチャットモデルにおいては、DPOによるチャット性能向上の余地は限られるようです。
  • やはりPPOとDPOは別物であって、パラメータの最適化と計算資源の確保の問題さえクリアできるならPPOのほうが有効性が高いように見えます。とはいえ、現実的に素人が個人でやるならPPOの選択肢は無さそうですが。
  • 知識追加のためのファインチューニングの観点では、おそらくSFTで知識そのものをインプットしたあとで、学習させた知識を出しやすくするための仕上げの工程でDPOを使うことになると思います。DPOによる知識の忘却はそれほど心配なさそうです(SFTモデルにDPOを上掛けしたモデルがたくさんある)。
  • DPOにおいて重要となるbeta値は、通常0.1程度が標準になっているようですが、その最適値は、目的/モデル/データセットに応じて完全にケースバイケースになるようです。