4. 가치 기반 — Q러닝에서 DQN까지
DQN의 두 처방 — 경험 재생과 타깃 네트워크 — 은 지금도 많은 딥 off-policy 가치·액터-크리틱 알고리즘에 쓰인다
이 장에서 처음 나오는 말6개
Q러닝Q-Learning- 벨만 최적 방정식을 그대로 학습 규칙으로 옮긴 것. 강화학습에서 가장 유명한 알고리즘.
함수 근사Function Approximation- 상태마다 값을 표에 적는 대신 신경망으로 값을 계산하는 것. 상태가 많아지면 필수다.
DQNDeep Q-Network- Q러닝 + 신경망 + 두 가지 안정화 장치. 2015년에 아타리를 풀며 딥 강화학습을 연 알고리즘.
경험 재생Experience Replay- 겪은 것을 버퍼에 쌓아 두고 무작위로 꺼내 학습하는 것. 데이터의 시간적 상관을 깬다.
타깃 네트워크Target Network- 학습 목표를 계산할 때 쓰는 잠깐 얼려 둔 사본. 목표가 같이 움직여 발산하는 것을 막는다.
과대추정Overestimation Biasmax연산 때문에 Q값이 실제보다 크게 추정되는 현상. 가치 기반 방법의 고질병이다.
표로 하는 Q러닝
섹션 제목: “표로 하는 Q러닝”상태와 행동이 몇 개 안 되면 Q(s,a)를 그냥 표에 적어 두면 된다.
학습 규칙은 3장의 벨만 최적 방정식을 TD로 옮긴 것 하나다.
Q(s,a) ← Q(s,a) + α · [ r + γ · max_a' Q(s',a') − Q(s,a) ] └───── TD 타깃 ─────┘ └ 현재 추정 ┘지금 칸의 점수를 “받은 보상 + 다음 칸에서 낼 수 있는 최고 점수” 쪽으로
α만큼 옮긴다.
절차는 이게 전부다.
Q = defaultdict(lambda: np.zeros(n_actions)) # 전부 0으로 시작
for episode in range(N): s, _ = env.reset() done = False while not done: # ε-greedy 로 행동을 고른다 (탐색) a = env.action_space.sample() if random() < eps else np.argmax(Q[s])
s2, r, terminated, truncated, _ = env.step(a)
# 종료 상태면 다음 가치는 0 — 여기를 틀리는 실수가 흔하다 target = r if terminated else r + gamma * np.max(Q[s2]) Q[s][a] += alpha * (target - Q[s][a])
s, done = s2, terminated or truncated행동은 ε-greedy로 골랐는데(가끔 무작위), 학습 타깃은 max를 쓴다.
즉 “실제로 한 행동”과 “배우는 대상”이 다르다.
행동한 정책 (behavior) : ε-greedy ← 탐색이 섞여 있다배우는 정책 (target) : greedy ← 항상 최선을 고른다그래서 Q러닝은 현재 정책이 아닌 정책이 모은 데이터로도 갱신할 수 있다. 예전 정책이나 사람이 만든 데이터도 후보가 된다. 다만 데이터 커버리지가 부족하면 오프라인 RL 특유의 외삽 오류가 생기므로 보정이 필요하다 (7장).
Q러닝 : Q(s,a) ← … r + γ · max_a' Q(s',a') "최선을 뒀다고 치고"SARSA : Q(s,a) ← … r + γ · Q(s', a') "실제로 한 행동으로"SARSA는 자기가 탐색 중이라는 걸 아는 학습이라 더 안전하게 배운다. 절벽 옆을 걷는 과제에서 Q러닝은 최단 경로(절벽 바로 옆)를, SARSA는 가끔 미끄러질 걸 감안해 한 칸 떨어진 길을 배운다.
이름만 알아 두면 된다 — 실무에서 SARSA를 직접 쓰는 일은 드물다.
문제 — 표가 감당 못 한다
섹션 제목: “문제 — 표가 감당 못 한다”상태가 조금만 현실적이 되면 표가 폭발한다.
| 문제 | 상태 수 |
|---|---|
| 미로 8×8 | 64 |
| 카트폴 (위치·속도·각도·각속도, 연속) | 무한 |
| 아타리 화면 (84×84 흑백 4장) | 사실상 무한 |
| 호가창 10단 + 포지션 | 사실상 무한 |
게다가 표는 일반화를 못 한다. 거의 똑같은 상태를 처음 보면 아무것도 모르는 상태로 시작한다.
그래서 표 대신 신경망을 쓴다 — Q(s,a) ≈ Q(s,a; θ).
그런데 이걸 그대로 하면 쉽게 불안정해지거나 발산한다. 세 가지가 겹치기 때문이다.
DQN — 두 개의 처방
섹션 제목: “DQN — 두 개의 처방”① 경험 재생 — 상관을 깬다
섹션 제목: “① 경험 재생 — 상관을 깬다”연속된 경험은 서로 지나치게 닮아 있다. 방금 본 프레임 100장으로 학습하면 신경망이 최근 구간에만 맞춰졌다가 다음 구간에서 그걸 잊는다.
얻는 것이 둘이다 — 시간적 상관이 깨지고, 경험 하나를 여러 번 재사용한다. 후자가 곧 샘플 효율이고, 실물 로봇처럼 샘플이 비싼 자리에서 결정적이다.
② 타깃 네트워크 — 목표를 잠깐 고정한다
섹션 제목: “② 타깃 네트워크 — 목표를 잠깐 고정한다”TD 타깃에 Q 자신이 들어 있다. 그래서 Q를 고치면 목표도 같이 움직인다.
자기 그림자를 밟으려는 꼴이다. 처방은 사본을 하나 얼려 두는 것이다.
타깃 = r + γ · max_a' Q(s', a' ; θ⁻) θ⁻ 는 몇 천 스텝마다 θ를 복사한 사본목표를 계산할 때는 잠깐 멈춰 둔 옛 사본을 쓴다. 목표가 안 흔들리므로 학습이 안정된다.
| 갱신 방식 | 어떻게 | 쓰는 곳 |
|---|---|---|
| 하드 업데이트 | N 스텝마다 통째로 복사 | DQN |
| 소프트 업데이트 | 매 스텝 조금씩 섞는다 (τ=0.005 정도) | SAC · TD3 (6장) |
그 뒤에 붙은 개선들
섹션 제목: “그 뒤에 붙은 개선들”DQN 이후 나온 개선들 중 지금도 기본으로 켜는 것과 필요할 때만 보는 것을 나눈다.
| 개선 | 무엇을 고쳤나 | 판단 |
|---|---|---|
| Double DQN | max가 만드는 과대추정. 고를 때와 평가할 때 네트워크를 나눈다 | 기본으로 켠다 |
| n-스텝 리턴 | 보상이 느리게 퍼지는 문제. 3스텝 정도 미리 더한다 | 대개 이득 |
| Dueling | 상태 가치와 행동별 이점을 나눠 학습 | 이득 |
| 우선순위 재생 | TD 오차가 큰 경험을 더 자주 뽑는다 | 상황에 따라 구현이 까다롭다 |
| 분포형 (C51 등) | 기대값이 아니라 리턴의 분포를 배운다 | 이름만 위험 민감 과제에서 재조명 |
| 노이지 네트워크 | ε-greedy 대신 가중치에 잡음 | 이름만 |
이 여섯을 다 합친 것이 Rainbow다. 시험 삼아 이름을 외우기보다, “과대추정을 잡고(Double), 보상을 빨리 퍼뜨리고(n-스텝), 좋은 경험을 더 본다(우선순위)” 라는 세 방향으로 기억하는 편이 쓸모 있다.
과대추정이 왜 생기나
섹션 제목: “과대추정이 왜 생기나”E[ max(추정치들) ] ≥ max( E[추정치들] )잡음이 섞인 값들 중에서 최대를 고르면, 운 좋게 크게 튄 것을 고르게 된다. 그래서
max를 반복하면 Q값이 계속 부풀어 오른다.
Double DQN의 처방은 “고르는 네트워크”와 “값을 매기는 네트워크”를 분리하는 것이다.
DQN : r + γ · Q(s', argmax_a' Q(s',a'; θ⁻) ; θ⁻) 같은 네트워크로 고르고 평가Double DQN : r + γ · Q(s', argmax_a' Q(s',a'; θ ) ; θ⁻) 현재 망이 고르고, 타깃 망이 평가과대추정을 줄이려는 목표는 그대로 살아남았다. 6장의 TD3는 고르기·평가 분리와는 다른 메커니즘인 “두 크리틱 중 작은 값”으로 같은 문제를 억제한다.
언제 이 계열을 고르나
섹션 제목: “언제 이 계열을 고르나”| 고른다 | 안 고른다 |
|---|---|
| 행동이 이산이고 개수가 적다 (수십~수백) | 행동이 연속이다 → argmax를 못 구한다 |
| 샘플이 비싸다 — 재사용해야 한다 | 대량 병렬 수집이 쉽다 → PPO도 강한 기준선 |
| 과거 데이터로 배워야 한다 (off-policy) | 정책의 확률 자체가 필요하다 (섞인 전략) |
| 상태가 이미지·정형 데이터 | 행동 차원이 크고 구조적이다 |
두 응용에서의 위치는 이렇다.
| 응용 | 가치 기반의 자리 |
|---|---|
| 로봇 | 거의 안 쓴다 — 관절 토크는 연속이다. 다만 SAC 안에 Q 학습이 그대로 들어 있다 |
| 트레이딩 | 이산 행동이면 후보가 되지만, 과거 로그만 쓸 때는 오프라인 보정과 강한 기준선 비교가 필요하다 (7장) |
참고 자료
섹션 제목: “참고 자료”- Human-level control through deep reinforcement learning — DQN 원 논문
- Deep Reinforcement Learning with Double Q-learning — Double DQN과 과대추정 분석
- Reinforcement Learning: An Introduction, 2nd ed. — Q러닝, SARSA, 함수 근사와 치명적 삼요소
4장 요약
섹션 제목: “4장 요약”- Q러닝은 벨만 최적 방정식을 TD 규칙으로 옮긴 것이다 —
max때문에 off-policy다 - 표는 상태가 조금만 늘어도 못 쓰고 일반화도 못 한다. 그래서 신경망으로 간다
- 그런데 함수 근사 + 부트스트래핑 + off-policy(치명적 삼요소)가 겹치면 발산할 수 있다
- DQN의 두 처방 — 경험 재생(상관을 깨고 재사용)과 타깃 네트워크(목표를 고정)
- 이 둘은 DQN을 넘어 많은 딥 off-policy 알고리즘의 공통 부품이 됐다
- 개선은 세 방향으로 기억한다 — 과대추정을 잡고 · 보상을 빨리 퍼뜨리고 · 좋은 경험을 더 본다
- 과대추정은
max가 잡음 중 큰 것을 고르기 때문이다. Double DQN은 고르기와 평가를 분리한다 - 연속 행동에는 못 쓴다. 로봇이 이 계열을 쓰지 않는 이유이고, 트레이딩에서 여전히 쓰는 이유다