TrendShift 딥다이브 · 2026-07-18 · Daily #8

alxndrTL/little-book-rl 딥다이브
— 강화학습을 몬테카를로에서 PPO까지 154쪽으로 압축한 책 + 실행 가능한 코드

little-book-rl『The Little Book of Reinforcement Learning』이라는 154쪽짜리 강화학습 입문서와, 그 책이 설명하는 알고리즘 6종을 PyTorch로 직접 구현한 코드를 한 저장소에 묶은 자료다. 이름의 "Little"이 핵심 — Sutton & Barto의 500쪽짜리 교과서를 읽기 전, "표(테이블) 기반 Q-러닝에서 시작해 딥 Q-네트워크(DQN)를 거쳐 정책 경사(policy gradient)·PPO까지" 하나의 계단으로 잇는 얇고 밀도 높은 지도다. 가장 먼저 각인할 것 — 이 저장소는 "이론 문장 하나 = 실행되는 코드 한 줄"로 짝지어져 있어, PDF를 읽다가 막히면 algos/ 폴더의 단일 파일 스크립트를 그대로 돌려보며 확인할 수 있다. 각 스크립트는 유명한 CleanRL 스타일(파일 하나에 알고리즘 전체)을 따른다. 이 문서는 소스를 직접 클론해 "이 저장소에서 강화학습을 어떻게 배울 수 있는가"를 파고든다. (저장소: alxndrTL/little-book-rl · Python/PyTorch · 알고리즘 6종 구현 + 책 PDF 154쪽 · CC BY-SA 4.0(비상업) · 저자 Alexandre Torres-Leguet · 별 1,123 · 포크 54 · 생성 2026-05-05 · 최신 커밋 2026-07-14 · TrendShift Daily #8)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석 — 강화학습의 사다리
  5. 디렉토리 구조 해부
  6. 학습 포인트 — 알고리즘별 배울 것
  7. 시스템 · 실행 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

이 저장소가 정확히 무엇인가

little-book-rl"짧은 강화학습 책 1권 + 그 책에 나오는 알고리즘의 PyTorch 참조 구현 6종 + 동적계획법 증명 부록"이 전부인, 학습 전용 저장소다. 코드베이스가 아니라 교재(courseware)에 가깝다.

한 문장 비유

"요리 이론 책과, 그 책의 모든 레시피를 실제로 만들어 본 주방을 한 상자에 담은 것."

책(book.pdf)은 "왜 이렇게 익히는가"를 설명하고, algos/ 폴더의 스크립트는 "그래서 실제로 이렇게 돌아간다"를 보여준다. 이론서는 많고 실행 코드도 많지만, 둘을 같은 저자가 같은 표기법으로 짝지어 놓은 것이 이 저장소의 값어치다.

구체적으로 저장소에는 세 덩어리가 들어 있다.

구성물정체분량
book.pdf강화학습 입문서 본문 (V1, 2026년 6월)154쪽
algos/알고리즘 6종 PyTorch/NumPy 구현 (단일 파일 스크립트)약 1,728줄
supplementary/동적계획법(DP) 알고리즘의 상세 증명 문서 (저자가 2021년에 씀)PDF 별첨

구현된 알고리즘 6종은 강화학습을 배우는 표준적인 순서를 그대로 따른다: tabular(표 기반: MC·SARSA·Q-러닝·n-step SARSA·SARSA(λ)) → DQN(딥 Q-네트워크) → SPG(단순 정책 경사) → REINFORCEVPG(바닐라 정책 경사) → PPO. 즉 "값을 배우는 방법"에서 시작해 "정책을 직접 배우는 방법"으로 넘어가는 두 개의 큰 갈래를 모두 담았다.

용어
강화학습 (RL, Reinforcement Learning)
정답 데이터를 주는 대신, 행동에 따른 보상(reward)만 주고 스스로 시행착오로 최적 행동을 찾게 하는 기계학습의 한 갈래. 게임 플레이·로봇 제어·최근에는 LLM의 인간 선호 학습(RLHF)까지 이 원리를 쓴다.

2왜 지금 주목받는가

별 1천 개가 며칠 만에 붙은 이유

강화학습 자료는 세상에 넘친다. 그런데도 이 저장소가 TrendShift Daily 상위권(#8)에 오른 데에는 뚜렷한 이유가 있다.

① "얇다"는 것 자체가 셀링 포인트

강화학습 입문의 사실상 표준인 Sutton & Barto의 『Reinforcement Learning: An Introduction』은 500쪽이 넘는다. 정확하지만 처음 보는 사람에게는 완주 자체가 벽이다. little-book-rl은 154쪽으로 "MC부터 PPO까지"의 큰 지도를 먼저 손에 쥐여주는 것을 노린다. 세부를 다 담기보다, 전체 지형을 빠르게 훑고 나서 두꺼운 책으로 넘어가게 하는 진입로 역할이다.

비유

두꺼운 정식 교과서가 1:25,000 등산 지도라면, 이 책은 등산로 입구의 안내판이다. 안내판만으로 정상에 오를 수는 없지만, "어느 봉우리가 어디에 있고 어떤 순서로 올라야 하는지"를 5분 만에 파악하게 해준다. 그 다음 상세 지도를 펴면 훨씬 덜 헤맨다.

② 이론과 코드가 같은 표기법으로 짝지어져 있다

많은 사람이 강화학습에서 막히는 지점은 "수식은 봤는데 코드로 어떻게 옮기는지 모르겠다"이다. 이 저장소는 각 스크립트 맨 위 주석에 "책에는 없지만 코드에는 넣은 실전 디테일"을 명시한다. 예를 들어 REINFORCE 코드 상단에는 "책과 달리 (1) 정책망 가중치 특수 초기화, (2) 병렬 벡터 환경, (3) 경사하강 대신 Adam 옵티마이저를 썼다"고 적혀 있다. "교과서 버전"과 "돌아가는 버전"의 간극을 저자가 대신 메워 준 것이다.

③ 신뢰받는 CleanRL 계보를 따른다

DQN·PPO 구현은 아예 유명한 오픈소스 CleanRL(vwxyzjn/cleanrl)의 코드를 "완결성을 위해" 그대로 가져왔다고 밝힌다. CleanRL은 "알고리즘 하나 = 파일 하나, 숨은 추상화 없음"을 원칙으로 하는 강화학습 교육용 레포의 사실상 표준이다. TensorBoard·Weights & Biases 로깅, tyro 기반 CLI 인자, 재현용 시드 고정 같은 관행을 그대로 물려받아, 초보자가 "실제 연구자들이 쓰는 실험 코드"의 생김새를 익히게 한다.

④ 저자의 신뢰 자본

저자 Alexandre Torres-Leguet(GitHub alxndrTL, X @AlexandreTL2)는 프랑스 École Centrale Lille 소속으로, ML 논문을 해설·재현하는 유튜브 채널(구독 7천+·영상 70편+)과 인기 오픈소스 mamba.py로 이미 알려진 인물이다. "설명을 잘하는 사람이 쓴 입문서"라는 기대가 초기 확산을 밀어 올렸고, Hacker News·X에서 화제가 되며 며칠 만에 별이 1천 개를 넘었다.

주의
"코드 저장소"가 아니라 "책 저장소"다

이 레포에는 라이브러리·프레임워크·설치형 패키지가 없다. 별점을 "소프트웨어 인기"로 오해하면 안 된다. 핵심 산출물은 PDF 책이고, 코드는 그 보조 자료(supplementary)다. 심지어 책 자체는 종이책으로 아마존에서 판매되며(유료), 저장소의 PDF는 저자가 무료로 공개한 판본이다.

3기술 스택 전체 지도

코드가 무엇 위에서 돌아가는가

스택은 의도적으로 단순하다. "학습용"이라는 목적에 맞게, 요즘 파이썬 강화학습 실험에서 가장 널리 쓰는 최소 세트만 골랐다.

핵심 라이브러리

도구역할왜 이걸 쓰나
PyTorch신경망(정책망·가치망) 정의와 자동 미분딥러닝 계열(DQN 이후)의 파라미터 학습 전부를 담당. torch.nn·torch.optim.Adam·Categorical 분포.
Gymnasium학습 환경(게임·시뮬레이션) 표준 인터페이스OpenAI Gym의 후계. env.reset()·env.step(a)라는 통일된 규약으로 CartPole·FrozenLake 등을 제공.
NumPy표(tabular) 알고리즘의 Q-테이블·행렬 연산딥러닝이 필요 없는 tabular.py는 PyTorch 없이 순수 NumPy 배열 Q[s,a]로 구현.
tyro명령줄 인자(CLI) 자동 생성@dataclass Args를 그대로 --learning-rate 0.1 같은 CLI 플래그로 노출. 실험 파라미터 조정을 코드 수정 없이.
TensorBoard학습 곡선 실시간 시각화SummaryWriter로 에피소드 보상·손실·엡실론을 기록 → 브라우저에서 그래프로 확인.
Weights & Biases (선택)클라우드 실험 추적--track 플래그를 켜면 W&B로도 동기화. 기본은 꺼져 있음.
용어
Gymnasium (짐네이지엄)
강화학습 에이전트가 상호작용할 "환경"을 표준 규격으로 감싼 라이브러리. 어떤 게임이든 reset()으로 시작하고 step(행동)으로 (다음 상태, 보상, 종료 여부)를 돌려준다. 이 통일된 인터페이스 덕분에 알고리즘 코드를 환경과 무관하게 재사용할 수 있다.

두 가지 실험 환경

코드가 기본으로 쓰는 환경은 강화학습 교육의 "Hello World" 두 개다.

CleanRL 유틸리티 재사용

DQN은 from cleanrl_utils.buffers import ReplayBuffer경험 재현 버퍼(replay buffer)를 가져온다. 즉 이 저장소만 클론해서는 DQN이 바로 안 돌고, CleanRL 유틸을 함께 설치해야 한다(뒤 7장 참고). 이는 "이미 검증된 부품은 다시 짜지 않는다"는 교육적 선택이다.

배울 점
"단일 파일 = 알고리즘 하나" 철학

각 스크립트는 import·하이퍼파라미터·환경 생성·학습 루프·평가·로깅까지 파일 하나에 처음부터 끝까지 담겨 있다. 클래스 상속이나 숨은 추상화가 없어서, 위에서 아래로 한 번 읽으면 알고리즘 전체가 머리에 들어온다. 규모가 큰 프로덕션 코드와는 정반대의, 그러나 배우기엔 최고인 설계다.

4아키텍처 심화 분석 — 강화학습의 사다리

6개 알고리즘이 어떻게 서로 이어지는가

이 저장소의 "아키텍처"는 소프트웨어 구조가 아니라 알고리즘들이 쌓이는 개념의 사다리다. 이걸 이해하면 강화학습 입문의 절반은 끝난 것이다.

모든 강화학습의 공통 뼈대: 에이전트–환경 루프

구현이 6개든 60개든, 강화학습은 전부 아래 한 개의 순환 위에서 돈다.

┌──────────────────────────────────────────────┐ │ │ │ 상태 s_t 보상 r_t │ │ │ ▲ │ ▼ ▼ │ │ ┌─────────────────┐ 행동 a_t ┌────────────────┐ │ 에이전트 │ ─────────────▶ │ 환경 │ │ (정책 π) │ │ (Gymnasium) │ └─────────────────┘ └────────────────┘ ▲ │ │ 다음 상태 s_t+1, 보상 r_t+1 │ └──────────────────────────────────────┘ 목표: 누적 보상 G = r_0 + γ·r_1 + γ²·r_2 + ... 를 최대화 (γ = 할인율, 미래 보상을 얼마나 중시할지)
용어
정책 (Policy, π) / 할인율 (γ, gamma)
정책은 "상태를 보고 어떤 행동을 할지 정하는 규칙" — 강화학습이 최종적으로 배우려는 대상이다. 할인율 γ(0~1)는 "지금의 보상 1점 vs 열 걸음 뒤의 보상 1점"의 가치 차이를 정한다. γ가 0.99면 미래를 거의 그대로 중시하고, 0에 가까우면 눈앞의 보상만 본다.

두 갈래: 값을 배울 것인가, 정책을 배울 것인가

강화학습 알고리즘은 크게 두 진영으로 갈린다. 이 저장소의 algos/ 폴더가 value_based/policy_based/로 나뉜 이유가 바로 이것이다.

강화학습 알고리즘 │ ┌──────────────────┴───────────────────┐ ▼ ▼ ┌──────────────┐ ┌──────────────┐ │ 값 기반 │ │ 정책 기반 │ │ value-based │ │ policy-based │ └──────────────┘ └──────────────┘ "각 (상태,행동)이 "정책 π를 신경망으로 얼마나 좋은지 Q값을 직접 두고, 좋은 행동의 배우고, 가장 큰 Q를 확률을 높이는 방향으로 고른다" 파라미터를 민다" │ │ ┌─────┴──────┐ ┌──────────┼──────────┐ ▼ ▼ ▼ ▼ ▼ tabular DQN SPG → REINFORCE → VPG → PPO (MC/SARSA/ (신경망 (점점 분산을 줄이고, 안정성을 Q-러닝 …) Q함수) 높여가는 정책 경사 계열)

값 기반 계단: tabular → DQN

tabular.py는 상태·행동이 적어서 Q값을 그냥 표(2차원 배열 Q[s,a])에 적어둘 수 있을 때의 방법 5종을 한 파일에 담았다. 여기서 강화학습의 가장 근본 아이디어인 시간차 학습(TD)부트스트래핑을 배운다. Q-러닝의 심장은 딱 한 줄이다:

# Q-러닝 갱신 (tabular.py) — "예측을 실제로 조금씩 끌어당긴다"
bootstrap = 0.0 if term else float(np.max(Q[s_next]))
Q[s, a] += args.learning_rate * (r + args.gamma * bootstrap - Q[s, a])
#                                └── 목표(target) ──┘   └현재추정┘
#      새 추정 = 현재 추정 + 학습률 × (더 나은 목표 - 현재 추정)
용어
부트스트래핑 (Bootstrapping) / TD(시간차) 학습
"끝까지 가보지 않고, 한 걸음 뒤의 내 예측값을 정답 대신 빌려 써서 지금 예측을 고치는" 기법. 위 코드의 np.max(Q[s_next])가 그 "빌려온 미래 예측"이다. 몬테카를로(MC)가 에피소드가 끝나야 배우는 것과 달리, TD는 매 걸음 배울 수 있어 훨씬 빠르다.

같은 파일 안에서 SARSA(실제 한 행동으로 배움=on-policy), n-step SARSA(한 걸음 대신 n걸음 뒤를 봄), SARSA(λ)(적격 흔적, eligibility trace로 여러 걸음을 한꺼번에)로 확장하며 "얼마나 멀리 내다볼까"라는 축을 실험한다. 그 다음 dqn.py에서 표가 너무 커지면(연속 상태) Q표를 신경망으로 바꾼다. 이때 딥 강화학습의 두 안정화 장치가 등장한다.

# DQN 핵심 (dqn.py)
# ① 타깃 네트워크: 목표값 계산엔 "천천히 따라오는 복제망"을 씀
target_max, _ = target_network(data.next_observations).max(dim=1)
td_target = data.rewards.flatten() + args.gamma * target_max * (1 - data.dones.flatten())
loss = F.mse_loss(td_target, old_val)
# ② 경험 재현(replay buffer): 과거 경험을 무작위로 꺼내 상관관계를 깬다
비유

타깃 네트워크는 "움직이는 과녁을 맞추기 어려우니, 과녁을 잠시 고정해 두고 조준한 뒤 이따금 옮기는" 트릭이다. 학습 중인 신경망으로 목표까지 계산하면 과녁이 매 순간 흔들려 발산하기 쉽다. 그래서 목표 계산용 복제망을 따로 두고 target_network_frequency(기본 500스텝)마다 천천히 동기화한다.

정책 기반 계단: SPG → REINFORCE → VPG → PPO

정책 기반은 "Q값을 거치지 않고 정책 자체를 신경망으로 두고 밀어붙인다". 이 저장소는 가장 단순한 형태에서 시작해, 학습을 불안정하게 만드는 "분산(variance)"을 한 단계씩 줄여가는 아름다운 순서로 배치돼 있다.

순서알고리즘정책 경사에 무엇을 곱하나 (핵심 차이)
1SPG (단순 정책 경사)에피소드 전체 보상 합 G(τ)를 그대로. 가장 단순·가장 분산 큼.
2REINFORCEreward-to-go(그 시점 이후의 보상만). "과거는 지금 행동 탓이 아니다"는 통찰로 분산↓.
3VPG (바닐라 정책 경사)어드밴티지 A(기준선 대비 얼마나 나았나) — 가치망(critic)+GAE 도입.
4PPO어드밴티지 + 클리핑(clipping)으로 "한 번에 너무 크게 바꾸지 않기". 사실상 현대 표준.

세 갈래를 관통하는 정책 경사의 코드는 놀랍도록 짧다. SPG의 손실 계산이 대표적이다:

# SPG 손실 (spg.py) — "좋은 결과를 낸 행동의 로그 확률을 높인다"
log_probs = agent.log_prob(batch_obs, batch_actions)
loss = -(batch_G * log_probs).sum() / args.num_trajectories
#        └ 보상이 크면(batch_G↑) 그 행동의 확률(log_probs)을 더 강하게 밀어올림

REINFORCE는 batch_G를 "reward-to-go"로, VPG는 아래 GAE(일반화 어드밴티지 추정)로 바꾼다. 이 한 줄만 갈아끼우며 분산을 줄여가는 게 정책 경사 계단의 전부다.

# GAE (vpg.py) — 어드밴티지를 뒤에서 앞으로 굴려 계산
for t in reversed(range(T)):
    next_value = values[t + 1] if t + 1 < T else 0.0   # V(종료상태)=0
    delta = rewards[t] + gamma * next_value - values[t]
    advantages[t] = last_gae = delta + gamma * lam * last_gae
용어
어드밴티지 (Advantage) / 크리틱 (Critic)
어드밴티지는 "이 행동이 평균적으로 기대되던 것보다 얼마나 더 좋았나"를 재는 값. 단순 보상 대신 이걸 쓰면, "원래 좋은 상태라 보상이 컸을 뿐"인 경우를 걸러내 학습이 안정된다. 이 "평균 기대치"를 예측해 주는 보조 신경망이 크리틱(가치망)이고, 정책망은 액터(actor)라 불러 둘을 합치면 액터-크리틱 구조가 된다.

5디렉토리 구조 해부

폴더 하나하나가 무엇을 담는가
little-book-rl/ ├── book.pdf ← 본문 154쪽 (핵심 산출물) ├── README.md ← 저장소 안내 + 아마존 구매 링크 ├── assets/ │ └── poster_livre.png ← 책 표지/포스터 이미지 ├── supplementary/ │ └── dynamic_programming.pdf ← 동적계획법 증명 부록 (저자 2021년 작성) └── algos/ ← 알고리즘 PyTorch/NumPy 구현 ├── value_based/ │ ├── tabular.py (341줄) MC·SARSA·Q러닝·n-step·SARSA(λ) 5종 │ └── dqn.py (260줄) 딥 Q-네트워크 (CleanRL에서 가져옴) └── policy_based/ ├── spg.py (234줄) 단순 정책 경사 ├── reinforce.py (237줄) REINFORCE (reward-to-go) ├── vpg.py (324줄) 바닐라 정책 경사 (크리틱+GAE) └── ppo.py (332줄) PPO (CleanRL에서 가져옴)

구조가 곧 커리큘럼이다. 폴더 2개(값 기반/정책 기반) × 파일들이 그대로 책의 목차 순서를 반영한다. 특이점 몇 가지:

함정
requirements.txt·setup.py가 없다

이 저장소에는 의존성 명세 파일이 없다. 코드를 돌리려면 PyTorch·gymnasium·tyro·tensorboard, 그리고 DQN을 위한 cleanrl_utils직접 설치해야 한다. "책의 부록"이라는 성격상 당연하지만, 클론하자마자 python dqn.py가 돌 거라 기대하면 ModuleNotFoundError를 만난다(7장 참고).

6학습 포인트 — 알고리즘별 배울 것

각 파일에서 정확히 무엇을 얻어갈 수 있나
tabular.py 에서

강화학습의 "제1원리" 5종 세트

배울 것: 몬테카를로(에피소드 끝나야 배움) vs TD(매 걸음 배움)의 차이, on-policy(SARSA)와 off-policy(Q-러닝)의 구분, ε-그리디 탐험, n-step으로 "얼마나 멀리 볼지" 조절하기, 적격 흔적(eligibility trace). 신경망이 없어 알고리즘의 순수한 뼈대만 본다.

실습 아이디어: --algo를 mc→sarsa→q_learning으로 바꿔가며 FrozenLake 학습 곡선을 TensorBoard로 겹쳐 보기. 왜 Q-러닝이 더 공격적으로 배우는지 눈으로 확인.

dqn.py 에서

표를 신경망으로 바꿀 때 생기는 문제와 해법

배울 것: 함수 근사(function approximation)가 왜 불안정한지, 그리고 이를 잡는 두 기둥 — 경험 재현 버퍼(데이터 상관관계 깨기)와 타깃 네트워크(과녁 고정). Adam 옵티마이저, 엡실론 선형 감소 스케줄, 벡터화 환경 같은 실전 관행도 함께.

실습 아이디어: target_network_frequency를 1(=타깃망 없음)로 놓고 학습이 얼마나 흔들리는지 관찰 → 안정화 장치의 가치를 체감.

spg → reinforce → vpg → ppo 에서

"분산 줄이기"라는 하나의 이야기

배울 것: 정책 경사 정리(policy gradient theorem)를 코드로. 전체 보상(SPG) → reward-to-go(REINFORCE) → 어드밴티지+GAE(VPG) → 클리핑(PPO)으로 이어지는 개선의 논리. 핵심 손실 계산은 매번 몇 줄만 바뀐다는 걸 직접 비교하며 확인.

실습 아이디어: 네 스크립트를 같은 CartPole·같은 시드로 돌려 학습 안정성·속도를 나란히 비교. PPO의 clip_coef를 크게 키우면 왜 성능이 무너지는지 실험.

7시스템 · 실행 요구사항

무엇을 깔아야 돌아가는가

하드웨어 요구는 매우 가볍다. 예제 환경(CartPole·FrozenLake)은 작아서 GPU 없이 노트북 CPU로도 몇 분이면 학습된다. DQN·PPO도 CUDA가 있으면 쓰지만(cuda: bool = True) 필수는 아니다.

항목필요
Python3.10+ 권장 (list[float]·Literal 타입 힌트 사용)
필수 패키지torch, gymnasium, numpy, tyro, tensorboard
DQN 추가cleanrl_utils (경험 재현 버퍼 ReplayBuffer)
선택wandb(클라우드 추적), moviepy(capture_video 시)
GPU불필요 (있으면 딥 계열 가속, 예제 규모에선 체감 작음)

가장 확실한 설치·실행 순서:

# 1) 저장소 클론
git clone https://github.com/alxndrTL/little-book-rl.git
cd little-book-rl

# 2) 의존성 설치 (requirements.txt가 없으므로 수동)
pip install torch gymnasium numpy tyro tensorboard
pip install cleanrl_utils        # DQN용 ReplayBuffer

# 3) 표 기반 Q-러닝부터 (GPU 불필요, 수십 초)
python algos/value_based/tabular.py --algo q_learning --env-id FrozenLake-v1

# 4) 정책 경사 계단 오르기
python algos/policy_based/ppo.py --env-id CartPole-v1

# 5) 학습 곡선 보기
tensorboard --logdir runs
함정
cleanrl_utils 설치가 까다로울 수 있다

cleanrl_utils는 독립 PyPI 패키지로 항상 매끄럽게 깔리지는 않는다. 막히면 CleanRL 저장소(vwxyzjn/cleanrl)에서 cleanrl_utils/buffers.py만 가져오거나, stable-baselines3ReplayBuffer로 대체하는 방법도 있다. tabular·spg·reinforce·vpg는 이 의존성이 없어 바로 돌아간다 — DQN을 잠시 건너뛰고 나머지부터 배워도 된다.

8직접 해볼 수 있는 실습 과제

읽기만 하지 말고 손을 움직여 보기 — 난이도별 5개

과제 1. 알고리즘 대결표 만들기 난이도 ★☆☆

tabular.py--algo만 바꿔 mc·sarsa·q_learning·n_step_sarsa·sarsa_lambda 5종 모두 FrozenLake에서 돌리고, TensorBoard의 eval/mean_return 곡선을 한 그래프에 겹쳐라. "누가 가장 빨리, 가장 높이 배우는가"를 한 장의 표로 정리해 본다.

과제 2. 안정화 장치 떼어보기 난이도 ★★☆

DQN에서 (a) 타깃 네트워크 동기화 주기를 500→1로, (b) 경험 재현 버퍼 크기를 아주 작게(예: 배치 크기만큼) 바꿔 각각 학습해 보라. 학습 곡선이 얼마나 흔들리는지 관찰하고, 왜 두 장치가 딥 강화학습의 필수 부품인지 자기 말로 설명해 본다.

과제 3. 정책 경사 계단 재현 난이도 ★★☆

spg → reinforce → vpg → ppo를 같은 시드·같은 CartPole로 각각 5회 돌려, 평균 학습 곡선과 분산(밴드)을 그려라. "SPG는 왜 이렇게 요동치고, PPO는 왜 안정적인가"를 손실에 무엇을 곱하는지(전체보상→reward-to-go→어드밴티지)의 차이로 연결해 설명한다.

과제 4. 새 환경에 옮겨 붙이기 난이도 ★★★

PPO를 CartPole 대신 LunarLander-v3(연속적이고 더 어려운 환경)로 옮겨라. 하이퍼파라미터(학습률·num_steps·gae_lambda·clip_coef)를 조정해 착륙에 성공시켜 본다. 어떤 파라미터가 성패를 갈랐는지 기록한다.

과제 5. 부트스트래핑을 코드로 증명 난이도 ★★★

tabular.py의 n-step SARSA에서 --n-step을 1, 4, 16, ∞(=MC와 같아짐)로 바꿔 편향-분산 트레이드오프를 실험하라. "n이 작으면 편향↑·분산↓, n이 크면 반대"라는 이론적 주장을 실제 곡선으로 뒷받침할 수 있는지 확인한다.

9관련 기술 심화 학습 로드맵

이 책을 발판으로 어디까지 갈 수 있나 — 4주 계획 예시
주차목표구체적 활동
1주차표 기반 강화학습 완전 이해book.pdf의 MC~TD 파트 읽기 + tabular.py 5종 전부 실행·비교. 벨만 방정식·부트스트래핑·on/off-policy를 자기 말로 설명할 수 있게.
2주차딥 강화학습 진입DQN 파트 읽기 + dqn.py 정독. 경험 재현·타깃 네트워크를 손으로 그려 설명. 원논문(Mnih et al. 2015, Atari DQN) 초록 읽기.
3주차정책 경사 계열 마스터spg→reinforce→vpg→ppo를 순서대로 읽고 손실 코드 비교. GAE 논문(Schulman et al. 2016)·PPO 논문(2017) 훑기.
4주차두꺼운 교과서로 이관 + 응용Sutton & Barto 해당 장으로 넘어가 빈틈 메우기. 관심 응용(로봇 제어·게임·RLHF) 중 하나로 미니 프로젝트 착수.
방향 잡기

이 책의 진짜 가치는 "완주 후 다음"에 있다. 154쪽으로 지형을 익혔다면, 다음 목적지는 세 갈래다 — (1) 이론 심화: Sutton & Barto 완독, (2) 구현 심화: CleanRL·Stable-Baselines3로 더 큰 환경(Atari·MuJoCo) 다루기, (3) 최신 응용: LLM을 강화학습으로 정렬하는 RLHF·GRPO. 이 저장소의 PPO 이해가 (3)의 직접적 전제가 된다.

10핵심 키워드 사전

이 문서에 나온 용어 빠른 정리
용어
정책 (Policy, π)상태를 보고 어떤 행동을 할지 정하는 규칙. 강화학습이 최종적으로 배우는 대상.
가치/Q값어떤 상태(V) 또는 (상태,행동) 쌍(Q)이 앞으로 얼마나 좋을지의 기대 누적 보상.
할인율 (γ)미래 보상을 현재 대비 얼마나 중시할지(0~1). 1에 가까울수록 장기 시야.
TD / 부트스트래핑에피소드 끝까지 안 가고 한 걸음 뒤 예측을 빌려 지금 예측을 고치는 학습.
on-policy / off-policy실제 행한 정책으로 배우면 on(SARSA), 다른(탐욕적) 정책 기준으로 배우면 off(Q-러닝).
ε-그리디대부분 최선의 행동을 하되, ε 확률로 무작위 탐험. 탐험-활용 균형의 가장 단순한 방법.
경험 재현 버퍼과거 경험을 저장해 두고 무작위로 꺼내 학습 → 데이터 간 상관관계를 깨 안정화.
타깃 네트워크목표값 계산용으로 따로 둔, 천천히 갱신되는 복제 신경망. "과녁 고정" 효과.
정책 경사좋은 결과를 낸 행동의 확률을 높이는 방향으로 정책망 파라미터를 미는 방법.
어드밴티지 / GAE"평균 기대보다 얼마나 나았나". GAE는 이를 편향-분산 균형 있게 추정하는 기법.
액터-크리틱행동을 고르는 정책망(액터)+가치를 예측하는 가치망(크리틱)을 함께 쓰는 구조.
PPO어드밴티지에 클리핑을 더해 "한 번에 너무 크게 안 바꾸도록" 한 현대 표준 알고리즘.
CleanRL"알고리즘 하나=파일 하나"를 원칙으로 한 교육용 강화학습 구현 모음. 이 책이 계보를 따름.

11참고 링크

더 파고들 곳