# Deep-Thinking Ratio (DTR) 해설

> "LLM이 길게 말한다고 잘 생각하는 게 아니다. 깊이 생각하는지를 봐야 한다."

---

## 한 문장 요약

Transformer 내부에서 **깊은 레이어까지 예측이 계속 바뀌는 토큰**이 많을수록 정답에 가깝고,
그 비율(DTR)을 **50 토큰만 보고** 예측하면 inference 비용을 절반으로 줄일 수 있다.

---

## 왜 이 논문이 중요한가

2025년까지 업계의 상식은 이랬다:

> "추론 모델은 길게 생각할수록 좋다. 토큰을 더 쓰면 정확도가 오른다."

이 논문은 그 상식을 **데이터로 뒤집었다**.

- 토큰 수와 정확도의 상관: **r = -0.594** (음의 상관)
- 즉, **길게 쓴 답일수록 오히려 틀릴 확률이 높다**

그렇다면 무엇이 정확도를 결정하는가? → **모델이 내부적으로 얼마나 "깊이" 계산했는가**.

---

## 직관적 이해: "깊이 생각한다"는 것

### 비유: 시험을 보는 학생

학생이 시험 답안을 쓸 때를 생각해 보자.

| 상황 | 행동 | 결과 |
|------|------|------|
| 잘 아는 문제 | 바로 답을 씀 | 정답 |
| 모르는 문제 | 일단 길게 씀 (분량 채우기) | 오답 |
| 어렵지만 풀 수 있는 문제 | 머릿속에서 여러 번 검토 후 간결하게 씀 | 정답 |

세 번째 학생이 하는 것이 "deep thinking"이다.
**겉으로 보이는 답안 길이가 아니라, 머릿속에서 답이 바뀌는 횟수**가 실력의 지표다.

### Transformer에서의 대응

Transformer는 입력을 **레이어(층)**를 통과시키며 처리한다.
각 레이어를 통과할 때마다 "이 다음에 올 단어"에 대한 예측이 업데이트된다.

```
[입력] → Layer 1 → Layer 2 → ... → Layer 30 → Layer 31 → Layer 32 → [출력]
              |          |                          |          |
           "사과"     "바나나"                    "포도"     "포도"
           (초기 추측)  (수정)                   (거의 확정)  (최종)
```

**쉬운 토큰** (예: "서울의 수도는" → "한국"): 초반 레이어에서 이미 답이 확정된다.

```
Layer 1~5:   "한국" (확신)
Layer 6~32:  "한국" (변화 없음)
→ Settling depth = 낮음 → "shallow-thinking" token
```

**어려운 토큰** (예: 수학 증명의 핵심 스텝): 깊은 레이어까지 답이 계속 바뀐다.

```
Layer 1~10:  "x=3" (불확실)
Layer 11~20: "x=5" (수정)
Layer 21~28: "x=4" (재수정)
Layer 29~32: "x=4" (수렴)
→ Settling depth = 높음 → ★ "deep-thinking" token
```

---

## DTR 계산 방법 (기술적 세부)

### Step 1: 중간 레이어의 예측 분포 추출

각 레이어 `l`의 hidden state `h_{t,l}`에 최종 레이어의 unembedding matrix `W`를 곱하면,
그 레이어 시점에서의 "다음 토큰 예측 확률 분포" `p_{t,l}`을 얻는다.

```
p_{t,l} = softmax(W * h_{t,l})
```

이 방법은 **Logit Lens**(2020)에서 처음 제안되었고, **Tuned Lens**(2023)에서 정교화된 기법이다.
DTR은 이 관찰을 **training 없이** 적용한다 (unembedding matrix 직접 사용).

### Step 2: 레이어 간 분포 차이 측정

최종 레이어 분포 `p_{t,L}`과 중간 레이어 분포 `p_{t,l}` 사이의 거리를 **Jensen-Shannon Divergence (JSD)**로 측정한다.

```
D_{t,l} = JSD(p_{t,L} || p_{t,l})
```

JSD를 선택한 이유:
- **대칭**: `JSD(A||B) = JSD(B||A)` (KL divergence는 비대칭)
- **유계**: 항상 0~1 사이 (수치적으로 안정)
- **실험적 검증**: KL divergence나 cosine similarity보다 상관 계수가 높음

### Step 3: Settling Depth 결정

"이 토큰이 레이어 몇에서 최종 답에 수렴했는가?"

```
Settling depth(t) = argmin_l { D_bar_{t,l} <= g }
```

여기서 `D_bar_{t,l} = min_{j<=l} D_{t,j}` (한 번 수렴하면 되돌아가지 않도록 강제).
`g = 0.5`가 실험적 최적 threshold.

### Step 4: Deep-Thinking 여부 판정

전체 레이어의 85% 이상 (`rho = 0.85`)에서야 수렴하면 "deep-thinking":

```
Deep-thinking cutoff = ceil(0.85 * L)   # L=32층이면 28층

token이 28층 이후에야 수렴 → deep-thinking token ★
token이 10층에서 수렴 → shallow-thinking token
```

