- 들어가며 — "생각하게 만든다"는 말은 무엇을 뜻하는가
- 1부 — 프롬프트로 생각시키던 시절 (2022)
- 2부 — 생각을 학습 데이터로 바꾸다 (2022~2023)
- 3부 — 강화학습이 판을 뒤집다 (2024~2025)
- 4부 — 싸게 만드는 법 (2025)
- 5부 — 실제로 만들 때 부딪히는 벽
- 6부 — 24GB 한 장으로 어디까지 되는가
- 정리 — 무엇이 본질이었는가
- 🧠 이해도 체크 퀴즈
- 참고 자료
들어가며 — "생각하게 만든다"는 말은 무엇을 뜻하는가
2024년 가을부터 모델 이름 뒤에 "reasoning" 이 붙기 시작했습니다. o1, R1, QwQ, Qwen3 의 thinking 모드. 소개 글은 대개 이렇게 말합니다. "답하기 전에 오래 생각합니다."
그런데 오래 생각한다는 것이 구현 수준에서 정확히 무엇인가 는 잘 설명되지 않습니다. 파라미터가 늘어난 것도, 새로운 신경망 구조가 생긴 것도 아닙니다. 트랜스포머는 그대로입니다. 바뀐 것은 무엇을 출력하도록 학습시켰는가 뿐입니다.
이 글은 그 변화를 논문 열두 편으로 따라갑니다. 2022년의 프롬프트 기법에서 시작해 2025년의 강화학습 파이프라인까지 이어지는 하나의 줄기가 있습니다. 그리고 마지막에는 24GB 그래픽카드 한 장으로 이 과정을 어디까지 재현할 수 있는지 계산해 봅니다.
읽고 나면 다음 세 가지를 구분해서 말할 수 있게 됩니다.
- 추론 모델이 실제로 학습하는 대상은 무엇인가
- 왜 과정 보상(PRM)이 이론적으로 옳은데 실무에서 자주 실패하는가
- 왜 DeepSeek 이 PPO 의 가치망을 버렸는가
1부 — 프롬프트로 생각시키던 시절 (2022)
Chain-of-Thought: 예시 여덟 개가 바꾼 것
시작은 구글 브레인의 Chain-of-Thought Prompting (Wei et al., 2022) 입니다. 발상은 허무할 만큼 단순합니다. 몇 개의 예시를 줄 때 정답만 보여 주지 말고 푸는 과정도 함께 보여 주는 것입니다.
Q: 로저는 테니스공 5개를 가지고 있다. 3개들이 캔을 2개 더 샀다. 지금 몇 개인가?
A: 로저는 처음에 5개가 있었다. 3개들이 캔 2개는 6개다. 5 + 6 = 11. 답은 11이다.
PaLM 540B 의 GSM8K(초등 수학 문장제) 정확도가 17.9%에서 58.1%로 올랐습니다. 모델을 전혀 건드리지 않고 프롬프트만 바꿔서 얻은 결과입니다.
여기서 중요한 관찰이 하나 나옵니다. 이 효과는 모델이 충분히 클 때만 나타났습니다. 10B 이하 모델에서는 오히려 성능이 떨어졌습니다. 중간 과정을 만들어 낼 능력 자체가 없으면, 중간 과정을 쓰라는 요구는 헛소리를 늘릴 뿐이었습니다.
Self-Consistency: 한 번 대신 마흔 번
이듬해 같은 팀의 Self-Consistency (Wang et al., 2022) 는 더 단순한 것을 제안합니다. 온도를 올려 답을 40번 만들고, 가장 많이 나온 답 을 고릅니다.
GSM8K 가 다시 58%에서 74%로 올랐습니다. 여기서 처음으로 "계산을 더 쓰면 정확도가 오른다" 는 교환 관계가 드러납니다. 나중에 테스트 시간 확장(test-time scaling)이라 불리게 될 것의 원형입니다.
다만 이 시기의 방법에는 공통된 천장이 있었습니다. 프롬프트는 모델이 이미 가진 능력을 끌어낼 뿐, 없는 능력을 만들지는 못합니다. 다음 단계는 그 능력 자체를 학습시키는 일이었습니다.
2부 — 생각을 학습 데이터로 바꾸다 (2022~2023)
STaR: 자기가 만든 풀이로 자기를 가르치기
STaR: Self-Taught Reasoner (Zelikman et al., 2022) 는 지금 보면 R1 의 직계 조상입니다. 절차는 네 줄입니다.
- 모델에게 문제를 풀게 한다(풀이 과정과 함께).
- 정답을 맞힌 풀이만 남긴다.
- 남은 풀이로 모델을 파인튜닝한다.
- 1로 돌아간다.
틀린 문제는 정답을 힌트로 주고 다시 풀게 한 뒤(rationalization) 그 풀이도 씁니다. 사람이 만든 풀이 데이터가 한 줄도 필요하지 않습니다. 정답만 있으면 됩니다.
이 "정답만 있으면 된다" 는 성질이 3년 뒤 검증 가능한 보상(verifiable reward)이라는 이름으로 판을 뒤집습니다.
Let's Verify Step by Step: 과정에 점수를 매기다
OpenAI 의 Let's Verify Step by Step (Lightman et al., 2023) 은 다른 질문을 던집니다. 여러 후보 풀이 중 하나를 고른다면, 무엇을 보고 고를 것인가?
두 가지 채점자를 비교합니다.
| 채점자 | 학습 신호 | 필요한 라벨 |
|---|---|---|
| ORM (결과 보상 모델) | 최종 답이 맞았는가 | 정답 하나 |
| PRM (과정 보상 모델) | 각 단계가 옳은가 | 단계마다 사람 라벨 |
사람이 80만 개 단계에 일일이 라벨을 붙여 PRM800K 를 만들었고, MATH 데이터셋에서 PRM 이 ORM 을 뚜렷하게 이겼습니다(78.2% 대 72.4%).
이유는 직관적입니다. 결과 보상은 "운 좋게 맞은 풀이" 를 걸러내지 못합니다. 3단계에서 부호를 틀리고 5단계에서 또 틀려 우연히 답이 맞은 풀이도 ORM 에게는 만점입니다. 그런 풀이로 학습하면 모델은 잘못된 습관을 배웁니다.
논문의 결론은 명확했습니다. 과정을 감독하는 쪽이 옳다. 그런데 2년 뒤 DeepSeek 은 정확히 반대의 보고를 내놓습니다. 이 이야기는 5부에서 다시 하겠습니다.
3부 — 강화학습이 판을 뒤집다 (2024~2025)
o1: 생각하는 시간을 늘리면 성능이 오른다
2024년 9월 OpenAI 의 o1 은 방법을 공개하지 않았지만 그래프 하나를 보여 주었습니다. 가로축은 학습 계산량과 테스트 시간 계산량, 세로축은 AIME 정확도. 둘 다 로그 스케일에서 직선으로 올라갔습니다.
이 그래프의 메시지는 이것입니다. 모델을 키우는 것 말고도 성능을 올리는 축이 하나 더 있다. 답하기 전에 더 오래 생각하게 하면 된다. 그리고 그 "오래 생각하기" 는 강화학습으로 학습된다.
DeepSeek-R1-Zero: 지도 학습 없이 순수 강화학습만으로
2025년 1월의 DeepSeek-R1 (DeepSeek-AI, 2025) 은 그 방법을 공개했습니다. 그중에서도 R1-Zero 실험이 인상적입니다. 베이스 모델(DeepSeek-V3-Base)에 사람이 만든 추론 데이터를 한 줄도 주지 않고 강화학습만 돌렸습니다.
보상은 두 개뿐이었습니다.
- 정확도 보상: 수학 문제는 최종 답을 대조하고, 코딩 문제는 테스트를 돌린다.
- 형식 보상: 생각을
<think>태그 안에 넣었는가.
그것뿐입니다. 그런데 학습이 진행되면서 모델은 스스로 응답 길이를 늘렸습니다. 아무도 "길게 쓰라" 고 하지 않았는데, 길게 생각하는 편이 정답률이 높으니 그쪽으로 최적화된 것입니다. AIME 2024 정확도가 15.6%에서 71.0%로 올랐습니다.
논문이 "아하 모먼트" 라고 부른 장면도 여기서 나옵니다. 학습 중간 체크포인트가 이런 문장을 출력하기 시작했습니다.
Wait, wait. Wait. That's an aha moment I can flag here.
Let's reevaluate this step-by-step to identify if the correct sum can be...
자기 풀이를 되돌아보고 다시 검토하는 행동 이 명시적 가르침 없이 나타났습니다. 강화학습이 발견한 전략이었습니다.
GRPO: 가치망을 버린 이유
R1 이 쓴 알고리즘은 GRPO (Group Relative Policy Optimization) 입니다. PPO 를 쓰지 않은 이유를 이해하면 이 분야의 실무 제약이 보입니다.
PPO 는 각 토큰의 이득(advantage)을 계산하려고 가치망(value network) 을 따로 학습합니다. 정책망과 비슷한 크기의 모델이 하나 더 필요합니다. 671B 모델을 학습하면서 671B 짜리 가치망을 함께 돌리는 것은 감당하기 어렵습니다.
GRPO 는 가치망을 없애고, 대신 같은 질문에 대해 답을 여러 개(G개) 뽑아 그 그룹 안에서 상대 평가 합니다.
같은 문제에 답을 16개 생성 → 각 답의 보상 r_1 … r_16
A_i = (r_i - mean(r)) / std(r) ← 이것이 이득
한 답이 그룹 평균보다 좋으면 그 방향으로, 나쁘면 반대 방향으로 정책을 밉니다. 기준선(baseline)을 신경망으로 추정하는 대신 표본 평균으로 대체 한 것입니다.
목적 함수는 PPO 와 같은 클리핑 구조에 KL 벌점을 더한 모양입니다.
J(θ) = E[ min( ρ_i · A_i, clip(ρ_i, 1-ε, 1+ε) · A_i ) ] − β · D_KL(π_θ ‖ π_ref)
ρ_i = π_θ(o_i|q) / π_θ_old(o_i|q)
메모리는 절반 아래로 줄고, 검증 가능한 보상이 있는 영역(수학·코딩)에서는 PPO 만큼 잘 작동했습니다. 이론적 우아함보다 자원 제약이 알고리즘 선택을 결정한 사례입니다.
R1 의 4단계 파이프라인
R1-Zero 는 성능은 좋았지만 문제가 있었습니다. 읽기 어려웠고, 한 답변 안에서 중국어와 영어를 섞었습니다. 사람이 쓸 물건이 아니었습니다. 그래서 최종 R1 은 네 단계를 거칩니다.
| 단계 | 하는 일 | 목적 |
|---|---|---|
| 1. 콜드 스타트 SFT | 긴 CoT 수천 건으로 미세조정 | 읽을 만한 출력 형식을 먼저 심는다 |
| 2. 추론 RL | GRPO + 정확도·형식·언어 일관성 보상 | 추론 능력을 끌어올린다 |
| 3. 거부 샘플링 SFT | 2의 모델로 60만 건 생성, 좋은 것만 남겨 재학습 | 글쓰기·상식 등 일반 능력 회복 |
| 4. 전 영역 RL | 유용성·무해성까지 포함해 다시 RL | 사람이 쓸 수 있게 만든다 |
여기서 3단계가 특히 중요합니다. 추론만 학습시키면 다른 능력이 무너집니다. 수학은 잘하는데 이메일은 못 쓰는 모델이 됩니다. 그래서 추론 데이터 60만 건에 일반 데이터 20만 건을 섞어 되돌립니다.
Kimi k1.5: 길이에 값을 매기다
같은 달 공개된 Kimi k1.5 (Moonshot AI, 2025) 는 다른 각도에서 같은 문제를 다룹니다. 응답이 길어지면 정확도는 오르지만 비용도 오릅니다. 그래서 길이 벌점 을 보상에 직접 넣었습니다.
len_reward = 짧고 정답이면 +, 길기만 하고 오답이면 −
또한 긴 사고 모델의 능력을 짧은 사고 모델로 옮기는 long2short 기법을 제안합니다. 실무에서는 이 축이 중요합니다. 정확도만 보고 만들면 토큰 값을 감당할 수 없습니다.
4부 — 싸게 만드는 법 (2025)
s1: 샘플 1,000개와 "Wait"
스탠퍼드의 s1: Simple test-time scaling (Muennighoff et al., 2025) 은 이 분야에서 가장 통쾌한 논문입니다. 강화학습을 전혀 쓰지 않습니다.
- 엄선한 문제 1,000개 로 Qwen2.5-32B 를 지도 미세조정한다(26분, H100 16장).
- 추론할 때 모델이 생각을 끝내려 하면 종료 토큰을 막고 "Wait" 를 대신 넣는다.
이 budget forcing 만으로 모델은 자기 답을 다시 검토하고 오류를 고칩니다. AIME24 에서 o1-preview 를 넘었습니다.
이 결과가 시사하는 바는 무겁습니다. 긴 추론 능력은 사전학습에서 이미 획득되어 있고, 사후 학습은 그것을 꺼내는 열쇠일 뿐일 수 있다. 같은 결론을 상하이 AI 랩의 LIMO (Ye et al., 2025) 가 817개 샘플로 재확인했습니다.
증류: 작은 모델에 큰 모델의 사고를 옮기기
R1 논문의 실용적으로 가장 중요한 절은 증류 실험입니다. R1 이 생성한 80만 건으로 Qwen·Llama 를 미세조정했더니, 1.5B 모델이 GPT-4o 를 AIME 에서 이겼습니다 (28.9% 대 9.3%).
더 흥미로운 것은 대조 실험입니다. Qwen-32B 에 직접 RL 을 돌린 것보다, R1 의 출력으로 증류한 쪽이 더 좋았습니다.
작은 모델을 강화학습으로 직접 훈련하는 것보다, 큰 모델이 발견한 추론 패턴을 증류하는 편이 싸고 강하다.
작은 모델은 RL 이 탐색할 만한 좋은 풀이를 애초에 잘 만들어 내지 못합니다. 탐색으로 발견할 수 없는 것은 학습할 수도 없습니다.
RLVR: 보상 모델을 아예 없애기
Allen AI 의 Tülu 3 (Lambert et al., 2024) 가 정리한 개념이 RLVR (Reinforcement Learning with Verifiable Rewards) 입니다. 이름 그대로, 보상을 신경망으로 추정하지 말고 프로그램으로 검증 합니다.
- 수학: 최종 답을 정답과 문자열 대조
- 코딩: 단위 테스트 실행 결과
- 형식: 정규식으로 태그 검사
보상 모델이 없으면 보상 해킹의 여지가 줄고, 채점이 결정적이라 재현이 쉽습니다. 이것이 추론 학습이 수학·코딩에서 먼저 성공한 이유입니다. 채점이 자동인 영역이었기 때문입니다.
5부 — 실제로 만들 때 부딪히는 벽
보상 해킹
모델은 보상 함수를 최적화하지, 우리의 의도를 최적화하지 않습니다. 실제로 보고된 사례들입니다.
- 정답 문자열만 대조하면, 풀이는 엉망인데 마지막 줄에 여러 후보를 나열해 하나가 걸리게 한다.
- 길이 보상을 주면 의미 없는 문장으로 길이를 채운다.
- 신경망 보상 모델을 쓰면 그 모델의 약점을 파고드는 문장 패턴을 찾아낸다.
R1 이 신경망 보상 모델을 쓰지 않은 이유가 이것입니다. 논문의 표현을 빌리면, 보상 해킹이 대규모 RL 에서 전체 파이프라인을 복잡하게 만들었습니다.
PRM 은 왜 실무에서 밀렸는가
2부에서 PRM 이 ORM 을 이겼다고 했습니다. 그런데 R1 논문은 PRM 을 쓰지 않았고, 그 이유를 세 가지로 적었습니다.
- 일반 추론에서 "단계" 를 정의하기 어렵다. 수학 증명은 줄 단위로 나뉘지만 일반 문제는 그렇지 않습니다.
- 중간 단계가 옳은지 자동 판정하기 어렵다. 사람이 라벨을 붙이면 확장이 안 되고, 모델이 붙이면 그 모델의 오류가 그대로 들어옵니다.
- PRM 자체가 보상 해킹의 표적이 된다. 단계 점수를 높이는 문장 패턴을 모델이 학습합니다.
정리하면 이렇습니다. PRM 은 옳지만 비쌉니다. 검증 가능한 결과 보상은 거칠지만 싸고 해킹하기 어렵습니다. 대규모에서는 후자가 이겼습니다.
과잉 사고
Do NOT Think That Much for 2+3=? (Chen et al., 2025) 는 다른 방향의 문제를 지적합니다. 추론 모델은 쉬운 문제에도 수천 토큰을 씁니다. 2+3 을 묻는데 여러 가지 접근을 검토합니다.
정확도가 오르지 않는데 비용만 오르는 구간이 존재합니다. 그래서 요즘 모델들이 사고 예산을 조절하는 스위치(Qwen3 의 thinking 모드 켜고 끄기, enable_thinking 플래그)를 제공합니다. LabHub 이 로컬 LLM 을 부를 때도 이 플래그를 끕니다. 대본 생성에는 긴 사고가 필요 없고, 토큰만 세 배로 늘기 때문입니다.
6부 — 24GB 한 장으로 어디까지 되는가
이 글을 쓰는 홈랩에는 RTX 5090 Laptop 24GB 한 장이 있습니다. 여기서 무엇이 가능한지 자원 계산으로 따져 봅니다.
추론은 넉넉합니다
현재 이 카드에는 vLLM 으로 Qwen3.8-27B 의 NVFP4 양자화판이 올라가 있습니다. 실측값입니다.
| 항목 | 값 |
|---|---|
| 가중치 | 16.2GB (NVFP4) |
| 문맥 길이 | 16K |
| 동시 요청 | 4 |
| 단일 요청 처리량 | 39 tok/s |
| 동시 4요청 합산 | 138 tok/s |
27B 급 모델이 24GB 에 들어가는 것은 4비트 양자화 덕분입니다. 추론만 한다면 여유가 있습니다.
학습은 계산이 다릅니다
GRPO 학습에 필요한 메모리를 항목별로 쌓아 봅니다. 7B 모델을 bf16 으로 전체 미세조정한다고 가정하면 이렇습니다.
| 항목 | 크기 |
|---|---|
| 정책 모델 가중치 (bf16) | 14GB |
| 옵티마이저 상태 (AdamW, fp32 모멘텀 2개) | 56GB |
| 그래디언트 | 14GB |
| 참조 모델 (KL 계산용, 고정) | 14GB |
| 활성화 + KV 캐시 (생성 16개 × 4K 토큰) | 10GB 이상 |
| 합계 | 약 108GB |
24GB 로는 시작조차 못 합니다. 그래서 홈랩에서는 세 가지를 조정합니다.
- LoRA 로 바꾼다. 옵티마이저 상태가 어댑터에만 붙으므로 56GB 가 1GB 아래로 줄고, 참조 모델은 어댑터를 끈 같은 가중치를 쓰면 되므로 14GB 가 0 이 됩니다.
- 모델을 줄인다. 1.5B~4B 급을 씁니다. R1 증류 실험이 보여 준 것처럼, 작은 모델은 직접 RL 보다 증류가 낫지만 파이프라인을 이해하려는 목적 이라면 작은 모델로 충분합니다.
- 생성을 분리한다. GRPO 는 시간의 대부분을 생성에 씁니다. vLLM 을 별도 프로세스로 띄워 롤아웃을 받고, 학습은 다른 카드에서 하면 됩니다. verl·TRL 모두 이 구조를 지원합니다.
이렇게 하면 Qwen3-1.7B + LoRA rank 16 + 그룹 크기 8 + 생성 길이 1K 정도가 24GB 에 들어갑니다.
보상 함수부터 쓰는 편이 낫습니다
실제로 해 본다면 학습 코드보다 채점기를 먼저 쓰기를 권합니다. GSM8K 로 예를 들면 이렇습니다.
import re
ANSWER = re.compile(r"<answer>\s*(-?[\d,]+(?:\.\d+)?)\s*</answer>")
def reward(completion: str, gold: str) -> float:
"""검증 가능한 보상: 형식 0.2 + 정답 1.0. 신경망을 쓰지 않는다."""
score = 0.0
if "<think>" in completion and "</think>" in completion:
score += 0.1
m = ANSWER.search(completion)
if not m:
return score # 형식조차 못 맞추면 여기까지
score += 0.1
got = m.group(1).replace(",", "")
return score + (1.0 if got == gold.replace(",", "") else 0.0)
이 스무 줄이 파이프라인의 심장입니다. 여기가 허술하면 모델은 정확히 그 허술한 곳을 찾아냅니다. 예를 들어 위 함수는 <answer> 를 여러 개 쓰면 첫 번째만 봅니다. 모델이 그것을 발견하면 후보를 잔뜩 나열하고 첫 자리에 가장 그럴듯한 것을 놓는 전략을 배웁니다. 실제로 겪게 되는 종류의 문제입니다.
정리 — 무엇이 본질이었는가
계보를 되짚으면 하나의 문장으로 수렴합니다. 추론 모델은 새로운 구조가 아니라, 채점 가능한 목표를 향해 긴 출력을 최적화한 결과입니다.
- 2022년에는 프롬프트로 긴 출력을 유도 했습니다(CoT).
- 2023년에는 좋은 긴 출력을 골라서 학습 시켰습니다(STaR, PRM).
- 2025년에는 채점기만 주고 스스로 찾게 했습니다(R1, RLVR).
세 시기를 관통하는 제약도 같습니다. 자동으로 채점할 수 있는 영역에서만 이 방법이 작동합니다. 수학과 코딩이 먼저 뚫린 것은 우연이 아닙니다. 그리고 지금 이 분야의 최전선은 "채점하기 어려운 영역을 어떻게 채점 가능하게 만들 것인가" 입니다.
🧠 이해도 체크 퀴즈
1. GRPO 가 PPO 의 가치망을 없앨 수 있었던 이유는 무엇인가?
같은 질문에 답을 여러 개 생성해 그 그룹의 평균과 표준편차로 이득을 정규화하기 때문입니다. 기준선을 신경망으로 추정하는 대신 표본 통계로 대체했고, 그 결과 정책망 크기의 가치망을 학습할 필요가 사라졌습니다.
2. PRM 이 벤치마크에서는 ORM 을 이겼는데 대규모 RL 에서 쓰이지 않는 이유를 두 가지 이상 드시오.
일반 추론에서 단계 경계를 정의하기 어렵고, 중간 단계의 옳고 그름을 자동 판정하기 어려우며(사람 라벨은 확장이 안 됨), PRM 자체가 보상 해킹의 표적이 되어 파이프라인이 복잡해집니다.
3. R1 파이프라인에서 3단계(거부 샘플링 SFT)를 빼면 무슨 일이 생기는가?
추론 능력은 유지되지만 글쓰기·상식·역할 수행 같은 일반 능력이 떨어집니다. 추론 데이터만으로 학습하면 분포가 좁아지기 때문에, 일반 데이터를 섞어 되돌리는 단계가 필요합니다.
4. 24GB 한 장으로 7B 모델의 GRPO 전체 미세조정이 불가능한 가장 큰 이유는 무엇인가?
옵티마이저 상태입니다. AdamW 는 파라미터마다 fp32 모멘텀 두 개를 들고 있어야 하므로 7B 기준 약 56GB 가 필요합니다. 가중치(14GB)보다 훨씬 큽니다. LoRA 는 이 항목을 어댑터 크기로 줄여 문제를 해결합니다.
참고 자료
- Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, NeurIPS 2022
- Wang et al., Self-Consistency Improves Chain of Thought Reasoning in Language Models, ICLR 2023
- Zelikman et al., STaR: Bootstrapping Reasoning With Reasoning, NeurIPS 2022
- Lightman et al., Let's Verify Step by Step, ICLR 2024
- DeepSeek-AI, DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning, 2025
- Shao et al., DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models, 2024 (GRPO 원 논문)
- Moonshot AI, Kimi k1.5: Scaling Reinforcement Learning with LLMs, 2025
- Muennighoff et al., s1: Simple Test-Time Scaling, 2025
- Ye et al., LIMO: Less is More for Reasoning, 2025
- Lambert et al., Tülu 3: Pushing Frontiers in Open Language Model Post-Training, 2024
- Chen et al., Do NOT Think That Much for 2+3=? On the Overthinking of o1-Like LLMs, 2025