[강화학습] A3C, A2C, ACER 알고리즘 핵심 정리 및 구현

2026. 3. 14. 11:13·개념 정리 step2/강화 학습

강화학습에서 Actor-Critic 구조는 에이전트가 행동을 결정하는 정책(Actor)과 상태의 가치를 평가하는 함수(Critic)를 함께 학습하는 강력한 방법입니다. 이번 글에서는 이 구조를 발전시킨 세 가지 핵심 알고리즘인 A3C, A2C, ACER의 개념과 구현 코드를 정리해 보겠습니다.

1. A3C (Asynchronous Advantage Actor-Critic)

A3C는 여러 개의 에이전트(Worker)가 독립적인 환경에서 동시에 경험을 수집하고, 그 결과를 전역 신경망(Global Network)에 비동기적(Asynchronous)으로 업데이트하는 알고리즘입니다.

논문: Asynchronous Methods for Deep Reinforcement Learning

 

Asynchronous Methods for Deep Reinforcement Learning

We propose a conceptually simple and lightweight framework for deep reinforcement learning that uses asynchronous gradient descent for optimization of deep neural network controllers. We present asynchronous variants of four standard reinforcement learning

arxiv.org

1.1 Advantage의 개념

Advantage는 현재 한 행동이 예상했던 것보다 얼마나 더 좋았는지를 나타냅니다.

  • Target (실제 얻은 가치): $r + \gamma V(s')$
  • Advantage 계산: Target $- V(s)$

Actor는 이 Advantage 값을 사용하여 예측보다 좋았던 행동의 확률은 높이고, 나빴던 행동의 확률은 낮추는 방향으로 학습합니다.

1.2 A3C가 해결한 기존의 문제점

초기 DQN 등의 강화학습은 한 환경에서만 학습하여 데이터 간 상관성이 높고 경험 수집 속도가 느리다는 단점이 있었습니다. A3C는 멀티프로세싱을 통해 여러 Worker가 각기 다른 환경을 탐험하게 함으로써 데이터 수집 속도를 높이고, 다양한 경험을 섞어 학습의 안정성을 크게 개선했습니다.

1.3 A3C의 학습 흐름

  1. 각 Worker가 전역 모델(Global Model)의 가중치를 자신의 지역 모델(Local Model)로 복사합니다.
  2. 각자의 환경에서 일정 스텝 동안 데이터를 수집합니다.
  3. 수집한 데이터로 Actor Loss와 Critic Loss를 계산합니다.
    • Actor Loss: $-\log(\pi(a|s)) \times \text{Advantage}$
    • Critic Loss: $(V(s) - \text{Target})^2$
  4. 계산된 Gradient를 이용해 Global Network를 비동기적으로 업데이트합니다.

1.4 A3C PyTorch 구현 흐름

Python의 torch.multiprocessing을 사용하여 여러 프로세스를 띄우고 전역 모델을 공유 메모리에 올려 학습을 진행합니다.

import gymnasium as gym
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.distributions import Categorical
import torch.multiprocessing as mp
import time

# ... (기존 A3C ActorCritic 클래스 및 하이퍼파라미터 설정 동일) ...

def train(global_model, rank):
    local_model = ActorCritic()
    local_model.load_state_dict(global_model.state_dict())
    optimizer = optim.Adam(global_model.parameters(), lr=0.0002)
    env = gym.make("CartPole-v1")

    # [핵심] n_step 진행 후 Advantage 계산 및 비동기 업데이트 로직
    # 로컬 모델로 loss를 구한 뒤, 그 gradient를 global_model에 덮어씌우고 optimizer.step() 호출
    
# ... (나머지 훈련 루프 및 테스트 함수 동일) ...

if __name__ == "__main__":
    mp.set_start_method("spawn", force=True)
    global_model = ActorCritic()
    global_model.share_memory() # 프로세스 간 모델 공유 설정

    processes = []
    for rank in range(4): # 3개의 학습, 1개의 테스트 프로세스
        if rank == 0:
            p = mp.Process(target=test, args=(global_model,))
        else:
            p = mp.Process(target=train, args=(global_model, rank))
        p.start()
        processes.append(p)
    
    for p in processes:
        p.join()

2. A2C (Advantage Actor-Critic)

A2C는 A3C의 동기식(Synchronous) 버전입니다. 여러 Worker가 환경을 병렬로 탐험하는 것은 같지만, 업데이트를 각자 하지 않고 일정 스텝마다 모든 데이터를 모아 한 번에(Batch) 전역 모델을 업데이트합니다.

2.1 왜 A2C를 사용하는가? (A3C의 한계)

  • Gradient 충돌: A3C는 비동기 방식이라 한 Worker가 업데이트하는 도중 다른 Worker가 덮어씌우는 문제(Interference)가 발생할 수 있습니다.
  • GPU 활용의 어려움: 비동기 멀티프로세싱 기반이라 데이터를 Batch 단위로 묶기 어려워 GPU 가속을 온전히 활용하기 힘듭니다.

2.2 A2C의 장점

A2C는 데이터를 모두 모아 한 번에 업데이트하므로 충돌이 없어 학습이 안정적이고 재현성이 높습니다. 또한 데이터를 모아 Batch 연산을 수행하기 때문에 GPU 활용에 매우 유리합니다. 현재 널리 쓰이는 PPO 알고리즘 등의 근간이 됩니다.

2.3 A2C 구현 흐름 (ParallelEnv)

A2C 구현의 핵심은 ParallelEnv 클래스를 만들어 메인 프로세스에서 여러 Worker 환경에 파이프(Pipe) 통신으로 명령을 내리고, 결과를 한꺼번에 수집하는 것입니다.

# ... (기존 A2C 라이브러리 및 하이퍼파라미터 동일) ...

def worker(worker_id, master_end, worker_end):
    # 각 독립적인 환경 프로세스
    master_end.close()
    env = gym.make("CartPole-v1")
    obs, _ = env.reset(seed=worker_id)
    
    while True:
        cmd, data = worker_end.recv() # 메인 프로세스의 명령 대기
        if cmd == "step":
            obs, reward, terminated, truncated, info = env.step(int(data))
            if terminated or truncated:
                obs, _ = env.reset()
            worker_end.send((obs, reward, terminated or truncated, info))
        # ... (reset, close 처리)

# 메인 루프 핵심
def main():
    envs = ParallelEnv(n_train_processes=3) # 파이프라인으로 연결된 병렬 환경
    model = ActorCritic()
    
    # ... 데이터 수집 및 n-step 반환값(TD Target) 계산 ...
    
    # 모인 배치를 통해 한 번에 네트워크 업데이트
    loss = -(torch.log(pi_a + 1e-8) * advantage.detach()).mean() + F.smooth_l1_loss(values, td_target_vec)
    loss.backward()
    optimizer.step()

3. ACER (Actor-Critic with Experience Replay)

ACER(Actor-Critic with Experience Replay)은 Actor-Critic 기반 강화학습 알고리즘으로, 정책 기반 방법의 안정성과 경험 재사용(Experience Replay)을 결합하여 데이터 효율을 높이기 위해 제안된 방법입니다. 기존 A2C/A3C는 대부분 on-policy 방식이라 한 번 사용한 데이터를 다시 활용하기 어렵지만, ACER은 importance sampling을 이용해 과거 정책으로 수집된 데이터를 보정하여 off-policy 학습이 가능하도록 만들었습니다. 또한 importance sampling 값이 너무 커져 학습이 불안정해지는 문제를 해결하기 위해 truncated importance sampling과 bias correction을 사용하고, Retrace 방식으로 안정적인 Q-value 업데이트를 수행합니다. 이러한 구조 덕분에 ACER은 Actor-Critic의 안정성을 유지하면서도 replay buffer를 활용하여 샘플 효율성을 크게 향상시킨 강화학습 알고리즘입니다.

 

ACER 구현 및 학습 참고 블로그: https://pak1010pak.tistory.com/163

 

[강화 학습] ACER(Actor-Critic with Experience Replay) 개념 정리

GitHub - gonida1010/CartPole-ACER-OffPolicy: OpenAI Gym의 CartPole 환경에 적용한 ACER (Actor-Critic with Experience ReplaOpenAI Gym의 CartPole 환경에 적용한 ACER (Actor-Critic with Experience Replay) 알고리즘의 PyTorch 구현체입니다

pak1010pak.tistory.com

3.1 해결하고자 한 문제 (On-policy의 한계)

A3C와 A2C는 모두 On-policy 방식입니다. 즉, 현재 학습 중인 정책으로 수집한 데이터만 학습에 사용할 수 있고, 한 번 업데이트에 사용한 데이터는 버려야 하므로 샘플 효율성(Sample Efficiency)이 떨어집니다. 반면 DQN과 같은 Off-policy 방법은 과거의 데이터를 Replay Buffer에 저장해 두고두고 재사용할 수 있습니다.

3.2 ACER의 핵심 아이디어

1) Importance Sampling (중요도 샘플링)

과거의 정책($\mu$)으로 수집한 데이터를 현재의 정책($\pi$) 학습에 사용하기 위해, 두 정책 간의 확률 비율을 곱해주는 방식입니다.

$$\rho = \frac{\pi(a|s)}{\mu(a|s)}$$

이 비율을 보상(Reward)이나 Advantage에 곱하여 과거 데이터의 가치를 현재 시점에 맞게 보정합니다.

2) Truncated Importance Sampling (절사형 중요도 샘플링)