### Step 5: DTR 계산

```
DTR = (deep-thinking tokens 수) / (전체 tokens 수)
```

---

## Think@n: DTR의 실전 활용

기존 self-consistency (Cons@n):
1. 같은 문제에 대해 n개 답변 생성
2. 전부 완료한 뒤 majority voting
3. 비용: n개 전부의 전체 토큰

Think@n:
1. 같은 문제에 대해 n개 답변 생성 **시작**
2. **50 토큰만 생성한 시점에서** 각각의 DTR 측정
3. DTR 상위만 끝까지 생성, 나머지는 **조기 중단**
4. 상위 답변들로 majority voting

```
              Cons@n                          Think@n
         ┌─────────────┐               ┌─────────────┐
답변 1   │█████████████│ 전부 생성      │█████████████│ DTR 높음 → 완주
답변 2   │█████████████│ 전부 생성      │██░░░░░░░░░░░│ DTR 낮음 → 중단
답변 3   │█████████████│ 전부 생성      │█████████████│ DTR 높음 → 완주
답변 4   │█████████████│ 전부 생성      │██░░░░░░░░░░░│ DTR 낮음 → 중단
답변 5   │█████████████│ 전부 생성      │█████████████│ DTR 높음 → 완주
         └─────────────┘               └─────────────┘
비용: 5 x 전체                          비용: 3 x 전체 + 2 x 50토큰
                                        = 약 60% → 50% 절감
```

핵심 인사이트: **처음 50 토큰의 DTR만으로 그 답변이 "깊이 생각하고 있는지" 예측할 수 있다**.
마치 시험에서 첫 줄만 읽고 "이 학생 풀 줄 안다/모른다"를 판별하는 것과 같다.

---

## 하나의 역설: Reasoning Level이 높으면 DTR이 낮다?

논문에서 발견한 흥미로운 현상:

> GPT-OSS 모델에서 reasoning level을 높이면 **DTR은 오히려 낮아지는데, 정확도는 올라간다**.

왜?

```
Reasoning Level 낮음:  적은 토큰, 각 토큰이 열심히 계산 (높은 DTR)
Reasoning Level 높음:  많은 토큰, 각 토큰의 부담 분산 (낮은 DTR), 전체 정확도 상승
```

비유: 혼자서 짐을 나르면 힘들지만(높은 DTR), 여럿이 나누면 각자 부담이 줄어든다(낮은 DTR).
**계산 노력이 "깊이"에서 "길이"로 재분배**된 것이다.

따라서 DTR은 "높을수록 무조건 좋다"가 아니라,
**동일 조건 내에서** 답변 간 품질을 비교하는 상대적 지표로 사용해야 한다.

---

## 이 논문 이전과 이후의 패러다임 변화

### Before (2024~2025 초)

```
"추론 성능을 높이려면?"
→ 토큰을 더 생성하라 (longer CoT)
→ 더 큰 모델을 쓰라 (scale up)
→ Self-consistency로 여러 번 시도하라 (more samples)
```

### After (2025 후반~2026)

```
"추론 성능을 높이려면?"
→ 깊이 생각하는 토큰의 비율을 높여라 (DTR)
→ 불필요한 토큰을 줄여라 (NoWait, RCPD)
→ 품질 좋은 시도만 골라라 (Think@n)
→ 문제 난이도에 맞게 compute를 할당하라 (adaptive)
```

**공통 방향: "More" → "Better"로의 전환.**

---

## 한계와 열린 질문

| 한계 | 해설 |
|------|------|
| **Closed API 모델 적용 불가** | GPT-4, Claude 등 API 모델은 중간 레이어에 접근할 수 없어 DTR 측정 자체가 불가능. Open-weight 모델 전용 |
| **도메인 한정** | 수학/과학에서만 검증. "코드 생성에서도 DTR이 유효한가?"는 미검증 |
| **모델 간 비교 불가** | DTR 절대값은 아키텍처에 종속. "모델 A의 DTR 0.3 > 모델 B의 DTR 0.2"라고 말할 수 없음 |
| **Reasoning Level 역설** | 고수준 reasoning에서 DTR이 낮아지는 현상 — DTR만으로 모든 것을 설명할 수 없음 |

---

## 에이전트 시스템에 주는 교훈

1. **"더 길게 생각하라"는 프롬프트는 위험하다** — overthinking을 유발하여 성능을 오히려 악화시킬 수 있음
2. **조기 품질 판별이 가능하다** — 에이전트가 여러 경로를 탐색할 때, 초반 50 토큰만으로 유망한 경로를 선별할 수 있음
3. **Compute는 균등이 아니라 적응적으로 배분해야 한다** — 쉬운 sub-task에 과도한 토큰을 쓰면 전체 효율이 떨어짐
4. **품질 신호는 출력이 아니라 내부에 있다** — 가능하다면 모델 내부 상태를 활용하는 것이 외부 heuristic보다 신뢰할 수 있음

---

*2026-04-15 작성 | 원본 논문: [arXiv 2602.13517](https://arxiv.org/abs/2602.13517)*
