검색
← 모듈 로드맵

비동기 딥 강화학습 (A3C)

논문 · 전문가 · Volodymyr Mnih 외 7명 · 2016 · arXiv

원제 · Asynchronous Methods for Deep Reinforcement Learning

경험 재생 대신 병렬 스레드로 상관을 끊은 비동기 액터-크리틱, CPU만으로 아타리 최고 기록

먼저 알아야 할 것

Q-러닝DQN과 경험 재생정책 경사(REINFORCE)가치 함수엔트로피

다루는 내용

A3C 논문은 경험 재생 메모리 대신 여러 액터-러너를 CPU 스레드에서 비동기로 돌려 데이터 상관을 줄이고, 이 틀 위에 1단계 Sarsa · 1단계 Q-러닝 · n단계 Q-러닝 · 어드밴티지 액터-크리틱을 얹었습니다. A3C는 n단계 수익으로 어드밴티지를 추정해 정책 기울기를 곱하고, 엔트로피 정규화로 탐색을 유지합니다. CPU 16코어 4일 학습으로 아타리 57게임 평균 사람 대비 점수 496.8%(LSTM 623.0%)를 기록했고 TORCS · MuJoCo · 3D 미로에서도 성공했습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

이 논문은 비동기 경사 하강법으로 심층 신경망 제어기를 최적화하는, 개념적으로 단순하고 가벼운 딥 강화학습 틀을 제안합니다. 표준 강화학습 알고리즘 네 가지의 비동기 변형을 제시하고, 병렬로 도는 액터-러너(actor-learner)들이 학습을 안정시키는 효과가 있어 네 방법 모두 신경망 제어기를 성공적으로 학습할 수 있음을 보입니다. 가장 성능이 좋은 방법인 액터-크리틱의 비동기 변형은 GPU 대신 멀티코어 CPU 하나로, 절반의 학습 시간만에 아타리 분야의 기존 최고 성능을 넘어섭니다. 또한 비동기 액터-크리틱이 다양한 연속 운동 제어 문제와, 시각 입력만으로 무작위 3D 미로를 탐색하는 새로운 과제에서도 성공함을 보입니다.

해설

비동기 딥 강화학습 (A3C)

경험 재생 메모리 대신 여러 에이전트를 CPU 스레드에서 동시에 돌려 데이터의 상관을 끊은 논문입니다. 그중 '비동기 어드밴티지 액터-크리틱(A3C)'은 GPU 없이 CPU 16코어로 아타리 최고 기록을 넘었고, 이후 정책 기반 딥 강화학습의 기본형이 됐습니다.

항목내용
원제Asynchronous Methods for Deep Reinforcement Learning
저자Volodymyr Mnih 외 7명 (Google DeepMind · 몬트리올대)
발표2016 · ICML · arXiv 1602.01783
트랙 · 수준강화학습 · 심화
먼저 알면 좋은 것Q-러닝, DQN(경험 재생 · 타깃 네트워크), 정책 경사(REINFORCE), 가치 함수, 엔트로피

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • 왜 DQN은 경험 재생(experience replay)이 꼭 필요했고, 그것이 어떤 제약을 낳았는지 압니다.
  • "여러 에이전트를 동시에 돌리면 데이터가 자연스럽게 섞인다"는 A3C의 핵심 발상을 이해합니다.
  • 어드밴티지(advantage) · nn단계 수익 · 엔트로피 정규화가 각각 왜 들어갔는지 수식과 손계산으로 확인합니다.
  • 아타리 57게임 · TORCS · MuJoCo · Labyrinth에서 무엇을 보였는지, 스레드 수에 따른 속도 향상이 어땠는지 압니다.

초록 (번역)

이 논문은 비동기 경사 하강법으로 심층 신경망 제어기를 최적화하는, 개념적으로 단순하고 가벼운 딥 강화학습 틀을 제안합니다. 표준 강화학습 알고리즘 네 가지의 비동기 변형을 제시하고, 병렬로 도는 액터-러너(actor-learner)들이 학습을 안정시키는 효과가 있어 네 방법 모두 신경망 제어기를 성공적으로 학습할 수 있음을 보입니다. 가장 성능이 좋은 방법인 액터-크리틱의 비동기 변형은 GPU 대신 멀티코어 CPU 하나로, 절반의 학습 시간만에 아타리 분야의 기존 최고 성능을 넘어섭니다. 또한 비동기 액터-크리틱이 다양한 연속 운동 제어 문제와, 시각 입력만으로 무작위 3D 미로를 탐색하는 새로운 과제에서도 성공함을 보입니다.

