← all posts
AI 2026.05.03 · 12 min read Advanced

Actor-Critic은 어떻게 진화했는가

Basic AC의 two-timescale 수렴부터 A3C의 비동기 병렬화, A2C의 동기 배치, PPO의 clipped surrogate, IMPALA의 V-trace 오프-폴리시 보정까지, 하나의 설계 철학이 어떻게 확장되는지 추적한다.


Actor-Critic 계열 알고리즘의 역사는 하나의 반복되는 질문으로 요약된다: 어떻게 하면 같은 경험에서 더 많이 배울 수 있는가? REINFORCE는 Monte Carlo return의 분산 때문에 느리게 배운다. Basic AC는 TD bootstrapping으로 분산을 낮추지만 bias를 도입한다. A3C는 비동기 병렬화로 throughput을 높이고, A2C는 동기 배치로 재현성을 회복하며, PPO는 importance sampling으로 같은 데이터를 여러 번 쓰고, IMPALA는 V-trace로 진정한 오프-폴리시 분산 학습을 가능하게 한다. 이 다섯 단계는 독립적인 알고리즘이 아니라 하나의 설계 문제에 대한 연속적인 응답이다. 그 응답들이 어떤 공통 구조를 공유하는가?

출발점: bias-variance 트레이드오프의 구조화

REINFORCE의 policy gradient는 다음 분산을 갖는다.

Var[logπ(as)Gt]=E[(logπ)2Gt2]E[logπGt]2\mathrm{Var}[\nabla \log \pi(a \mid s) \cdot G_t] = \mathbb{E}[(\nabla \log \pi)^2 G_t^2] - \mathbb{E}[\nabla \log \pi \cdot G_t]^2

GtG_t가 에피소드 전체의 discounted return이므로 분산이 크다. Actor-Critic의 핵심 아이디어는 이 GtG_t 자리에 TD residual을 넣는 것이다.

A^t=δtV=rt+γVϕ(st+1)Vϕ(st)\hat{A}_t = \delta_t^V = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)

분산은 줄어들지만 VϕVπV_\phi \neq V^\pi인 동안 bias가 생긴다. 이 교환이 수렴해야 의미가 있는데, 그 보증이 two-timescale 조건이다. Critic 학습률 αc\alpha_c가 Actor 학습률 α\alpha보다 크면, Critic은 Actor가 거의 정지한 것처럼 보이는 빠른 시간축에서 수렴하고, Actor는 이미 수렴한 Critic의 advantage를 신뢰할 수 있다.

정리 1 · Two-Timescale Convergence (Konda & Tsitsiklis, 2000)

αc>α\alpha_c > \alpha이고 적절한 감소 조건 하에서, Actor-Critic 알고리즘의 파라미터는 거의 확실하게 수렴한다.

θtθ,ϕtϕ\theta_t \to \theta^*, \quad \phi_t \to \phi^*

여기서 θ\theta^*J(θ)J(\theta)의 local optimum이다.

▷ 증명

(스케치) Critic이 빠른 시간축(t=O(1/αc)t = O(1/\alpha_c))에서 VϕVπV_\phi \to V^\pi로 수렴하면, Actor의 관점에서 Critic은 quasi-static이다. Critic이 고정된 상태에서 Actor는 standard policy gradient로 local optimum에 수렴한다. Critic의 잔여 오차를 perturbation으로 처리하면 전체 시스템이 안정적임을 보일 수 있다. \square

병렬화: 비동기와 동기 사이의 선택

Basic AC가 단일 스트림이라면, A3C는 여러 Worker가 동시에 다른 환경을 탐험한다. 핵심은 Hogwild! 스타일 lock-free 업데이트다.

# 각 Worker는 global θ에 lock 없이 gradient를 누적한다
while True:
    τ = sample_trajectory(env_i, π_θ)
    g_i = compute_gradient(τ)
    θ += α * g_i  # Concurrent write, no synchronization

일부 업데이트가 “잃어버려지지만” 이 손실은 stochastic gradient noise의 범위 안에 있어서 수렴을 방해하지 않는다 (Recht et al. 2011). 더 중요한 효과는 sample diversity다. 16개 Worker가 서로 다른 환경 seed에서 수집한 trajectory들은 자기상관이 낮아, replay buffer 없이도 DQN 수준의 sample decorrelation을 달성한다.

A3C vs A2C의 실질적 차이

Wu et al. (2017)은 비동기성이 본질이 아님을 보였다. 충분한 수의 동기 Worker로도 같은 sample diversity가 달성되고, 동기화 barrier 하나만 추가하면 stale gradient 문제가 사라진다. A2C의 등장 이후 Stable-Baselines3 같은 주요 라이브러리가 A2C를 표준으로 채택한 이유는 성능이 아니라 재현성과 GPU 효율이다.

특성A3CA2C
Stale gradient있음없음
재현성
GPU batch 효율낮음높음
구현 복잡도높음낮음

