DeepSeek-R1 알아보기

DeepSeek-R1 알아보기
Photo by Mike Doherty / Unsplash

안녕하세요, 이번 포스팅에서는 DeepSeek에서 공개한 reasoning model, DeepSeek-R1의 기술 문서를 살펴보면서 과연 DeepSeek-R1은 어떤 모델인지 알아보는 시간을 가져보겠습니다.

중국의 기업 DeepSeek은 최근 값싸고 좋은 성능의 DeepSeek-V3 모델을 공개하여 LLM계의 강자로 급부상하고 있는데요, 2025년 1월 20일 DeepSeek-R1이라는 오픈소스 추론 모델을 공개하여 또 한번 주목을 받고 있습니다. 자체 벤치마크에 따르면, OpenAI-o1에 준하는 혹은 그 이상의 성능을 보인다고 하고, 특히 모델 개발 과정을 비교적 상세히 기술한 문서를 함께 공개하고 있어 오픈소스 LLM 연구에 많은 영감을 줄 것으로 기대가 됩니다. "Open-AI"를 OpenAI보다 더 몸소 실천하고 있는 게 DeepSeek이라는 것이 아이러니하네요. 😅 그럼 지금부터 DeepSeek-R1 기술 문서를 상세히 파헤쳐보도록 하겠습니다.

요약

DeepSeek-R1의 벤치마크 성능. OpenAI-o1-1217에 준하는 성능을 보인다.
  • DeepSeek-R1-ZeroDeepSeek-R1이라는 두 종류의 reasoning model을 오픈소스로 공개했습니다. 두 모델 모두 DeepSeek-V3-Base 모델 기반으로 reasoning을 위한 추가 학습을 진행하여 얻은 모델입니다.
  • DeepSeek-R1-Zero는 supervised fine-tuning (SFT) 없이, 오로지 large-scale reinforcement learning (RL)로만 학습되었음에도 불구하고 훌륭한 reasoning 성능을 보여줍니다. 다만, 결과물의 가독성이 떨어지고 출력 언어가 뒤섞여서 나타난다는 단점이 있습니다.
  • 이러한 문제를 해결하기 위해 정제된 cold-start 데이터를 사용하고, multi-stage 학습을 수행하여 DeepSeek-R1 모델을 얻습니다.
  • DeepSeek-R1 모델은 reasoning task들에서 OpenAI-o1-1217에 준하는 성능을 보여줍니다.
  • 위의 두 모델과 더불어, DeepSeek-R1 기반의 distilled model 6종 (1.5B, 7B, 8B, 14B, 32B, 70B)을 공개했습니다. 이 모델들은 Qwen과 Llama 기반으로 학습되었습니다.

들어가며

최신 LLM 개발 동향을 살펴보면 post-training이 pre-training 만큼이나 중요한 요소로 떠오르고 있습니다. 잘 학습된 pre-trained LLM을 가지고, 어떤 방식으로 후속 학습을 수행하느냐에 따라서 reasoning 성능이 향상되기도 하고, 사회적인 가치에 부합하는 모델이나 개인 맞춤형 모델을 만들어낼 수도 있죠. 이 작업들을 pre-training에 비해 매우 적은 비용으로 수행할 수 있다보니 이 post-training에 많은 연구들이 이루어지고 있는 추세입니다.

Reasoning 성능 면에서 살펴보자면, OpenAI o1 계열 모델들은 inference-time에 명시적으로 chain-of-thought 과정의 길이를 늘임으로써 수학 및 과학 문제 해결, 코딩 등의 reasoning task들에서 좋은 성능을 보일 수 있었던 것으로 보입니다. 다만 o1 역히 여타 OpenAI 모델들과 같이 그 학습 과정을 쉽게 알 수 없는데요, OpenAI의 공식 문서에 따르면, o1 학습에는 large-scale RL이 사용되었으며, "데이터 효율성이 좋은(data-efficient)" 학습이 이루어졌다는 정도만을 힌트로 얻을 수 있을 뿐이었습니다. 잘 labeling된 chain-of-thought 데이터가 아니어도 학습에 사용할 수 있었다는 의미로 추측해볼 수 있겠습니다.