무엇을 풀었나

딥러닝과 단순한 온라인 강화학습을 그냥 합치면 학습이 불안정하다고 여겨졌습니다. 이유는 두 가지입니다. 에이전트가 연속으로 겪는 데이터는 서로 강하게 상관되어 있고, 정책이 바뀌면서 데이터 분포도 계속 바뀝니다(비정상성). 같은 방 안의 비슷한 장면만 수천 번 연달아 보고 학습하면 신경망이 그 장면에만 맞춰져 버립니다.

DQN은 이것을 경험 재생으로 풀었습니다. 지난 경험을 메모리에 쌓아 두고 무작위로 뽑아 학습하면 상관이 끊깁니다. 하지만 논문은 두 가지 대가를 지적합니다.

  1. 실제 상호작용 한 번당 메모리 · 계산이 더 듭니다.
  2. 옛 정책이 만든 데이터로 학습해야 하므로 오프폴리시(off-policy) 알고리즘(Q-러닝 등)만 쓸 수 있습니다. Sarsa나 액터-크리틱 같은 온폴리시(on-policy) 방법은 쓰기 어렵습니다.

또 기존 방법은 GPU나 Gorila처럼 대규모 분산 구조(100개 액터-러너 프로세스와 30개 파라미터 서버, 총 130대)에 기댔습니다. 이 논문의 질문은 "메모리 없이, 한 대의 CPU로 안정적으로 학습할 수는 없을까?"였습니다.

핵심 아이디어

mermaid
flowchart LR
  G[(공유 파라미터 θ, θv)] -->|복사| W1[스레드 1: 환경 사본]
  G -->|복사| W2[스레드 2: 환경 사본]
  G -->|복사| W3[스레드 16: 환경 사본]
  W1 -->|t_max 걸음 굴린 뒤 기울기| G
  W2 -->|기울기| G
  W3 -->|기울기| G

1. 비동기 병렬 액터-러너

직관: 한 사람이 한 동네만 돌며 지도를 그리면 그 동네에 치우치지만, 16명이 서로 다른 동네를 돌며 한 지도에 동시에 그려 넣으면 지도가 고르게 채워집니다(해설용 비유).

단계:

  1. 공유 파라미터를 하나 둡니다.
  2. CPU 스레드마다 환경 사본을 하나씩 주고, 각자 공유 파라미터를 복사해 몇 걸음 행동합니다.
  3. 그동안 쌓은 기울기를 공유 파라미터에 잠금 없이(Hogwild! 방식) 바로 반영합니다.
  4. 스레드마다 탐색 정도(예: ϵ\epsilon-greedy의 ϵ\epsilon)를 다르게 줍니다.

왜 이렇게 했나: 어느 순간이든 스레드들은 서로 다른 상태를 겪고 있으므로, 한 번의 업데이트에 섞여 들어가는 데이터가 자연스럽게 다양해집니다. 경험 재생이 하던 '상관 끊기'를 병렬성이 대신하니 메모리가 필요 없고, 그래서 온폴리시 방법도 쓸 수 있습니다. 여러 기계 대신 한 기계의 여러 스레드를 쓰면 기울기 · 파라미터를 네트워크로 주고받는 통신 비용도 사라집니다.

논문은 이 틀에 네 알고리즘을 얹었습니다: 1단계 Sarsa, 1단계 Q-러닝, nn단계 Q-러닝, 어드밴티지 액터-크리틱(A3C).

2. 1단계 Q-러닝의 손실과 그 한계

값 기반 방법은 Q(s,a;θ)Q(s,a;\theta)를 다음 손실로 학습합니다.

