Actor-Critic이란?
Actor-Critic은 강화학습에서 정책(Policy)과 가치 함수(Value Function)를 동시에 학습하는 방법론입니다. Actor는 행동을 선택하는 정책을 담당하고, Critic은 그 행동이 얼마나 좋은지 평가하는 역할을 합니다.
Actor-Critic의 핵심은 두 네트워크가 서로 협력하며 학습한다는 점입니다. Actor는 Critic의 피드백을 받아 정책을 개선하고, Critic은 Actor의 행동 결과를 보고 가치 추정을 업데이트합니다.
기본 수식
Actor-Critic의 핵심 업데이트 식은 다음과 같습니다:
Critic 업데이트 (TD Error):
- : TD Error (시간차 오차)
- : 시점 t의 보상
- : 할인율 (미래 보상의 중요도)
- : 상태 s의 가치 함수 추정값
Actor 업데이트 (Policy Gradient):
- : Actor 네트워크 파라미터
- : 상태 에서 행동 를 선택할 확률
- : 파라미터에 대한 그래디언트
주요 Actor-Critic 알고리즘 비교
| 알고리즘 | 특징 | 장점 | 단점 |
|---|---|---|---|
| A2C | Advantage Actor-Critic, 동기식 병렬 학습 | 안정적, 구현 간단, 재현성 좋음 | 샘플 효율 낮음, 학습 속도 느림 |
| A3C | 비동기식 병렬 학습 | 빠른 학습, 다양한 경험 수집 | 비동기로 인한 불안정, 재현 어려움 |
| PPO | Clipped Surrogate Objective | 안정성 최고, 하이퍼파라미터 민감도 낮음 | 복잡한 환경에서 느림 |
| DDPG | 연속 행동 공간, Off-Policy | 샘플 효율 높음, 연속 제어 강함 | 하이퍼파라미터 민감, 불안정 |
| TD3 | DDPG 개선 (Twin Delayed) | DDPG보다 안정적, 과대평가 완화 | 여전히 튜닝 필요 |
| SAC | Maximum Entropy RL | 탐색-활용 균형 최고, 매우 안정적 | 계산 비용 높음, 메모리 사용 많음 |
A2C (Advantage Actor-Critic)
핵심 개념
A2C는 Advantage 함수를 사용하여 행동의 상대적 가치를 평가합니다:
- : Advantage (평균 대비 얼마나 좋은 행동인가)
- : 행동-가치 함수
- : 상태-가치 함수
Stable Baselines3 구현 예시
from stable_baselines3 import A2C
from stable_baselines3.common.env_util import make_vec_env
# 환경 생성 (4개 병렬)
env = make_vec_env('CartPole-v1', n_envs=4)
# A2C 모델 생성
model = A2C(
'MlpPolicy',
env,
learning_rate=7e-4,
n_steps=5, # 업데이트 전 수집할 스텝 수
gamma=0.99, # 할인율
gae_lambda=1.0, # GAE 파라미터
ent_coef=0.01, # 엔트로피 계수 (탐색)
vf_coef=0.5, # 가치 함수 손실 계수
max_grad_norm=0.5, # 그래디언트 클리핑
verbose=1
)
# 학습
model.learn(total_timesteps=100000)
# 저장 및 로드
model.save('a2c_cartpole')
model = A2C.load('a2c_cartpole')
SAC (Soft Actor-Critic)
Maximum Entropy 강화학습
SAC는 보상 최대화와 동시에 정책 엔트로피를 최대화합니다:
- : 정책의 엔트로피 (확률 분포의 무작위성)
- : 온도 파라미터 (탐색 강도 조절)
엔트로피 항 덕분에 SAC는 자연스럽게 탐색과 활용의 균형을 맞추며, 다양한 환경에서 안정적으로 학습합니다.
Stable Baselines3 구현 예시
from stable_baselines3 import SAC
# 연속 행동 공간 환경
env = make_vec_env('Pendulum-v1', n_envs=1)
model = SAC(
'MlpPolicy',
env,
learning_rate=3e-4,
buffer_size=1000000, # Replay Buffer 크기
learning_starts=100, # 학습 시작 전 랜덤 스텝
batch_size=256,
tau=0.005, # Target 네트워크 소프트 업데이트
gamma=0.99,
train_freq=1, # 매 스텝 학습
gradient_steps=1,
ent_coef='auto', # 자동 엔트로피 조정
target_update_interval=1,
verbose=1
)
model.learn(total_timesteps=50000)
하이퍼파라미터 튜닝 가이드
공통 파라미터
| 파라미터 | 역할 | 추천 범위 | 튜닝 팁 |
|---|---|---|---|
| learning_rate | 학습 속도 | 1e-5 ~ 1e-3 | 너무 크면 불안정, 작으면 느림. 보통 3e-4 시작 |
| gamma | 미래 보상 할인율 | 0.95 ~ 0.999 | 긴 에피소드는 0.99 이상 |
| batch_size | 배치 크기 | 64 ~ 512 | 클수록 안정적이지만 느림 |
| buffer_size | Replay Buffer (Off-Policy) | 100k ~ 1M | 메모리 허용 범위 내 최대 |
A2C 특화 파라미터
- n_steps: 5~20 (작을수록 bias 낮고, 클수록 variance 낮음)
- ent_coef: 0.0~0.1 (탐색 필요 시 높임)
- gae_lambda: 0.9~1.0 (GAE 사용 시 bias-variance 트레이드오프)
SAC 특화 파라미터
- tau: 0.001~0.01 (타겟 네트워크 업데이트 속도)
- ent_coef: ‘auto’ 또는 0.1~0.5 (자동 조정 권장)
- train_freq: 1 (매 스텝 학습, Off-Policy 장점)
실전 활용 시나리오
1. 로봇 제어 (연속 행동)
추천 알고리즘: SAC > TD3 > DDPG
- 연속적인 관절 각도/토크 제어
- 안전성과 탐색 중요
- SAC의 엔트로피 최대화가 다양한 움직임 학습에 유리
2. 게임 AI (이산 행동)
추천 알고리즘: PPO > A2C
- 안정성과 재현성 중요
- 병렬 환경으로 데이터 효율 보완
3. 금융/트레이딩
추천 알고리즘: SAC
- 연속 행동 (매수/매도 비율)
- 리스크 관리 위해 탐색 중요
- Off-Policy로 과거 데이터 재사용
디버깅 체크리스트
학습이 안 될 때:
- 보상 스케일 확인: 너무 크거나 작으면 정규화 필요
- 네트워크 크기: 복잡한 환경은 [256, 256] 이상
- 학습률 감소: 1e-4 이하로 낮춰보기
- 엔트로피 계수 증가: 탐색 부족 의심 시
불안정할 때:
- 그래디언트 클리핑 강화 (max_grad_norm=0.5)
- 배치 크기 증가
- Target 네트워크 tau 감소 (더 천천히 업데이트)
마무리
Actor-Critic 방법론은 현대 강화학습의 핵심입니다. A2C는 입문용으로 적합하고, SAC는 실무 연속 제어에서 최고 성능을 보입니다.
핵심 정리:
- 안정성 우선: PPO > A2C
- 샘플 효율 우선: SAC > TD3 > DDPG
- 연속 행동: SAC 압도적 우세
- 이산 행동: A2C/PPO 추천
하이퍼파라미터 튜닝은 환경마다 다르므로 작은 learning_rate + 큰 batch_size로 시작해 점진적으로 조정하세요. Stable Baselines3의 Zoo 예제를 참고하면 검증된 설정을 빠르게 찾을 수 있습니다.
Did you find this helpful?
☕ Buy me a coffee
Leave a Reply