DeepSeek-R1 또한 여기서 영감을 얻었을지는 모르겠지만, 순수하게 RL 기반으로 reasoning 학습을 수행하는 것을 목표로 합니다. 마치 AlphaZero가 사람이 만든 바둑 기보 없이도 바둑을 마스터할 수 있었던 것처럼, reasoning과 관련된 label (chain-of-thought annotation) 없이도 모델이 RL 프레임워크 안에서 스스로 reasoning하는 법을 배울 수 있는지를 알아보고자 하는 것이죠.

DeepSeek-R1-Zero

RL을 이용하여 reasoning 학습이 가능한지 알아보기 위해, DeepSeek-R1-Zero는 supervised fine-tuning (SFT)에 의존하지 않고, 오로지 RL만을 이용하여 chain-of-thought 경로를 탐색할 수 있도록 학습되었습니다.

RL 알고리즘

DeepSeek-R1-Zero는 RL 학습에 Group Relative Policy Optimization (GRPO)를 사용합니다. 이는 DeepSeekMath 논문에서 제안된 방법으로서, 이전까지 RL을 이용한 LLM fine-tuning에 주로 사용되어왔던 Proximal Policy Optimization (PPO)와는 달리 value model을 두지 않고, 같은 입력에 대한 여러 sampled output의 reward 값의 평균을 baseline으로 대신 사용하여 더 효율적인 학습이 가능하게 하는 방법입니다. 더 자세한 내용은 DeepSeekMath 논문을 참고해주세요!

Reward 정의

모델의 출력값을 평가하는 척도인 reward 정의는 RL 학습에 있어 꼭 필요합니다. DeepSeek-R1-Zero에서는 아래와 같이 매우 간단한 rule-based reward 정의를 이용합니다.

  1. 정확도 (accuracy reward) : 마치 바둑에서 최종 승리에 reward를 부여하는 것처럼 reasoning 결과로 모델이 내놓은 결과가 정답일 때 reward를 부여합니다.
  2. 출력 형식 (format reward) : 학습 시에, 모델은 사고 과정을 <think> 와 </think> 태그 사이에 넣도록 출력 형식이 주어집니다 (아래 참조). 이 출력 형식을 맞추었는지에 대한 reward가 되겠습니다.

학습 프롬프트 템플릿

DeepSeek-R1-Zero 학습 시 사용한 프롬프트 템플릿. prompt 부분에 학습에 사용하는 reasoning question이 삽입된다.

모델이 입력 프롬프트에서 힌트를 얻어서 reasoning 경로를 구성하지 않고, 오직 RL 학습 프레임워크 상에서 reasoning이 학습되도록 강제하기 위해서 DeepSeek-R1-Zero 학습에는 위와 같은 정해진 형식의 프롬프트 템플릿이 사용됩니다.

학습에 따른 성능 향상 추이

DeepSeek-R1-Zero 학습 스텝 수에 따른 AIME (수학 경시대회) 벤치마크 성능. Step=0은 Base model인 DeepSeek-V3 성능으로 보면 될 듯.

학습이 진행됨에 따라, reasoning task에서 굉장히 큰 폭으로 성능이 향상됨을 확인할 수 있습니다. AIME 2024에서의 pass@1 (1번의 도전으로 정답을 맞춘 비율) 점수가 15.6%에서 71.0%로 껑충 뛰어올랐네요. 이는 OpenAI-o1-0912의 성능과 유사한 수준입니다. RL 학습이 잘 작동함을 알 수 있습니다.

추가적으로, 다수결(majority voting) 전략을 사용 시 성능이 더 향상될 수 있음을 보여줍니다. 16번 도전한 다음, 가장 많이 정답으로 제시된 값을 정답으로 삼는 거죠. 일종의 앙상블이라 보면 되겠습니다. 이 경우, DeepSeek-R1-Zero의 성능은 71.0%에서 86.7%로 더욱 향상되어 OpenAI-o1-0912의 성능을 뛰어넘는 결과를 보여주네요.