Li(θi)=E[(r+γmax⁡a′Q(s′,a′;θi−1)−Q(s,a;θi))2]L_i(\theta_i) = \mathbb{E}\Big[\big(r + \gamma \max_{a'} Q(s', a'; \theta_{i-1}) - Q(s, a; \theta_i)\big)^2\Big]
기호뜻
rr이번 걸음에 받은 보상
γ\gamma할인율
s′s'다음 상태
θi−1\theta_{i-1}목표값 계산에 쓰는 (조금 옛) 파라미터 — 타깃 네트워크

한계: 보상 rr은 그 보상을 낳은 (s,a)(s,a) 한 쌍의 값만 직접 바꿉니다. 그 앞의 상태들까지 보상이 전해지려면 업데이트를 여러 번 거쳐야 해서 느립니다. 그래서 논문은 nn단계 수익을 씁니다. rt+γrt+1+⋯+γn−1rt+n−1+γnmax⁡aQ(st+n,a)r_t + \gamma r_{t+1} + \dots + \gamma^{n-1} r_{t+n-1} + \gamma^n \max_a Q(s_{t+n}, a) 처럼 여러 걸음의 실제 보상을 한꺼번에 반영하면, 보상 하나가 앞쪽 nn개 상태에 바로 전해집니다.

3. 어드밴티지 액터-크리틱 (A3C)

직관: 배우(액터)는 연기를 하고, 평론가(크리틱)는 "그 장면이 평소보다 나았나 못했나"를 알려 줍니다. 배우는 평소보다 나았던 연기를 더 하게 됩니다(해설용 비유).

단계:

  1. 하나의 신경망이 두 출력을 냅니다: 정책 π(at∣st;θ)\pi(a_t \mid s_t; \theta)(소프트맥스)와 가치 V(st;θv)V(s_t; \theta_v)(선형 출력). 출력층 말고는 층을 공유합니다.
  2. 각 스레드는 최대 tmax⁡t_{\max}걸음(또는 종료까지) 행동합니다.
  3. 걸음마다 nn단계 수익으로 어드밴티지를 추정합니다.
  4. 정책은 어드밴티지가 큰 행동 쪽으로, 가치는 수익에 가까워지도록 고칩니다.

정책 업데이트 방향은 다음과 같습니다.

∇θ′log⁡π(at∣st;θ′) A(st,at;θ,θv)\nabla_{\theta'} \log \pi(a_t \mid s_t; \theta')\, A(s_t, a_t; \theta, \theta_v)
A(st,at;θ,θv)=∑i=0k−1γirt+i+γkV(st+k;θv)−V(st;θv)A(s_t, a_t; \theta, \theta_v) = \sum_{i=0}^{k-1} \gamma^i r_{t+i} + \gamma^k V(s_{t+k}; \theta_v) - V(s_t; \theta_v)
기호뜻
log⁡π(at∣st)\log \pi(a_t \mid s_t)실제로 한 행동의 로그 확률. 이것의 기울기를 따라가면 그 행동의 확률이 올라갑니다
AA어드밴티지 — "이 행동이 그 상태의 평균보다 얼마나 나았나"
kk몇 걸음 뒤까지 실제 보상을 쓸지. 상태마다 다르며 tmax⁡t_{\max} 이하
V(st+k)V(s_{t+k})kk걸음 뒤 상태의 가치 추정(남은 미래를 이것으로 메웁니다)

왜 어드밴티지인가: REINFORCE는 수익 RtR_t를 그대로 곱하는데, 이 값은 분산이 커서 학습이 흔들립니다. 수익에서 상태의 기준값(baseline) V(st)V(s_t)를 빼면 기울기의 기댓값은 그대로이면서 분산이 크게 줄어듭니다. RtR_t는 Q(st,at)Q(s_t, a_t)의 추정, V(st)V(s_t)는 그 상태 평균의 추정이므로 둘의 차이가 바로 어드밴티지 Q−VQ - V의 추정입니다.

숫자로 해 보기(해설용 예): γ=0.9\gamma = 0.9, k=2k = 2, 받은 보상 rt=1r_t = 1, rt+1=0r_{t+1} = 0, V(st+2)=5V(s_{t+2}) = 5, V(st)=4V(s_t) = 4라 하면

A=1+0.9×0+0.92×5−4=1+4.05−4=1.05A = 1 + 0.9 \times 0 + 0.9^2 \times 5 - 4 = 1 + 4.05 - 4 = 1.05

양수이므로 이번에 한 행동의 확률을 올립니다. 만약 V(st)V(s_t)가 6이었다면 A=−0.95A = -0.95가 되어 확률을 내립니다. 같은 보상이라도 "기대보다 좋았나"로 판단한다는 점이 핵심입니다.

4. 엔트로피 정규화

직관: 너무 일찍 "이 길만 정답"이라고 굳어 버리지 않도록, 선택지를 고르게 남겨 두는 쪽에 작은 상을 줍니다.

∇θ′log⁡π(at∣st;θ′) (Rt−V(st;θv))+β ∇θ′H(π(st;θ′))\nabla_{\theta'} \log \pi(a_t \mid s_t; \theta')\,\big(R_t - V(s_t; \theta_v)\big) + \beta\, \nabla_{\theta'} H\big(\pi(s_t; \theta')\big)
  • HH: 정책의 엔트로피(행동 확률이 고를수록 큼)
  • β\beta: 엔트로피 항의 세기. 논문의 아타리 · TORCS 실험은 β=0.01\beta = 0.01을 썼습니다.

숫자로 해 보기(해설용 예): 행동이 2개일 때 확률이 (0.5,0.5)(0.5, 0.5)면 H=−2×0.5ln⁡0.5≈0.69H = -2 \times 0.5 \ln 0.5 \approx 0.69, (0.99,0.01)(0.99, 0.01)이면 H≈0.056H \approx 0.056입니다. 엔트로피 항은 정책이 한쪽으로 쏠리기 직전에 브레이크를 걸어 탐색을 유지합니다.

왜 이렇게 했나: 결정론적 정책으로 너무 빨리 수렴하면 더 좋은 길을 영영 못 찾습니다. 논문은 이 항을 넣자 탐색이 좋아졌다고 보고합니다.

5. 공유 RMSProp

비동기 환경에서 RMSProp의 '기울기 제곱 이동 평균' gg를 스레드마다 따로 둘지, 모두 공유할지 비교했습니다.

g=αg+(1−α) Δθ2,θ←θ−ηΔθg+ϵg = \alpha g + (1 - \alpha)\,\Delta\theta^2, \qquad \theta \leftarrow \theta - \eta \frac{\Delta\theta}{\sqrt{g + \epsilon}}
  • α\alpha: 감쇠율(논문은 0.99), η\eta: 학습률, 연산은 원소별
  • 아타리 일부 게임에서 gg를 스레드끼리 공유하는 쪽이 모멘텀 SGD나 스레드별 RMSProp보다 학습률 · 초기화에 훨씬 덜 민감했습니다. 파라미터 사본도 하나 줄어 메모리도 아낍니다.

6. 실험 설정 (논문 기준)

  • 액터-러너 스레드 16개, GPU 없음. 모든 방법이 5걸음마다 업데이트(tmax⁡=5t_{\max} = 5).
  • 할인율 γ=0.99\gamma = 0.99, RMSProp 감쇠 0.99. 값 기반 방법의 타깃 네트워크는 40,000프레임마다 갱신.
  • 신경망: 8×8 필터 16개(보폭 4) 합성곱 → 4×4 필터 32개(보폭 2) 합성곱 → 은닉 256 완전연결.
  • 값 기반 방법은 스레드마다 최종 ϵ\epsilon을 0.1 · 0.01 · 0.5 중 하나(확률 0.4 · 0.3 · 0.3)로 뽑아, 처음 400만 프레임 동안 1에서 줄였습니다.
  • 학습률은 LogUniform(10−4,10−2)\text{LogUniform}(10^{-4}, 10^{-2})에서 뽑아 학습 동안 0까지 줄였습니다(기존 연구와 비교할 때는 고정 하이퍼파라미터).

결과

아타리 57게임 (사람 시작 평가, 사람 대비 정규화 점수)

방법학습 시간평균중앙값
DQNGPU 8일121.9%47.5%
Gorila100대 4일215.2%71.3%
Double DQNGPU 8일332.9%110.9%
Dueling Double DQNGPU 8일343.8%117.1%
Prioritized DQNGPU 8일463.6%127.6%
A3C 피드포워드CPU 1일344.1%68.2%
A3C 피드포워드CPU 4일496.8%116.6%
A3C LSTMCPU 4일623.0%112.6%
  • A3C는 CPU 16코어로 4일 학습해, GPU로 8~10일 학습한 기존 방법들보다 평균 점수가 높았습니다. 하루만 학습해도 Dueling Double DQN의 평균 점수에 맞먹었습니다.
  • 다섯 게임 학습 속도 비교에서 비동기 방법들은 대체로 GPU의 DQN보다 빨리 배웠고, 그중 A3C가 값 기반 세 방법을 크게 앞섰습니다.

스레드 수에 따른 학습 속도 향상 (일곱 게임 평균, 1스레드 대비)

방법24816
1단계 Q3.06.313.324.1
1단계 Sarsa2.85.913.122.1
nn단계 Q2.75.910.717.2
A3C2.13.76.912.5

16스레드에서 모든 방법이 적어도 10배 넘게 빨라졌습니다. 1단계 방법들은 스레드 수보다 더 빨라지는 '초선형' 향상을 보였는데, 저자들은 여러 스레드가 1단계 방법의 편향을 줄여 데이터를 덜 쓰게 된 덕으로 봅니다.

그 밖의 과제

  • TORCS 3D 자동차 경주: 화면 입력만으로, A3C가 네 가지 설정 모두에서 약 12시간 학습으로 사람 시험자 점수의 대략 75~90%에 이르렀습니다.
  • MuJoCo 연속 제어: 값 기반 방법은 연속 행동으로 확장이 어려워 A3C만 평가했고, 물리 상태나 픽셀 입력 모두에서 24시간 안에, 보통 몇 시간 안에 좋은 해를 찾았습니다.
  • Labyrinth 3D 미로: 매 에피소드 새 미로에서 사과(보상 1) · 포털(보상 10)을 찾는 과제입니다. 84×84 RGB 이미지만 입력으로 받는 A3C LSTM이 평균 점수 약 50을 얻었습니다.
  • 안정성: 다섯 게임에서 학습률 · 초기화 50가지씩 돌려 보니 좋은 학습률 구간에서는 점수 0으로 무너지는 경우가 거의 없었습니다.

왜 중요한가 · 이후 영향

  • 경험 재생 없이도 딥 강화학습이 안정적으로 될 수 있음을 보였습니다. 그 덕에 온폴리시 액터-크리틱이 딥러닝과 본격적으로 결합됐습니다.
  • 액터-크리틱 + 어드밴티지 + 엔트로피 보너스라는 조합은 이후 정책 기반 방법의 기본 틀이 됐습니다. TRPO · GAE · PPO도 같은 '어드밴티지로 정책 기울기를 곱한다'는 구조 위에 있습니다.
  • 값 출력과 정책 출력을 한 신경망에서 공유하는 설계는 PPO 구현과 LLM의 RLHF(정책 + 가치 헤드)에서도 흔히 보입니다.
  • 비싼 GPU · 대규모 분산 없이도 연구할 수 있게 해 강화학습 연구의 문턱을 낮췄습니다.

한계 · 주의할 점

  • 저자들도 경험 재생이 쓸모없다는 뜻은 아니라고 밝힙니다. 데이터를 다시 쓰지 않으므로 환경과의 상호작용이 비싼 분야(예: TORCS)에서는 데이터 효율이 떨어질 수 있습니다.
  • 비동기 업데이트는 스레드가 조금 옛 파라미터로 계산한 기울기를 반영하므로, 실행할 때마다 결과가 달라지고 재현이 까다롭습니다.
  • A3C의 속도 향상(16스레드에서 12.5배)은 1단계 방법보다 작았습니다. 스레드를 늘리는 이득이 방법마다 다릅니다.
  • MuJoCo 결과는 물리 엔진의 접촉 모델이 바뀌어 기존 연구(DDPG 등)와 점수를 직접 비교할 수 없다고 논문이 밝힙니다.

이어서 읽을 것

용어 정리

용어쉬운 뜻
경험 재생(experience replay)지난 경험을 메모리에 쌓아 두고 무작위로 다시 뽑아 학습하는 방법
온폴리시 / 오프폴리시지금 정책이 만든 데이터로만 배우는가 / 다른(옛) 정책의 데이터로도 배우는가
액터-크리틱(actor-critic)행동을 고르는 정책(액터)과 그 행동을 평가하는 가치 함수(크리틱)를 함께 학습
어드밴티지(advantage)어떤 행동이 그 상태의 평균적 가치보다 얼마나 나은지
기준값(baseline)정책 기울기의 분산을 줄이려고 수익에서 빼는 값
nn단계 수익nn걸음의 실제 보상 합 + 그 뒤 상태의 가치 추정
엔트로피(entropy)확률 분포가 얼마나 고르게 퍼져 있는지
Hogwild!여러 스레드가 잠금 없이 같은 파라미터를 동시에 고치는 방식

스스로 점검

  1. A3C가 경험 재생 없이도 안정적인 이유는? — 여러 스레드가 서로 다른 상태를 동시에 겪으므로, 공유 파라미터에 들어가는 업데이트가 자연스럽게 섞여 상관이 줄어듭니다.
  2. 정책 기울기에 수익 대신 어드밴티지를 곱하면 무엇이 좋은가? — 기울기의 기댓값은 유지하면서 분산이 줄어 학습이 덜 흔들립니다. "좋았나"를 절대값이 아니라 "기대보다 나았나"로 판단합니다.
  3. 엔트로피 항의 β\beta를 너무 크게 하면? — 정책이 계속 고르게 퍼져 있으려 해서 좋은 행동에 집중하지 못합니다. 논문은 아타리 · TORCS에서 0.01을 썼습니다.

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

AI 원리부터 이해하기 · 강화학습 모듈

강화학습 모듈 학습

이 글은 강화학습 모듈의 학습 자료입니다. 전체 31개 자료 중 16번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

arXiv (논문별 상이)

arXiv 1602.01783