8B Baseline 모델 비교 분석: Llama 3.1 vs DeepSeek R1 Distill
날짜: 2026-03-05
모델: Llama 3.1 8B Instruct vs DeepSeek-R1-Distill-Llama-8B
이 문서는 8B 급 두 모델의 baseline(adapter 없는) 평가 결과를 비교 분석한다.
DeepSeek R1 Distill이 reasoning distillation 모델이라 더 우수할 것으로 기대했으나,
대부분의 태스크에서 크게 열세인 결과가 나왔고, 그 원인을 분석한다.
1. 실험 개요
비교 모델
| 항목 | Llama 3.1 8B | DeepSeek R1 Distill 8B |
|---|---|---|
| model_id | meta-llama/Llama-3.1-8B-Instruct | deepseek-ai/DeepSeek-R1-Distill-Llama-8B |
| 파라미터 수 | 8B | 8B |
| 특성 | General instruction-tuned | Reasoning distillation (R1 → Llama) |
| 응답 패턴 | 답변 먼저 | <think> 추론 → 답변 |
| Prediction 경로 | baseline-8b/20260304_185337/ | baseline-8b/20260304_170234/ |
평가 설정
| 태스크 | 샘플 수 | max_tokens | 유형 |
|---|---|---|---|
| ARC | 259 | 64 | 객관식 (과학 추론) |
| BoolQ | 943 | 16 | Yes/No QA |
| CommonsenseQA | 974 | 64 | 객관식 (상식 추론) |
| ExploreToM | 1,330 | 64 | Theory of Mind |
| GSM8K | 747 | 256 | 수학 추론 |
| HumanEvalPlus | 16 | 512 | 코드 생성 |
| MBPP+ | 37 | 512 | 코드 생성 |
| SelfAware | 337 | 64 | 자기인식 (IDK 판별) |
| TriviaQA | 695 | 64 | 상식 QA |
2. Cross-Eval 정답률 비교
| 태스크 | Llama 3.1 8B | DeepSeek R1 8B | Δ |
|---|---|---|---|
| ARC | 9.3% (24/259) | 0.8% (2/259) | -8.5pp |
| BoolQ | 65.3% (616/943) | 1.4% (13/943) | -63.9pp |
| CommonsenseQA | 21.5% (209/974) | 6.9% (67/974) | -14.6pp |
| ExploreToM | 34.1% (453/1330) | 24.6% (327/1330) | -9.5pp |
| GSM8K | 77.0% (575/747) | 13.0% (97/747) | -64.0pp |
| HumanEvalPlus | 62.5% (10/16) | 0.0% (0/16) | -62.5pp |
| MBPP+ | 70.3% (26/37) | 16.2% (6/37) | -54.1pp |
| SelfAware | 24.9% (84/337) | 32.0% (108/337) | +7.1pp |
| TriviaQA | 59.4% (413/695) | 14.4% (100/695) | -45.0pp |
요약
- DeepSeek R1이 우세한 태스크는 SelfAware 단 1개 (+7.1pp)
- 나머지 8개 태스크에서 모두 열세, 특히 BoolQ (-63.9pp), GSM8K (-64.0pp), HumanEvalPlus (-62.5pp)는 60pp 이상 차이
- 이 격차가 모델 능력 부족이 아닌 평가 파이프라인 비호환성 때문임을 아래에서 분석
3. 핵심 분석: DeepSeek R1의 Reasoning Token 문제
3.1 근본 원인: <think> 토큰 소진
DeepSeek R1 Distill은 응답 시작부터 사고 과정을 먼저 생성하는 구조를 가진다:
(사고 과정 텍스트)...</think>
(실제 답변)
평가 코드의 max_tokens 한도가 이 사고 과정에서 대부분 소진되어, 실제 답변에 도달하지 못하거나 답변이 도중에 잘리는 문제가 발생한다.
GSM8K에서 확인: 747건 중 703건(94.0%)에 </think> 태그가 존재하지만, </think> 이후에 #### 패턴(최종 답 마커)이 있는 건은 0건 — 답변이 모두 도중에 잘렸다.
참고: 평가 코드에는 현재 R1-Distill 모델을 위한
_think_budget = 512토큰 추가 메커니즘이 구현되어 있으나 (sctom/evaluation.py:738), 이 baseline 평가는 해당 코드 추가 이전에 수행되었다.
3.2 태스크별 영향 분석
| 태스크 | max_tokens | Llama 응답 패턴 | DeepSeek 응답 패턴 | 파싱 실패 유형 |
|---|---|---|---|---|
| BoolQ | 16 | ”Yes/No + 근거" | "Okay, so I need to figure out…“ | 912/943 empty predicted |
| GSM8K | 256 | 풀이 + #### 답 | 사고과정 + </think> + 잘린 답 | #### 없음 → 중간 숫자 추출 |
| HumanEval+ | 512 | 코드 블록 생성 | ”Okay, I need to write…” 자연어 | 코드 블록 없음 |
| MBPP+ | 512 | 코드 블록 생성 | ”Okay, I need to write…” 자연어 | 코드 블록 없음 |
| ExploreToM | 64 | 직접 답변 | ”Okay, so I’m trying to figure out…” | 미완성 문장에서 substring match |
| TriviaQA | 64 | 직접 답변 | ”Okay, so I need to figure out…” | 미완성 사고과정 |
| ARC | 64 | 선택지 답변 | 사고과정 중 잘림 | 선택지 파싱 실패 |
| CommonsenseQA | 64 | 선택지 답변 | 사고과정 중 잘림 | 선택지 파싱 실패 |
3.3 BoolQ 상세 — 가장 극적인 사례 (-63.9pp)
max_tokens=16이라 사고 시작 후 바로 잘림, “yes”/“no” 단어 자체가 없음.
응답 비교 예시 (동일 질문 — “Is Windows Movie Maker a part of Windows?“):
Llama: “Yes, Windows Movie Maker is a part of the Windows Essentials software suite.”
→ predicted=“yes” ✓
DeepSeek: “Okay, so I need to figure out if Windows Movie Maker is part of Windows”
→ predicted="" (빈 값) ✗
정량 분석:
- 943건 중 **912건 (96.7%)**이 빈 predicted → 사실상 전수 실패
- 맞은 13건 중 12건이 “no” 예측: 사고 과정에 우연히 “no”가 포함된 경우
- 예: “Deal or No Deal” 질문에서 “No Deal”이 파싱됨
- 1건만 “yes” 예측 (human eyes reflecting light 질문)
Llama 분포 (참고): 943건 중 616건 정답 (65.3%), “yes”/“no” 직접 답변 패턴
3.4 GSM8K 상세 — 답변 도달했으나 잘림 (-64.0pp)
GSM8K는 max_tokens=256으로 다른 QA 태스크보다 여유가 있어, 703건(94.0%)이 </think> 태그까지 도달했다.
그러나 </think> 이후 실제 답변이 시작되지만 답변 자체도 도중에 잘려 #### 패턴에 도달하지 못한다.
응답 비교 예시 (동일 질문 — 레스토랑 비용 계산, 정답: 108):
Llama: “To find the total amount spent at the restaurant, we need to calculate the cost of the appetizer and the entrees, then add the tip. The appetizer costs 20 each, so 4 x $20 = …”
→ 풀이 과정 포함, 정답 추출 ✓
DeepSeek (사고 과정 끝부분): “…Adding 90 results in a total of 108." **DeepSeek** (`</think>` 이후): "**Solution:** 1. **Calculate the cost of the appetizer and entrees:** - **Appetizer:** \10 - Entrees: 4 entrees × $20 each = $80 - Subtotal: $10 (appetizer) + $80 (ent”
→ 답변이 “ent” 에서 잘림,####패턴 없음 ✗
파싱 메커니즘:
extract_gsm8k_answer()가####패턴 검색 → 실패- Fallback으로 첫 번째 숫자 추출 → 사고 과정의 중간 수식 숫자가 추출됨
- 정답 97/747 (13.0%)은 우연히 정답 숫자가 먼저 나온 경우
3.5 코드 생성 태스크 — HumanEvalPlus (0/16), MBPP+ (6/37)
max_tokens=512로 가장 여유로운 태스크이지만, DeepSeek은 코드 대신 자연어로 설명을 생성한다.
응답 비교 예시 (correct_bracketing 함수):
Llama: ”## Correct Bracketing Function\n\nThe following Python function checks if every opening bracket in a given string has a corresponding closing bracket.\n\n```python …”
→ 코드 블록 포함 ✓
DeepSeek: “Okay, I need to write a Python function called correct_bracketing that takes a string of ’(’ and ’)’ and returns True if every opening bracket has a c…”
→ 코드 블록 없이 자연어 설명만 ✗
MBPP+에서 6건 정답: 사고 과정 내 코드 스니펫이 우연히 통과한 것으로 추정
3.6 ExploreToM (-9.5pp) & TriviaQA (-45.0pp) — Substring Match 효과
max_tokens=64로 사고 과정이 빠르게 잘리지만, substring match 방식의 평가에서는 사고 과정 내에 정답이 포함될 수 있다.
ExploreToM 예시 (정답: “leather satchel”):
Llama: “The script is now safely tucked into the worn leather satchel on a nearby table.”
→ “leather satchel” substring match ✓
DeepSeek: “Okay, so I’m trying to figure out where the script is in this story. Let me read through the story again to make sure I…”
→ 정답 단어 미포함 ✗
TriviaQA 예시 (정답: “WORCESTERSHIRE SAUCE”):
Llama: “The famous sauce you’re referring to is likely Worcestershire sauce.”
→ “Worcestershire” substring match ✓
DeepSeek: “Okay, so I need to figure out the secret recipe for a famous sauce that’s made by Lea and Perrins. I remember hearing th…”
→ 사고과정 중 잘림, 정답 단어 미포함 ✗
ExploreToM은 327/1330 (24.6%)이 정답으로, substring match 덕분에 사고 과정 내 정답 포함 사례가 일부 있어 다른 태스크보다 gap이 작다 (-9.5pp).
4. SelfAware: DeepSeek이 우세한 유일한 태스크 (+7.1pp)
SelfAware에서 DeepSeek이 32.0%로 Llama의 24.9%를 7.1pp 앞선다. 그러나 이는 SimCSE 기반 IDK 탐지의 오작동에 의한 것이다.
IDK Confusion Matrix 비교
| 지표 | Llama 3.1 | DeepSeek R1 |
|---|---|---|
| TP (IDK→IDK) | 46 | 91 |
| FP (NOT→IDK) | 35 | 166 |
| FN (IDK→NOT) | 57 | 12 |
| TN (NOT→NOT) | 199 | 68 |
| IDK 생성 수 | 81 | 257 |
| Accuracy | 24.9% | 32.0% |
| IDK Precision | 56.8% | 35.4% |
| IDK Recall | 44.7% | 88.3% |
- 기대 IDK 수: 103/337 (30.6%)
분석
DeepSeek의 IDK 과잉 탐지 메커니즘:
DeepSeek은 337건 중 **257건 (76.3%)**이 IDK로 분류된다. 이는 실제로 “모르겠다”고 답한 것이 아니라, 사고 과정의 텍스트가 SimCSE 기반 IDK 탐지를 트리거하기 때문이다.
DeepSeek의 전형적 응답 시작:
“Okay, so I need to figure out…” / “Okay, so I’m trying to figure out…”
이러한 표현이 SimCSE 유사도 기반 IDK 탐지에서 “I’m not sure”, “I don’t know” 등의 IDK 패턴과 높은 유사도를 보여 IDK로 분류된다.
결과:
- 높은 Recall (88.3%): 실제 IDK 103건 중 91건을 맞춤 — 사고 과정이 대부분 IDK로 분류되므로 IDK 기대 건도 당연히 포함
- 낮은 Precision (35.4%): IDK로 판별한 257건 중 166건(64.6%)이 오판 — 사실상 무분별 IDK 판정
- Accuracy 우위의 원인: TP(91) + TN(68) = 159 > Llama의 TP(46) + TN(199) = 245… 아닌 것처럼 보이지만, SelfAware accuracy는
correct필드 기준으로 계산되며, 이는 IDK 판별뿐 아니라 답변 가능 질문의 정답도 포함
핵심: DeepSeek의 SelfAware 우위는 모델의 실제 자기인식 능력이 아닌, 사고 과정 텍스트가 IDK 탐지를 우연히 트리거한 artifact이다.
5. 응답 길이 비교
| 태스크 | Llama 3.1 (chars) | DeepSeek R1 (chars) | DeepSeek/Llama |
|---|---|---|---|
| ARC | 293.7 | 301.4 | ×1.0 |
| BoolQ | 71.5 | 66.0 | ×0.9 |
| CommonsenseQA | 253.0 | 284.8 | ×1.1 |
| ExploreToM | 228.7 | 312.1 | ×1.4 |
| GSM8K | 617.7 | 942.9 | ×1.5 |
| HumanEvalPlus | 1,379.9 | 1,917.4 | ×1.4 |
| MBPP+ | 771.1 | 2,021.0 | ×2.6 |
| SelfAware | 260.5 | 286.8 | ×1.1 |
| TriviaQA | 139.8 | 271.8 | ×1.9 |
관찰:
- DeepSeek은 모든 태스크에서 동일하거나 더 긴 응답을 생성
- 코드/수학 태스크에서 특히 차이가 큼: MBPP+ ×2.6, TriviaQA ×1.9, GSM8K ×1.5
- BoolQ는 유일하게 DeepSeek이 더 짧음 (66.0 vs 71.5) — max_tokens=16이라 둘 다 잘리지만, DeepSeek의 사고 시작 패턴이 약간 더 짧은 토큰으로 표현됨
- 응답 길이가 길다는 것은 사고 과정이 포함되어 있다는 의미이며, 실제 답변 부분은 극히 짧거나 없음
6. 결론 및 시사점
6.1 핵심 결론
DeepSeek R1 Distill의 낮은 점수는 모델 능력 부족이 아닌 평가 파이프라인과의 비호환성이 주 원인이다.
- R1 계열 모델은 reasoning token(
<think>...</think>)을 먼저 소진하여, 제한된 max_tokens 내에서 최종 답변에 도달 불가 - 현재 평가 코드는 Llama 스타일의 “답변 먼저” 패턴을 가정하고 설계됨
- SelfAware에서의 우위(+7.1pp)도 SimCSE IDK 탐지의 오작동에 의한 artifact
6.2 공정한 비교를 위한 제안
| 방법 | 설명 | 장단점 |
|---|---|---|
| Option A: max_tokens 대폭 증가 | reasoning 포함하려면 2048+ 필요 | 정확하지만 추론 시간·메모리 급증 |
Option B: </think> 후처리 | </think> 이후 텍스트만 파싱에 사용 | 가장 깔끔, 기존 파싱 로직 재활용 가능 |
| Option C: System prompt 지시 | ”Answer directly without reasoning” 추가 | 모델의 reasoning 능력을 인위적으로 억제 |
현재 상태: 평가 코드에
_think_budget = 512토큰 추가 메커니즘이 이미 구현됨 (sctom/evaluation.py:738).
이후 baseline 재평가 시 이 메커니즘이 적용되어 차이가 줄어들 것으로 예상.
6.3 유효한 비교 가능 영역
| 신뢰도 | 태스크 | 이유 |
|---|---|---|
| 상대적 신뢰 | ExploreToM, SelfAware | Substring match이므로 사고 과정 내에서도 정답 포함 가능 |
| 비교 불가 | BoolQ, GSM8K, HumanEval+, MBPP+ | 파싱 메커니즘이 사고 과정 텍스트와 완전히 비호환 |
| 제한적 | ARC, CommonsenseQA, TriviaQA | 객관식/단답형 파싱이 사고 과정에서는 대부분 실패 |
6.4 SC-TOM 연구 관점
현재 결과로는 Llama 3.1 8B와 DeepSeek R1 Distill 8B의 공정한 능력 비교가 불가능하다.
8B 급 모델 비교를 위해서는:
_think_budget적용 후 DeepSeek baseline 재평가 수행- 또는 Option B (
</think>후처리) 적용 후 재평가 - 재평가 후에도 SelfAware IDK 탐지의 SimCSE 오작동 문제는 별도 처리 필요
현 시점에서 SC-TOM 연구의 8B 실험은 Llama 3.1 8B Instruct 단일 모델 기준으로 진행하는 것이 타당하다.
부록
A. 태스크별 max_tokens 설정 (evaluation.py)
BoolQ: 16 # → DeepSeek 사고 시작 후 즉시 잘림
ExploreToM: 64 # → 사고 과정 중간에 잘림
SelfAware: 64 # → 사고 과정이 IDK로 오탐지
ARC: 64 # → 사고 과정 중간에 잘림
CommonsenseQA: 64 # → 사고 과정 중간에 잘림
TriviaQA: 64 # → 사고 과정 중간에 잘림
GSM8K: 256 # → </think> 도달하나 답변 잘림
MBPP+: 512 # → 자연어 설명 생성, 코드 없음
HumanEval+: 512 # → 자연어 설명 생성, 코드 없음
B. BoolQ DeepSeek 정답 13건 분석
13건 중 12건이 expected=“no”로, 사고 과정에 “no”가 우연히 포함된 사례:
[96] "Deal or No Deal" → "No Deal" 파싱
[200] minor league baseball → "no" 포함
[214] carbon monoxide detector → "no" 포함
[246] Barney the Purple Dinosaur → "no" 포함
[671] drive from North America → "no" 포함
...
1건만 expected=“yes” (human eyes reflecting light).
C. GSM8K DeepSeek </think> 통계
</think>태그 포함: 703/747 (94.0%)</think>이후####포함: 0/703 (0.0%)- 전체 정답: 97/747 (13.0%)