모델의 사고 과정의 자가진화 (self-evolution)

학습이 진행됨에 따라 모델의 chain-of-thought 과정이 길어짐을 확인할 수 있다.

다음으로 학습 과정에서 모델의 reasoning이 어떻게 변화하는지 확인해보았습니다. 재미있게도, 학습이 진행됨에 따라서 모델의 chain-of-thought 과정은 일관되게 증가합니다. 즉, 정답을 맞추기 위해서는 더 많은 사고 과정을 거쳐야 함을 배우고 있다는 것이겠죠! 이 학습 과정이, "사고 과정" 자체를 label로 제공한 supervised fine-tuning이 아닌, 문제와 정답만을 제공하고 자유로운 사고 과정을 허용한 RL 프레임워크 하에서 이루어졌다는 것을 생각하면, 놀라운 결과라고 생각이 드네요.

모델의 사고 과정을 자세히 들여다보면 더욱 놀랍습니다. 더 많은 test-time computation을 허용할수록 이전의 사고 과정을 검토하는(reflection) 등의 행동이 관찰되기 시작한다고 하는데요, 모델에게 어떠한 가이드도 주지 않았음에도 이러한 사고 패턴을 학습할 수 있었다는 점이 굉장히 흥미롭습니다.

깨달음의 순간 (Aha-moment)

Aha-moment를 만난 모델. DeepSeek-R1-Zero의 최종 버전은 아니고, 학습 중간에 이런 현상이 나타났다고 한다.

사고 과정의 진화를 보여주는 단적인 예시로, 모델이 스스로 무언가를 깨우치는 "aha-moment"를 사고 과정 도중 만나는 것을 확인했다고 합니다. 이 무렵에는 모델이 자신의 초기 해결책을 다시 검토하는 데 시간을 많이 할애한다고 하네요.

저자들도 이 Aha-moment가 마음에 들었는지, 약간은 감상적인 투로 자신들의 느낌을 전하고 있습니다.

이 순간은 단지 모델 뿐 아니라 이를 관찰하는 연구자들에게도 깨달음의 순간으로 다가옵니다. 이는 강화학습의 힘과 아름다움을 보여줍니다: 문제를 푸는 방법을 하나하나 가르치지 않았음에도, 적절한 보상만을 주었더니 스스로 문제를 해결하는 전략을 세우는 법을 학습한 것이죠. 이 "aha-moment"는, 문턱을 넘어 새로운 수준의 인공지능을 만들어내는 도구로써 강화학습의 잠재력을 보여주는 매우 확실한 단서입니다.

DeepSeek-R1-Zero의 단점

Reasoning 학습에 있어 RL 프레임워크의 효과를 충분히 확인했지만, 실제 사용에 있어 DeepSeek-R1-Zero는 아래와 같은 단점이 있다고 합니다.

  • 낮은 가독성
  • 여러 언어들이 섞인 출력 결과

DeepSeek-R1

DeepSeek-R1-Zero의 유망한 결과를 보면, 아래를 생각해볼 수 있습니다.

  1. DeepSeek-R1-Zero에서는 학습 시작 시 전체 학습의 방향을 가이드하거나 가속화할 수 있는 cold-start 데이터를 사용하지 않았습니다. 질 좋은, 적은 양의 cold-start 데이터를 활용해서 모델 학습을 시작한다면 성능이 더 좋아지거나 수렴이 빨라질까요?
  2. 서비스 측면에서, reasoning 성능은 물론 중요하지만 그만큼 중요한 것은 사용자에게 얼마나 투명한 결과를 보여주느냐입니다. Chain-of-thought 경로를 잘 구성해서 보여주는 모델이나, general capability가 좋은 모델을 만들 수 있을까요?

Cold-start 데이터

