REINFORCE는 잡음(noise)이 큽니다. V̂(s)를 학습하는 크리틱(critic)을 추가해 그 값을 리턴(return)에서 빼면, 기댓값은 같지만 분산은 훨씬 낮은 어드밴티지(advantage)를 얻습니다. 이것이 액터-크리틱(actor-critic)입니다. A2C는 이를 동기적으로(synchronously) 실행하고, A3C는 여러 스레드(thread)에 걸쳐 비동기적으로(asynchronously) 실행합니다. 두 알고리즘 모두 현대의 모든 심층 강화학습(deep-RL) 방법론의 사고 모형(mental model)이 됩니다.
유형: Build
언어: Python
선수 지식: Phase 9 · 04 (TD Learning), Phase 9 · 06 (REINFORCE)
예상 시간: 약 75분
문제
기본형 REINFORCE(Vanilla REINFORCE)는 동작하기는 하지만 분산이 매우 큽니다. 몬테카를로(Monte Carlo) 리턴 G_t는 에피소드(episode)마다 10배 이상 출렁일 수 있습니다. 이 잡음에 ∇ log π를 곱한 뒤 평균을 내면, 같은 거리만큼 정책을 움직이는 데 DQN 업데이트 몇 번이면 충분할 일을 위해 수천 에피소드가 필요한 그래디언트 추정량(gradient estimator)이 됩니다.
분산은 가공하지 않은 리턴(raw return)을 그대로 쓰기 때문에 생깁니다. 베이스라인(baseline) b(s_t)를 빼면 기댓값은 그대로지만 분산은 줄어듭니다. 여기서 b(s_t)는 학습된 가치(learned value)를 포함해 상태에 대한 임의의 함수입니다. 다룰 수 있는 가장 좋은 베이스라인은 V̂(s_t)이고, 이때 ∇ log π에 곱해지는 양이 곧 *어드밴티지(advantage)*가 됩니다.
A(s, a) = G - V̂(s)
어떤 행동(action)은 평균보다 높은 리턴을 만들면 좋고, 평균보다 낮은 리턴을 만들면 나쁩니다. 학습된 크리틱을 가진 REINFORCE가 바로 액터-크리틱입니다. 크리틱은 액터(actor)에게 분산이 낮은 교사(teacher) 역할을 합니다. 이 구조가 2015년 이후 등장한 모든 심층 정책(deep-policy) 방법론(A2C, A3C, PPO, SAC, IMPALA)의 토대입니다.
사전 테스트
2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요
1.액터-크리틱(actor-critic) 방법은 REINFORCE에 학습된 가치 함수(크리틱, critic)를 추가합니다. 이 아키텍처에서 크리틱의 주요 목적은 무엇인가요?
2.MC 어드밴티지(G_t - V(s_t))와 TD 어드밴티지(r + gamma*V(s') - V(s_t))의 핵심적인 차이는 무엇인가요?
0/2 답변 완료
개념
두 신경망(network), 하나의 공유 손실(shared loss).
액터(Actor)π_θ(a | s): 정책(policy)입니다. 행동할 때 샘플링하며, 정책 그래디언트(policy gradient)로 학습합니다.
n = 1은 순수 TD입니다. n = ∞는 MC입니다. 대부분의 구현은 Atari에서 n = 5, MuJoCo에서 PPO를 돌릴 때 n = 2048을 사용합니다.
일반화 어드밴티지 추정(Generalized Advantage Estimation; GAE). Schulman et al. (2016)은 모든 n-스텝 어드밴티지에 대해 지수적으로 가중한 평균(exponentially weighted average)을 제안했습니다.
A_t^{GAE} = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}
여기서 λ ∈ [0, 1]입니다. λ = 0은 TD에 해당하며 분산이 낮고 편향이 큽니다. λ = 1은 MC에 해당하며 분산이 크지만 편향이 없습니다. λ = 0.95가 2026년 기준 기본값이고, 편향-분산(bias/variance) 손잡이가 원하는 위치에 올 때까지 조정합니다.
A2C: 동기 어드밴티지 액터-크리틱(synchronous advantage actor-critic).N개의 병렬 환경(parallel environment)에서 T 스텝씩 모은 뒤, 각 스텝의 어드밴티지를 계산하고 합쳐진 배치(batch)에서 액터와 크리틱을 동시에 업데이트합니다. 이 과정을 반복합니다. A3C보다 단순하고 규모를 키우기 쉬운 형제 격 알고리즘입니다.
A3C: 비동기 어드밴티지 액터-크리틱(asynchronous advantage actor-critic). Mnih et al. (2016)의 알고리즘입니다. N개의 워커 스레드(worker thread)를 띄우고, 각 워커는 하나의 환경(env)을 실행합니다. 각 워커는 자기 자신의 롤아웃(rollout)에서 로컬로 그래디언트를 계산한 뒤, 공유 파라미터 서버(shared parameter server)에 비동기적으로 적용합니다. 워커들이 서로 다른 궤적(trajectory)을 만들어 상관관계를 풀어주므로 리플레이 버퍼(replay buffer)는 필요 없습니다. A3C는 CPU에서도 대규모 학습이 가능하다는 점을 보여주었습니다. 2026년에는 GPU에서 배치된 병렬 환경(batched parallel envs)을 돌리는 GPU 기반 A2C가 지배적인데, GPU는 큰 배치를 원하기 때문입니다.
테이블형 환경(tabular env)에서는 크리틱이 수백 에피소드 안에 수렴합니다. Atari에서는 선형 크리틱을 공유 CNN 트렁크(shared CNN trunk)에 가치 헤드(value head)를 붙인 구조로 교체합니다.
Step 2: n-스텝 어드밴티지
길이 T의 롤아웃과 부트스트랩(bootstrap)된 마지막 값 V(s_T)가 주어지면 다음과 같이 계산합니다.
defcompute_advantages(rewards, values, gamma=0.99, lam=0.95, last_value=0.0):
advantages = [0.0] * len(rewards)
gae = 0.0for t inreversed(range(len(rewards))):
next_v = values[t + 1] if t + 1 < len(values) else last_value
delta = rewards[t] + gamma * next_v - values[t]
gae = delta + gamma * lam * gae
advantages[t] = gae
returns = [a + v for a, v inzip(advantages, values)]
return advantages, returns
returns는 크리틱의 학습 타깃(target)이고, advantages는 ∇ log π에 곱하는 값입니다.
Step 3: 결합 업데이트
for step_i, (x, a, _r, probs) inenumerate(traj):
adv = advantages[step_i]
target_v = returns[step_i]
# critic
critic_update(w, x, target_v, lr_v)
# actorfor i inrange(N_ACTIONS):
grad_logpi = (1.0if i == a else0.0) - probs[i]
for j inrange(N_FEAT):
theta[i][j] += lr_a * adv * grad_logpi * x[j]
온-폴리시(on-policy) 방식이고, 한 번의 업데이트에 하나의 롤아웃만 사용합니다. 액터와 크리틱에는 별도의 학습률(learning rate)을 둡니다.
Step 4: 병렬화 (A3C vs A2C)
A3C:N개의 스레드를 띄웁니다. 각 스레드는 자신의 환경과 순전파(forward pass)를 실행하고, 주기적으로 공유 마스터(shared master)에 그래디언트 업데이트를 푸시(push)합니다. 마스터에는 락(lock)을 걸지 않고, 경쟁 상태(race)가 일어나도 무방하며 잡음을 더 보태는 정도로 동작합니다.
A2C: 단일 프로세스(process)에서 N개의 환경 인스턴스(env instance)를 실행합니다. 관측값(observation)을 [N, obs_dim] 배치로 쌓아 일괄 순전파와 일괄 역전파(backward pass)를 수행합니다. GPU 활용률이 높고, 결정론적(deterministic)이며, 추론하기도 쉽습니다. 2026년 기준 기본 선택입니다.
여기서 다루는 토이 코드(toy code)는 명확성을 위해 단일 스레드(single-threaded)로 작성되어 있으며, 일괄 처리하는 A2C로 바꾸는 일은 numpy 세 줄이면 됩니다.
주의할 점
액터 그래디언트 이전의 크리틱 편향. 크리틱이 무작위 상태라면 그 베이스라인은 정보가 없고, 결국 순수한 잡음 위에서 학습하는 셈이 됩니다. 정책 그래디언트를 켜기 전에 크리틱을 수백 스텝 동안 워밍업(warm up)하거나, 액터 학습률을 느리게 두십시오.
어드밴티지 정규화(Advantage normalization). 배치마다 어드밴티지를 평균 0, 표준편차 1로 정규화(zero-mean/unit-std)합니다. 거의 무료에 가까운 비용으로 학습 안정성이 크게 좋아집니다.
공유 트렁크(Shared trunk). 이미지 입력에서는 액터와 크리틱이 공유 특징 추출기(shared feature extractor)를 사용하고, 헤드(head)만 분리합니다. 공유된 특징은 두 손실 모두로부터 학습 이득을 봅니다.
온-폴리시 계약(On-policy contract). A2C는 데이터를 정확히 한 번의 업데이트에만 재사용합니다. 그 이상 재사용하면 그래디언트에 편향이 생기는데, 이 부분을 보정하기 위해 PPO가 추가하는 것이 중요도 표본 추출 보정(importance-sampling correction)입니다.
엔트로피 붕괴(Entropy collapse).c_e > 0이 없으면 정책은 몇백 번의 업데이트 안에 거의 결정론적인 상태가 되어 탐험(exploration)을 멈춥니다.
보상 스케일(Reward scale). 어드밴티지의 크기는 보상의 스케일에 의존합니다. 과제 간 그래디언트 크기를 일관되게 유지하려면 이동 표준편차로 나누는(running-std dividing) 방식과 같은 보상 정규화(reward normalization)를 사용합니다.
사용해보기
A2C/A3C가 2026년 시점에서 최종 선택이 되는 경우는 드물지만, 이후의 모든 방법들이 다듬어 가는 기반 아키텍처(architecture)입니다.
방법
A2C와의 관계
PPO
A2C에 다중 에폭(multi-epoch) 업데이트를 위한 클리핑된 중요도 비율(clipped importance ratio)을 더한 것
IMPALA
A3C에 V-trace 오프-폴리시(off-policy) 보정을 더한 것
SAC (Phase 9 · 07)
소프트 가치 크리틱(soft-value critic)을 가진 오프-폴리시 A2C (다음 강의)
GRPO (Phase 9 · 12)
크리틱이 없는 A2C — 그룹 상대 어드밴티지(group-relative advantage)
DPO
샘플링이 없는, 선호 순위 손실(preference-ranking loss)로 접힌 형태의 A2C
AlphaStar / OpenAI Five
리그 학습(league training)과 모방 사전학습(imitation pre-training)을 얹은 A2C
2026년 논문에서 "어드밴티지(advantage)"라는 단어를 본다면 액터-크리틱을 떠올리면 됩니다.
산출물 만들기
outputs/skill-actor-critic-trainer.md로 저장합니다.
---
name: actor-critic-trainer
description: Produce an A2C / A3C / GAE configuration for a given environment, with advantage estimation and loss weights specified.
version: 1.0.0
phase: 9
lesson: 7
tags: [rl, actor-critic, gae]
---
Given an environment and compute budget, output:
1. Parallelism. A2C (GPU batched) vs A3C (CPU async) and the number of workers.
2. Rollout length T. Steps per env per update.
3. Advantage estimator. n-step or GAE(λ); specify λ.
4. Loss weights. `c_v` (value), `c_e` (entropy), gradient clip.
5. Learning rates. Actor and critic (separate if using).
Refuse single-worker A2C on environments with horizon > 1000 (too on-policy, too slow). Refuse to ship without advantage normalization. Flag any run with `c_e = 0` and observed entropy < 0.1 as entropy-collapsed.
연습문제
쉬움. 4×4 GridWorld에서 MC 어드밴티지(G_t - V(s_t))로 액터-크리틱을 학습합니다. Lesson 06의 이동 평균 베이스라인을 가진 REINFORCE(REINFORCE-with-running-mean-baseline)와 표본 효율(sample efficiency)을 비교합니다.
Produce an A2C / A3C / GAE configuration for a given environment, with advantage estimation and loss weights specified.
Skill
확인 문제
3문제 · 모두 맞추면 완료 표시가 가능합니다
1.액터-크리틱 에이전트를 학습시키는데, 초기 학습 동안 크리틱이 무작위 값을 출력하여 액터가 잘 학습되지 않습니다. 권장되는 해결책은 무엇인가요?
2.GAE(lambda)는 어드밴티지를 A_t = sum_{l=0}^inf (gamma*lambda)^l * delta_{t+l}로 계산합니다. lambda=0은 순수 TD, lambda=1은 순수 MC입니다. MuJoCo 연속 제어 과제에서 기본값은 lambda=0.95입니다. lambda=0으로 설정하면 어떻게 되나요?
3.A2C는 N개의 병렬 환경에서 데이터를 동기적으로 수집합니다. 이 병렬화가 온 정책(on-policy) 방법에 왜 중요하며, 2026년에 GPU에서 A3C보다 A2C가 선호되는 이유는 무엇인가요?