DeepSeek-R1の技術的詳細
DeepSeek-R1: 世界最高推論性能のOSSモデル
こんにちはYosematです。
中華系のAI技術が進化していますね。OpenAIなど研究開発を進めて手法が確立されてきたタイミングで参入することで莫大な試行錯誤のコストを節約しお安いコストで仕上げている印象を受けています。
今日はぶっちぎりの話題性を誇るDeepSeek-R1について解説します。一般の読者が「お気持ちはわかった」状態になることと関連分野をかじってる人が「完全に理解した」状態になることを目指します。
DeepSeek-R1とは
DeepSeek-R1は
- OSSの大規模言語モデル
- OpenAI o1に並ぶ性能を示す推論モデル
- 強化学習頼みで進化したモデル
です。
APIも公開されていますがOutput Tokenあたりの値段はo1に比べて20倍以上安いです。
利用者目線でのすばらしさや社会に与える影響の考察は他の記事に譲ることにしてここでは技術的詳細を見ていきましょう。
推論モデル
推論モデルは私が作った造語です。OpenAI o1やGemini Experimental Advancedもこのカテゴリにはいります。逆にGpt-4oやGemini 2.0 Flashなどを丸暗記モデルと呼ぶことにします。
丸暗記モデルはもうスケールしない
推論モデルが台頭してきたのは人類がWeb上にある学習データを使いつくした(しつつある)からです。
OpenAI創業者の一人Ilya SutskeverはデータはAIの化石燃料であると述べており学習データとパラメータの増加でAIの性能を向上させていく大規模丸暗記モデルの時代は終焉を迎えたのです。
推論時にいっぱい考える
推論モデルはどうするか?といえば推論時の計算を増やします。
推論の過程を以下のように
- ユーザープロンプト
- 思考過程
- レスポンス
という形に変形していきなり回答を返すのではなく思考過程を述べてからレスポンスを生成させます。ChatGPTでo1モデルを叩いてユーザーに返ってきているレスポンスはこのo1 Outputの部分ですが、実際にはo1はもっとたくさん思考をしています。
OpenAI o1 System Cardより
DeepSeek-R1の学習データのプロンプトテンプレートにも<think></think>で囲まれた思考過程を出力した後にユーザー向けのレスポンスを出力するように指示がされています。
DeepSeek-R1 Paperより
Chain of Thoughtとの違い
もともと一発で答えを出力させるのではなく思考過程を併せて出力させることでAIの推論性能が向上することはChain of Thoughtと呼ばれるプロンプトテクニックとして広く知られていました。
このようなプロンプト技術は丸暗記モデルを無理やり推論モデルへと変える偉人達の工夫の積み重ねです。推論モデルはさらにこの思考プロセスを推論時のプロンプトテクニックとしてだけでなく学習データにも組み込むことを考え始めたモデルです。
これはYosematの解釈も混ざっていますが推論モデルには2つの魅力があります。
1つ目は人間の思考過程を学習できることです。人間の持っている答えを導き出す力は、その思考プロセスに支えられています。高品質な思考過程を収集して模倣することでより高度な推論を可能にします。
2つ目は計算量が増えることです。Transformerの計算量は系列長の2乗に比例します。ですが問題の難しさは系列長の2乗には比例しません。例えば次のような会話を考えればそれは明白でしょう。
問:n=2のとき
答:16
nを3に替えたときの答えはおよそ
<think>---可変長な思考プロセス---</think>という出力を加えることによって言語モデルはこの問題を攻略することができます。思考過程データ"---可変長な思考プロセス---"をたくさん用意できれば。
DeepSeek-R1-Zero: データ収集を怠った強化学習
前提:言語モデルにおける強化学習のお気持ち(詳しい人はスキップ推奨)
DeepSeek-R1に限らずすべての言語モデルがNext Token Predictionによる丸暗記の後に人間から見た好ましさを最大化するための強化学習(Reinforcement Learning from Human Feedback)を行います。RLHFの記事は別で書いておりますが詳細はそちらを読んでいただきたいですが、ここではRLHFの2つの嬉しさを共有します。
1つ目は学習データを用意しやすいことです。
RLHFで要求されるのは人間が書いた文章ではなくAIが書いた文章に対する評価です。評価の粒度は低いものから高いものまでありますが簡単なものでは「2つのAIの出力のうちのどちらが好きか」を収集したデータで十分です。
数学の世界にはP≠NP予想なんてものもありますが人の答えを批評するほうが実際に答えにたどり着くよりも楽です。
2つ目は教師を越えられることです。
世界最速のアスリートであるウサインボルトにはこれ以上模倣すべき対象はいません。では彼にコーチはいらないのでしょうか?
そんなことはありません。トップアスリートの傍にはいつも口うるさいコーチがいて文句を垂れてきます。そのフィードバックから学習することこそがトップアスリートが進化を追求する唯一の道です。
言語モデルは正解データから得られる知見のほとんどを手に入れました。後はフィードバックによって進化するしかないのです。AIにとってそれは強化学習です。
強化学習ではAI Agentはアクションに対してフィードバック(報酬)が返ってくるフィードバックシステムが必要です。この報酬を最大化することで丸暗記モデルを人間好みに調教していくのが強化学習の目的です。
この報酬の設計はいつも難しい課題です。人間が生成結果に対して毎度「今回は30点だね」と評価するのでは時間がいくらあっても足りないのでRLHFの第一歩は人間に代わって自動で文章を評価する報酬モデル
このようなモデルを学習した後
という最大化問題を解きます。
GRPOの詳細
強化学習ではなんと2017年に提案されたPPOという手法が猛威を振るってきました。しかし言語モデルは桁違いに大きいので、コストを抑えるために様々な調整が提案されてきています。
GRPOを説明する素敵なブログもあるのでこちらを見ていただくといいと思いますがこの記事でも簡単に説明します。
PPOの学習にはアドバンテージと呼ばれるモデルが基準よりどのくらいいいパフォーマンスをすることができたかを示す値を計算する必要があります。
アドバンテージの計算には基準となる評価関数モデル
GRPO採用のモチベーションはPPOに登場するこの評価関数モデル
GRPOの目的関数はこんな感じになっています。
この計算式において基準評価関数の値を
で近似しました。
GRPOの式のお気持ちがわかりたい人向け
式がゴツいのはGRPOではなくオリジナルPPOの責任です。
minとかclipとか気持ち悪いものを一旦無視してください(彼らは学習の安定化の役割を果たしています)。そうするとざっくり次のように読めます。
RLHFの真の目的関数はこれでした。
アドバンテージが大きい確率を最大化しろ、というのはまさに真の目的関数の第一項である報酬を最大化しろ!と同じことをいっているのがわかりますね。
人間のフィードバックデータなしで強化学習ができるか
RLHFは報酬モデルの学習から始まると書いたばかりですが彼らは報酬モデルの学習を嫌いました。汎化性能の高い報酬モデルを作るのが難しすぎるからです。
代わりにDeepSeekはルールベースの報酬から学習します。ルールベースで文章の評価なんて普通はできません。DeepSeekは報酬がルールで自動計算できる一部のタスクのみによって強化学習を実施します。
例えば
- 正解が一意に定まる質疑応答
- 挙動が正確であるかをテストケースを使って正確に判断できるプログラミング問題
などを用います。
私見ですが言語モデルの性能を評価するベンチマークもこのような自動計算できるタスクを活用しているのでベンチマークに対する性能が異常に高く出ている可能性は指摘しうる気がします。
フィードバックデータであっても高度な問題になると収集するのが困難になることは当然予想されるわけで、データ収集をスキップできることのメリットは極めて大きいといえます。
思考過程データなしで推論モデルを作れるか
この論文のサビです。
推論モデルを作るために思考過程データを集めることができればそれが一番いいんですが、人間に「あなたが今頭の中で考えていることをどんどん書いていってください」とお願いして回るのは無理筋な気がします。
DeepSeek-R1はこのデータを集めるのを諦めました。代わりに推論過程を強化学習のみで獲得します。
推論モデルには人間の思考過程を学習できることと計算量が増えることの2点の嬉しさがあると述べましたがこれは1つ目の嬉しさを諦めたことになります。
このような例は囲碁AIのAlpha GO Zeroなどで前例があります。教師データを一切使わず勝敗というフィードバックのみから学習することにしたのです。
気を付けてください。報酬は思考過程を無視して計算されます。これがどんな結末になるかわかりますか?人間にとって全く意味のない思考過程が出力される恐れが多分にあります。
しかしこれが想像以上にうまくいくことや、思ったよりは読みやすくて人間らしい思考を行うことが結果として示されています。
強化学習のみで学習したDeepSeek-R1-Zeroが人間らしく間違え、それを修正する様子(論文より)
DeepSeek-R1: 実用的なテクニックを添える
DeepSeek-R1-Zeroはデータいらずの美しい手法でしたが、実用面では以下の課題があります。
- 思考過程が人間に読みにくい
- ルールで報酬が計算できないドメインに対処できない
これらの問題に対処するために新しくもなければ楽しくもない、しかし実用的な以下のソリューションを添えます。
思考過程データを使ったロケットスタート
あれだけデータ収集を嫌がってきたくせにちゃぶ台返しのようですが人間にとって納得感があり可読性の高い高品質なデータを少量収集します。強化学習の前にこのデータを使って言語モデルを教師あり学習させます。
結果的に可読性の高い思考プロセスだけでなくより高いパフォーマンスに至れるそうです。囲碁や将棋の世界と違って人間が築いてきた知見はまだ言語モデルには有用なようですね。今のところは。
ルールで報酬を自動計算できないドメインのための教師データ
ルールで解ける問題と解けない問題がありますよね。解けない問題の部分に関してしょうがなく教師データを用意しました。これにはRejection Samplingを利用します。これまでのステージで作ってきた言語モデルにたくさん生成させてみて、出力の中から良いものだけを抽出することで正解データを収集するというのが主なアイデアです。
良いものの抽出を行う際にはDeepSeek-V3(R1の前身)に人間の推論過程とモデルが作った推論過程を見比べさせ人間のものと区別がつくかどうかなどを判断材料としました。
普通のRLHF
一番最後に普通のRLHFを行うことで性能を追い込みます。
ルールが使える問題にはルールベースの報酬、そうでない問題には報酬モデルを使って出力が人間好みになるように仕上げました。
性能評価
コモンベンチマーク
性能いいですね。OSSモデルがOpenAI o1を比較テーブルに含めるなんて恐ろしいことです。
テーブルの右3列が推論モデルです。コーディングタスクと数学タスクでは丸暗記モデルとの差が浮き彫りになっていますね。
コーディング面で必ずしもOpenAI o1に優位性を確保できているわけではないところは研究のデザインを考えると少々以外でしたが予算規模を考えればむしろできすぎです。数学分野の圧倒的な性能も素晴らしい。
蒸留モデル
DeepSeek-R1をQwen-1.5Bなどの軽量OSSモデルに蒸留してみました。
蒸留とは大きいモデルの知識を吸い出して小さくて性能いいモデルを作る技術です。小さいモデルが大きいモデルと同じ確率ベクトルを出力するように学習することでデータいらずなのにデータを使って直接学習するよりも高効率な性能が期待できるコスパのいい手法となっています。
7BのQwenがo1-miniとCompetitiveに見えるのは気のせいでしょうか。
失敗した試み
学習の過程でうまくいかなかった試みについても論文の最後に述べられています。
Process Reward Model
RLHFでは出力全体に対して報酬を計算するのが一般的ですが、思考過程レベル=センテンスレベルやトークンレベルでの報酬を計算するのがProcess Reward Model(PRM)です。
しかしながらこのような細かい粒度でのフィードバックデータの収集や自動生成は結果的にコストとリターンが見合わず採用を見送ることになりました。
Monte Carlo Tree Search
Monte Carlo Tree Search(MCTS)は囲碁AIのAlphaGoから愛用されてきた手法で複数の手法とその評価を同時検討する仕組みです。文章をいくつかのブロックにわけて生成しながらAI自身がその途中経過の評価を行い有望なアクションをとっていく形になります。推論時にMCTSを活用することで更なる性能の進化を目指しました。
ゲームの世界では非常に有効でしたが、文章をいくつかのブロックにわけることのむずかしさと行動空間の広さが課題となって現実的なソリューションに落ち着かせることはできませんでした。
最後に
私はGoogleやOpenAIの社員ではないので分相応に小さい言語モデルをつかってドメイン特化の課題を解くことに興味をもっています。そんな中で、ドメインの教師データを用意することはいつも最大の課題になりがちです。
そんな中でDeepSeek-R1のデータ収集を怠った試みは非常に興味深いです。同じ方向性の研究の今後の発展に大いに期待したいと思っています。
Discussion