DeepSeek-R1-Zero와는 달리 DeepSeek-R1 학습의 극초반에는 적은 수의 long-CoT 데이터를 사용합니다. DeepSeek-R1-Zero에서는 모델이 무모한 시행착오를 거쳐야 해서 초반 학습이 불안정했다면, DeepSeek-R1의 경우 이 long-CoT가 일종의 "좋은 policy를 보여주는" RL actor로서 기능하여 fine-tuning을 안정화시키기를 기대해볼 수 있겠습니다.

아래 방법을 사용하여 수천 개 정도의 cold-start 데이터를 사용했다고 합니다.

  • Long-CoT를 예시로 준 few-shot prompting을 통해 얻은 출력
  • 결과 검토(reflection)와 확인(verification)을 강제하는 프롬프트를 사용한 출력
  • DeepSeek-R1-Zero 출력
  • Human annotator가 직접 수정한 결과

이렇게 cold-start 데이터를 사용하는 이점은 아래와 같습니다.

  • 가독성 (Readability): DeepSeek-R1-Zero의 출력은 여러 나라의 언어가 섞여 있고, 마크다운 포맷으로 구성되어 있지 않아서 사용자 친화적이지 않습니다. (당연히 정답만 맞추면 되니까 이런 식으로 학습되었겠죠?). 반면 DeepSeek-R1의 cold-start 데이터는 잘 정제된 데이터만 사용하여 모든 답변의 끝부분에는 사고 과정의 요약이 담겨 있도록 구성했다고 합니다. 이렇게요: |special_token| <reasoning_process> |special_token| <summary>
  • 성능 잠재력 (Potential): 인간의 사고 과정을 모방하도록 cold-start 데이터를 구성한 결과, DeepSeek-R1-Zero보다 더 좋은 성능을 보였다고 합니다.

Reasoning-oriented Reinforcement Learning

이렇게 cold-start 데이터를 사용한 fine-tuning이 끝나고 나면, DeepSeek-R1-Zero와 같은 방식의 RL 학습이 진행됩니다. 이 과정에서는 코딩, 수학, 과학, 논리추론 등 정답이 확실히 정해져 있고, 복잡한 사고 과정을 거쳐야 하는 데이터들을 주로 활용했다고 합니다.

Cold-start 데이터를 활용했지만 여전히 CoT 상에 여러 언어가 섞여 나타나는 현상이 가끔 발생했다고 합니다. 이를 완화하기 위해, 목표 언어가 CoT에 얼마나 많은 비중으로 나타나는지를 계산한 "언어 일관성" reward를 추가하였다고 합니다. 이 reward의 사용으로 인해서 약간의 성능 하락이 있기는 했지만, 서비스적인 측면에서는 꼭 필요한 작업이라 볼 수 있겠습니다.

Rejection sampling을 통한 SFT 학습 데이터 생성

Reasoning-oriented RL 단계가 끝나게 되면, 다음 학습 round인 Supervised fine-tuning을 위한 데이터를 현재까지 학습된 파라미터로부터 만들어냅니다. Supervised fine-tuning을 위해서는 질 좋은 (CoT, 정답) 데이터가 필요한데, 이를 위해서 rejection sampling 전략을 취합니다. 쉽게 말해, 일단 모델로 하여금 (CoT, 정답) 쌍을 생성하게 하고, 이를 어떻게든 평가하여 질 나쁜 데이터는 제거하는 전략입니다. 아래와 같은 방식으로 걸러냅니다.

  • Generative reward model : 이전까지는 단순히 rule-based reward만 사용했다면, 여기서는 DeepSeek-V3에게 (CoT, 모델이 예측한 정답, 진짜 정답) 쌍을 제공하여 데이터의 점수를 매기도록 합니다
  • CoT filtering : 언어가 섞여 있는 경우, 문단이 너무 긴 경우, 코드 블럭이 포함된 경우 제거합니다. (CoT에 코드도 쓰나보네요)
  • 정답 filtering : 프롬프트 하나 당 여러 (CoT, 정답) 쌍을 생성하고 그 중 진짜 정답을 맞춘 경우만 사용합니다.