Importance Sampling의 가장 큰 문제는 분모인 과거 정책의 행동 확률($\mu$)이 매우 작을 경우 보정값($\rho$)이 무한대에 가깝게 커져 학습이 완전히 망가질 수 있다는 점입니다. 이를 방지하기 위해 ACER는 특정 상한선($c$)을 두어 보정값이 너무 커지지 않도록 제한합니다.

$$\bar{\rho} = \min(c, \rho)$$

이외에도 ACER는 Retrace 알고리즘과 Bias Correction 기법을 도입하여 제한된 보정값으로 인해 발생하는 편향(Bias)을 수정하고 더욱 안정적인 Q-value 업데이트를 수행합니다.

'개념 정리 step2 > 강화 학습' 카테고리의 다른 글

[강화학습] "PPO" 알고리즘 핵심 이론 및 최신 RL 트렌드 정리  (0) 2026.03.15
[강화학습] Policy Gradient부터 Actor-Critic까지 정리  (0) 2026.03.10
[강화학습] Q-learning의 개념부터 Gym을 활용한 DQN 구현까지  (0) 2026.03.04
[강화학습] Deep Reinforcement Learning 개념  (0) 2026.03.03
[강화학습] TD Learning (시간차 학습) 개념, 랜덤 벽 GridWorld 실습  (0) 2026.03.01
'개념 정리 step2/강화 학습' 카테고리의 다른 글
  • [강화학습] "PPO" 알고리즘 핵심 이론 및 최신 RL 트렌드 정리
  • [강화학습] Policy Gradient부터 Actor-Critic까지 정리
  • [강화학습] Q-learning의 개념부터 Gym을 활용한 DQN 구현까지
  • [강화학습] Deep Reinforcement Learning 개념
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (178) N
      • 1. AI 논문 + 모델 분석 (20)
        • AI 논문 분석 (13)
        • AI 모델 분석 (7)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (57) N
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (9) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    데이터분석
    html
    파이썬
    Vision
    Python
    강화학습
    자료구조
    알고리즘
    javascript
    귀칼
    프로젝트
    paddleocr
    구현
    transformer
    OCR학습
    파인튜닝
    bottleneck
    github
    ViT
    Grad-CAM
    Ai
    pandas
    논문 리뷰
    OCR
    강화 학습
    공모전
    학습
    EfficientNet
    자바스크립트
    Attention Is All You Need
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[강화학습] A3C, A2C, ACER 알고리즘 핵심 정리 및 구현
상단으로

티스토리툴바