Sample Efficiency: PPO의 Clipped Surrogate

A2C는 수집한 trajectory를 한 번 쓰고 버린다. PPO의 핵심 질문은 “왜 한 번만 쓰는가?”다.

같은 배치를 여러 epoch 재사용하려면 현재 policy πθ\pi_\theta가 데이터를 수집한 πθold\pi_{\theta_\text{old}}와 달라지는 문제를 해결해야 한다. Importance ratio rt(θ)=πθ(atst)/πθold(atst)r_t(\theta) = \pi_\theta(a_t \mid s_t) / \pi_{\theta_\text{old}}(a_t \mid s_t)로 보정할 수 있지만, ratio가 너무 커지면 gradient가 폭발한다.

PPO의 clipped surrogate loss는 이 ratio를 (1-ε, 1+ε) 범위로 제한한다.

LCLIP(θ)=Et[min ⁣(rt(θ)A^t,  clip(rt(θ),1ϵ,1+ϵ)A^t)]L^{\mathrm{CLIP}}(\theta) = \mathbb{E}_t \left[\min\!\left(r_t(\theta)\,\hat{A}_t,\; \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\,\hat{A}_t\right)\right]

min을 취하는 이유는 보수적 업데이트를 강제하기 위해서다. A^t>0\hat{A}_t > 0일 때 ratio가 1+ϵ1+\epsilon을 넘으면 clipped version이 작아지므로 min이 clipped를 선택한다. 이 구조가 TRPO의 KL constraint를 단순한 clipping으로 근사하면서도 비슷한 안정성을 달성한다. GAE의 λ\lambda 파라미터와 결합하면 bias-variance 트레이드오프까지 제어할 수 있어, PPO는 현재까지 가장 널리 쓰이는 on-policy 알고리즘으로 남아 있다.

규모 확장: IMPALA와 V-trace

PPO도 한계가 있다. On-policy 특성상 데이터를 수집한 policy가 빠르게 교체되면 replay가 불가능하고, Worker 수를 100개 이상으로 늘리면 중앙 파라미터 서버의 lock contention이 병목이 된다.

IMPALA (Espeholt et al. 2018)는 Learner와 Actor를 물리적으로 분리한다. CPU Actor들은 경험을 수집해 버퍼에 쌓고, GPU Learner는 배치를 가져와 학습한다. Actor의 policy가 Learner보다 항상 뒤처진다는 off-policy lag가 생기는데, 이를 V-trace로 보정한다.

Vtrace(st)=V(st)+l=0γlclip(ρl,0,ρˉ)ρˉlδt+lV_{\text{trace}}(s_t) = V(s_t) + \sum_{l=0}^{\infty} \gamma^l \underbrace{\mathrm{clip}(\rho_l, 0, \bar{\rho})}_{\bar{\rho}_l} \cdot \delta_{t+l}

여기서 ρl=πnew(alsl)/πold(alsl)\rho_l = \pi_\text{new}(a_l|s_l) / \pi_\text{old}(a_l|s_l)이다. Truncation threshold ρˉ\bar{\rho}는 rare action에서 ratio가 폭발하는 것을 막아 분산을 제어한다.

트레이드오프: V-trace의 bias-variance 선택

ρˉ=1\bar{\rho} = 1로 설정하면 분산은 최소화되지만 rare action에서 작은 bias가 남는다. ρˉ\bar{\rho} \to \infty는 unbiased이지만 분산이 폭발한다. 실전에서는 ρˉ=1.0\bar{\rho} = 1.0이 대부분의 환경에서 충분하다. PPO의 clipping이 policy loss에서만 작동하는 반면, V-trace는 value function 추정 자체를 오프-폴리시 보정한다는 점이 구조적 차이다.

정리

  • Basic AC는 TD bootstrapping으로 분산을 낮추지만 two-timescale 조건(αc>α\alpha_c > \alpha)이 있어야 수렴이 보장된다.
  • A3C의 비동기 병렬화는 sample diversity를 달성하지만 stale gradient를 도입하고 재현성을 깨뜨린다. A2C는 동기 barrier 하나로 같은 효과를 얻으면서 이 문제를 해결한다.
  • PPO의 clipped surrogate loss는 같은 배치를 여러 epoch 재사용할 수 있게 해, on-policy 알고리즘 중 가장 높은 sample efficiency를 달성한다.
  • IMPALA의 V-trace는 off-policy lag를 n-step return 수준에서 보정해, 100개 이상의 Actor를 GPU Learner 하나로 공급하는 분산 아키텍처를 가능하게 한다.

다섯 알고리즘을 관통하는 공통 구조는 “advantage 추정의 bias-variance 교환을 어느 축에서 제어하는가”다. 다음 시리즈에서는 이 교환을 기하학적으로 해석하는 Natural Policy Gradient로 넘어간다.