이 과정을 거쳐 총 600,000개의 reasoning-related SFT 학습 셋을 꾸릴 수 있었습니다.

Non-reasoning 데이터

DeepSeek-R1은 reasoning 뿐 아니라, 범용적으로도 활용 가능하게 학습하고 싶었다고 합니다. 이를 위해 DeepSeek-V3 학습 시 사용했던 데이터 처리 파이프라인과 DeepSeek-V3 학습 SFT 데이터 일부를 사용했다고 하네요. 이를 통해 총 200,000개의 non-reasoning 셋을 꾸렸습니다.

이렇게 모은 총 800,000개의 데이터를 2 epoch동안 학습하여 SFT 과정을 진행하게 됩니다.

Human preference를 반영한 2차 RL 학습 (Safety RL)

Reasoning capability를 더 향상시키고, 동시에 모델의 helpfulness와 harmlessness를 확보하기 위해 끝으로 한 번 더 Safety RL 학습을 진행하게 됩니다. Reasoning 데이터의 경우 DeepSeek-R1-Zero 의 rule-based reward를 똑같이 사용하며, general 데이터의 경우에는 human preference에 더 맞는 방향으로 reward를 설정하여 학습을 진행합니다.

Distillation

지금까지 DeepSeek-R1-Zero와 DeepSeek-R1 모델의 학습 방식에 대해 알아보았습니다. 끝으로, DeepSeek-R1 모델의 distillation을 통해 훨씬 크기가 작은 Qwen, Llama 모델들의 reasoning 성능이 얼마나 향상될 수 있었을지 알아봅시다.

DeepSeek-R1의 SFT phase에 사용했던 800,000개 데이터를 기억하시나요? DeepSeek-R1 모델의 distillation 과정에는 이 데이터를 활용합니다. 기반 모델은 아래의 6개 모델이 되겠습니다.

  • Qwen2.5-Math-1.5B
  • Qwen2.5-Math-7B
  • Qwen2.5-14B
  • Qwen2.5-32B
  • Llama-3.1-8B
  • Llama-3.3-70B-Instruct

참고로 distillation 시에는 SFT만 사용하고, RL은 사용하지 않았다고 합니다. 이 분석의 목적은 RL로 reasoning을 학습한 모델의 distillation이 얼마나 효과적인지 알아보기 위함이니까요!

벤치마크

DeepSeek-R1 벤치마크

DeepSeek-R1 모델 벤치마크 (가장 오른쪽 줄)

DeepSeek-R1 모델의 성능 벤치마크는 간단히만 요약으로 짚고 넘어가겠습니다.

  • MMLU, MMLU-PRo, GPQA Diamond와 같은 지식 벤치마크에서는 DeepSeek-V3를 능가하는 성능을 보였습니다.
  • Long-context-dependent QA 벤치마크인 FRAMES 벤치마크에서 훌륭한 성능을 보였습니다. 문서를 읽고, 서로 멀리 떨어진 지식 간의 관계를 잘 연결한다는 의미입니다.
  • SimpleQA와 같은 언어모델 사실성 벤치마크에서 DeepSeek-V3를 능가했습니다. Hallucination이 더 적거나, 쿼리와 학습된 지식 사이의 연결을 잘 찾는다는 것으로 볼 수 있겠습니다.
  • 다만, Chinese SimpleQA 벤치마크에서는 오히려 DeepSeek-V3보다 낮은 성능을 보였는데, 이는 Safety RL 학습 때문에 특정 query에 대한 응답을 거부했기 때문이라고 합니다. Safety RL 학습이 없으면 >70% 성능이 나온다고 하네요.
  • Format instruction을 얼마나 잘 따르는지 보는 벤치마크인 IF-Eval에서 좋은 성능을 보였다고 하는데, 테이블에는 DeepSeek-V3보다 하락한 수치입니다. 기재 오류일까요?
  • 수학 문제 해결 task에서는 OpenAI-o1-1217과 유사한 성능을 보였습니다. 코딩 벤치마크에서도 마찬가지네요.
  • 소프트웨어 공학 관련 벤치마크 Aider-Polyglot 에서는 OpenAI-o1-1217보다는 약간 떨어지는 성능을 보였습니다. SWE verified에서는 비슷한 성능입니다.

