DeepSeek-R1은, Deepseek V3 pretrained된 base 모델을 reasoning할때 더 잘하게 하기 위해 강화학습을 적용한다.
기존 연구들은 엄청나게 많은 양의 supervised 된 데이터에 의존해서 모델 성능을 높인다. 그치만 DeepSeek R1은 무작정 데이터 양을 늘리는 대신, supervised data없이 reasoning capability를 높이는 방법을 소개한다. 아주아주 바람직한 방향인거 같다.
DeepSeek-R1은 먼저 Cold Start SFT로 모델이 초기 추론 구조를 익히도록 도와주고, 그 다음 RL을 통해 추론 과제를 중심으로 성능을 끌어올린다. 이후 대규모 자동 샘플링과 선별 과정을 통해 고품질 데이터를 재구축하고 두 번째 SFT를 수행한다. 마지막으로 ‘2차 RL’ 단계를 통해 모델을 align한다.
RL - GRPO
RL을 해주는 이유는 추론 능력을 집중적으로 개선하기 위해서이다. 논문에서는 PPO랑 비슷하지만 살짝 다른 GRPO를 제안한다. 이는 여러 샘플을 그룹 단위로 묶어 그룹 기준 보상 평균을 사용해 업데이트 안정성을 높이도록 설계되었다고 한다.
일반적인 PPO의 손실함수는 다음과 같이 표현된다:
\[ L^{\text{CLIP}}(\theta) = \hat{\mathbb{E}}_t \Big[\min\big(r_t(\theta) A_t,\; \text{clip}\big(r_t(\theta), 1-\epsilon, 1+\epsilon\big) A_t\big)\Big], \]
여기서 advantage \(A_t\) 와 확률비 \(r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t \mid s_t)}\)를 클리핑 기법으로 안정적으로 업데이트하는 방식이다. 논문에서 제안한 GRPO는 이때 샘플별 단독 function 대신 그룹 value baseline을 사용하고, 각 샘플이 그룹 평균 대비 얼마나 이점을 가져가는지를 평가함으로써 정책 업데이트가 지나치게 특정 샘플만 편향되지 않도록 한다.
DeepSeek-R1에서는 추론 과제의 정답 정확도와 언어 일관성을 반영한 보상 함수를 사용한다. 예를 들면, 어떤 영어 수학 문제에서 정답을 맞히면 \(R_{\text{acc}} = 1\), 틀리면 0을 준 다음, 해당 답변 내 영어 단어 비율(가령 0.95 이상이면 최대 0.2 보상)을 추가로 더해서 아래와 같은 형태의 총 보상을 만든다고 한다:
\[ R_{\text{total}} = R_{\text{acc}} + \alpha \cdot \bigl(\text{EnglishRatio}\bigr), \]
특수한 태스크(코딩 등)에서는 별도 보상을 추가할 수도 있다. 예를들어 코딩 태스크에서는 컴파일러가 reward function이 되겠다.
RL -Self-Reflection
흥미로운 점은, 1차 RL 과정에서 모델이 자체적으로 오류를 반성하고 다시 풀어보는 행동이 나타났다는 점이다. Aha! moment 가 있다고 한다. , 모델이 한 번 답안을 제시했다가 그 답이 잘못된 것으로 판명되면(보상이 낮다면), 다음 반복에서 그 잘못된 접근을 일부 재활용하면서 핵심 오류를 보정해보는 식의 “학습 행동”이 포착되었다고 한다. 이는 사람이 문제풀이 중 막히면 다시 이전 가정을 재검토하는 것과 유사하다
근데 진짜 이럴까.. 어쩌다 저렇게 생각하는거지 않을까 싶긴 하다.
2차 RL
1차 RL 후, 논문에서는 대규모 Rejection Sampling과정을 통해 고품질 응답만 골라 다시 한 번 SFT를 수행하고, 이어 2차 RL을 한다. 이 단계에서는 단순히 “정답 맞춤” 뿐 아니라, 인간 선호도와 Harmlessness을 반영하기 위해 별도의 학습된 Reward Model을 도입한다. 문제가 정답이 없는 일반 대화나 창의적 답변인 경우, 해당 RM이 응답의 유용성을 평가하여 높은 점수를 주도록 설계된다.
요약하면, 2차 RL 단계에서는
- 추론 과제에 대해선 정확도 중심의 정량적 보상 적용
- 기타 대화(잡담, 작문 등) 영역에 대해서는 주관적 선호도를 학습한 RM 보상 적용
Result
Implicit thinking이라.. 모델안에서 저렇게 생각하게 된 명확한 이유를 알려주는 줄 알았는데, 그냥 강화학습을 했더니 모델이 스스로 aha moment 를 창조해서 더 생각하게 되었다는 내용인거 같아서 좀 아쉽다. 학습하면 할수록 token을 더 많이 뱉는다는게 확실히 생각이라는걸 더 깊이하는구나! 까지는 알겠는데 여전히 블랙박스인거 같다.
그리고 언어를 혼용하는거를 loss로 주면 성능에 영향이 조금 있을 수 있다는 연구결과가 있었다고 하는데 관련 논문도 읽어봐야겠다. 이게 진짜라면 차라리 loss를 주는것보다는 알아서 맘대로 생각하게 해서 막판에 번역을 하는게 낫지 않을까 싶긴하다.
Distilation부분도 조금 더 자세히 설명되어있었으면 좋았을법 했다.