Distilled model 벤치마크

6종의 distilled 모델의 성능은 어땠을까요? DeepSeek-R1의 힘을 잘 물려받아서 reasoning task를 잘 해결할 수 있었을까요?

DeepSeek-R1이 생성한 데이터로 학습된 distilled 모델 벤치마크.
  • DeepSeek-R1의 출력을 distill했을 뿐인데, DeepSeek-R1-Distill-Qwen-7B 모델이 무려 GPT-4o-0513 모델을 능가하는 모습입니다. Reasoning 모델과 non-reasoning 모델의 극명한 차이를 보여주네요.
  • DeepSeek-R1-Distill-Qwen-14B는 QwQ-32B-Preview를 능가합니다.
  • DeepSeek-R1-Distill-Qwen-32B와 DeepSeek-R1-Distill-Llama-70B는 o1-mini를 능가합니다.
  • 이 Distilled 모델에 추가적인 RL 학습을 수행하면, 성능이 더 향상된다고 합니다! (보여진 결과는 없음)

Distillation vs RL

DeepSeek-R1이 만들어준 800,000개 reasoning 학습 데이터의 힘을 확인할 수 있습니다. 그렇다면, reasoning 학습에 이 800k 데이터를 활용하여 SFT를 수행하는 것과, DeepSeek-R1-Zero처럼 RL을 수행하는 것 중 어떤 것이 더 좋을까요?

DeepSeek-R1-Zero-Qwen-32B : Qwen-32B 모델을 RL 학습, DeepSeek-R1-Distill-Qwen-32B : DeepSeek-R1이 생성한 데이터로 distillation

위는 Qwen-32B 모델을 RL 학습한 DeepSeek-R1-Zero-Qwen-32B 모델과, DeepSeek-R1 모델이 생성한 reasoning 데이터로 distillation된 DeepSeek-R1-Distill-Qwen-32B 모델의 성능을 비교한 결과입니다. RL 학습으로도 QwQ-32B-Preview와 유사한 reasoning 성능을 달성할수는 있지만, distillation에 비해서는 효과적이지 못한 모습이네요.

아래와 같은 두 가지 결론을 내릴 수 있겠습니다.

  1. 큰 모델을 작은 모델로 distillation하는 것은 매우 효과적이고, 심지어 작은 모델을 large-scale RL 학습하는 것으로는 달성할 수 없는 지점까지 성능을 끌어올려줄 수 있다.
  2. 반대로 말하면, distillation은 분명 경제적이고 효과적인 학습 전략이긴 하지만, 어찌됐든 이 distillation을 위한 큰 모델의 학습은 궁극적으로는 꼭 필요하다.

결론

오늘은 DeepSeek-R1 기술 문서를 살펴보면서, 어떤 식으로 LLM에 reasoning 능력을 부여할 수 있는지 알아보는 시간을 가져보았습니다. 아주 간단한 RL reward와 좋은 학습 전략이 있을 때, 모델이 "사고하는 방법" 자체를 점차적으로 배워나가는 현상이 발생한다는 것을 확인할 수 있었습니다. 개인적으로는 그 과정의 chain-of-thought이 다양한 언어 (심지어 코드로도!) 로 나타난다는 단점도 오히려 긍정적으로 해석이 되더라구요. 언어의 제약조건이 없어서 그렇지, 출력 언어로 표상된 것의 기저에 깔린 사고 과정에 집중하여 모델이 학습하고 있다는 방증이 아닐까 싶습니다.

DeepSeek-R1-Zero, DeepSeek-R1 및 6종의 distillation 모델이 오픈소스로 공개되었기 때문에 이 reasoning 모델을 바탕으로 하여 또 어떤 방식으로 LLM 연구/개발의 트렌드가 바뀌어갈지 귀추가 주목되네요. 읽어주셔서 감사합니다!