액터-크리틱
더 많은 작업
- Actor-critic; 액터-크리틱
- 행동을 고르는 정책(액터)과 그 행동을 평가하는 가치 함수(크리틱)를 함께 학습하는 강화 학습 구조
액터-크리틱(actor-critic)은 강화 학습에서 정책을 직접 최적화하는 정책 경사 방법과 가치 함수를 배우는 시간차 학습을 결합한 구조다. 액터(actor)는 정책 로 행동을 고르고, 크리틱(critic)은 가치 함수 또는 를 학습해 액터의 행동이 얼마나 좋았는지 평가한다. 액터는 크리틱의 평가를 학습 신호로 삼아 정책을 고친다.
몬테카를로 이득을 쓰는 REINFORCE는 편향이 없지만 분산이 크고 에피소드가 끝나야 배운다. 크리틱이 부트스트래핑한 추정값을 쓰면 약간의 편향을 받아들이는 대신 분산이 크게 줄고 매 단계 갱신할 수 있다. A2C, A3C, PPO, DDPG, TD3, SAC 등 현재 쓰이는 심층 강화 학습 알고리즘 대부분이 이 구조다. 정책 기반과 가치 기반의 중간이라는 점에서 강화 학습 문서의 분류에서는 별도 범주로 다룬다.
정책 경사 정리의 기울기에서 대신 어드밴티지를 쓰면 편향 없이 분산이 줄어든다.
크리틱이 상태 가치 만 배워도, 1단계 TD 오차가 어드밴티지의 (편향된) 추정값이 된다.
(마지막 등식은 일 때 성립한다.)
매 단계 전이 를 겪을 때마다:
- 크리틱: ,
- 액터:
TD 오차가 양수면 "예상보다 좋았다"는 뜻이므로 그 행동의 확률을 올리고, 음수면 내린다. 크리틱 학습은 TD(0) 그대로다.
1단계 TD 오차는 분산이 작지만 크리틱이 틀리면 편향이 크다. 실제 보상을 n단계까지 보고 부트스트래핑하면 그 사이에서 조절할 수 있다. 일반화 어드밴티지 추정(generalized advantage estimation, GAE)은 모든 n에 대한 추정을 지수 가중 평균한다.[3]
λ=0이면 1단계 TD 오차(편향 큼, 분산 작음), λ=1이면 몬테카를로 이득에서 를 뺀 것(편향 없음, 분산 큼)이다. TD(λ)와 같은 구조다. Stable-Baselines3 2.9 기준으로 PPO의 기본값은 gae_lambda=0.95이고, A2C 기본값은 gae_lambda=1.0, n_steps=5다.
롤아웃 하나에 대해 뒤에서부터 재귀로 계산한다. 에피소드 경계에서는 다음 상태 가치를 0으로 끊는다.
import numpy as np
def gae(rewards, values, last_value, dones, gamma=0.99, lam=0.95):
"""rewards, values, dones: 길이 T 배열. dones[t]=1이면 t 다음에서 에피소드가 끝남."""
T = len(rewards)
adv = np.zeros(T)
next_value, running = last_value, 0.0
for t in reversed(range(T)):
nonterminal = 1.0 - dones[t]
delta = rewards[t] + gamma * next_value * nonterminal - values[t] # TD 오차
running = delta + gamma * lam * nonterminal * running
adv[t] = running
next_value = values[t]
returns = adv + values # 크리틱의 학습 목표
return adv, returns
- A3C(asynchronous advantage actor-critic): 딥마인드가 2016년 발표했다. 여러 CPU 스레드에서 각자 환경을 돌리는 액터-러너들이 공유 매개변수에 비동기로 기울기를 보낸다. 병렬 액터들이 서로 다른 상태를 겪으므로 표본 간 상관이 줄어 경험 재생 없이도 학습이 안정된다. 논문은 GPU 대신 멀티코어 CPU 한 대로 당시 아타리 최고 성능을 절반의 학습 시간에 넘었다고 보고했다.[4] 손실은 정책 경사 항, 가치 회귀 항, 탐험을 위한 엔트로피 보너스의 합이다.
- A2C(advantage actor-critic): A3C의 동기식·결정론적 변형이다. 모든 병렬 환경이 n단계씩 진행할 때까지 기다렸다가 한 배치로 갱신한다. GPU를 쓰기 좋고 구현이 단순하다. Stable-Baselines3 문서는 A2C를 "여러 작업자를 써서 리플레이 버퍼를 쓰지 않는" A3C의 동기식 변형으로 설명한다.[5]
- ACER(actor-critic with experience replay): A3C 계열에 경험 재생을 붙여 오프 폴리시로 데이터를 재사용한 방법이다. 과거 정책의 데이터를 쓰면서 생기는 편향을 잘린 중요도 가중치와 편향 보정 항으로 다루고, 확률적 듀얼링 신경망과 새 신뢰 영역 갱신을 더했다. 아타리 57개 게임과 연속 제어에서 안정적이고 표본 효율이 높다고 보고했다.[6]
- PPO: A2C에 클리핑된 대리 목표를 더해, 같은 롤아웃 데이터로 여러 에폭 갱신해도 정책이 크게 바뀌지 않게 했다. 액터-크리틱 구조이며 GAE를 쓴다. 자세한 내용은 해당 문서 참고.
A2C의 손실(최소화 형태)은 다음과 같다. , 는 가중치(SB3 기본값 vf_coef=0.5, ent_coef=0.0)다.
액터와 크리틱은 몸통(특징 추출기)을 공유하고 머리만 따로 두기도 하고, 아예 분리하기도 한다. 공유하면 계산이 줄지만 두 손실의 크기 차이로 서로 방해할 수 있다.
연속 행동 공간에서 표본 효율을 높이려고 리플레이 버퍼를 쓰는 오프 폴리시 액터-크리틱이다. 크리틱은 행동 가치 를 DQN처럼 벨만 오차로 학습하고, 액터는 크리틱의 를 키우는 방향으로 학습한다. 모두 목표 신경망을 지수 이동 평균(폴리액 평균) 로 천천히 따라가게 한다.
TD3(twin delayed DDPG)는 DDPG의 과대평가와 불안정을 세 가지 장치로 줄였다.[9]
- 잘린 이중 Q 학습(clipped double Q): 크리틱을 두 개 두고 타깃에 둘 중 작은 값을 쓴다.
- 지연된 정책 갱신: 크리틱을 번(보통 2번) 갱신할 때 액터와 목표 신경망을 한 번 갱신한다.
- 목표 정책 평활화: 타깃 행동에 잘린 잡음을 더한다. , . 크리틱의 뾰족한 오차를 액터가 파고드는 것을 막는다.
Stable-Baselines3 2.9의 TD3 기본값은 policy_delay=2, target_policy_noise=0.2, target_noise_clip=0.5다.
SAC(soft actor-critic)는 보상과 함께 정책의 엔트로피도 최대화하는 최대 엔트로피 강화 학습 목표를 쓴다.[10]
온도 가 탐험의 양을 정한다. 크리틱 타깃과 액터 손실은 다음과 같다(TD3처럼 크리틱 두 개 중 작은 값을 쓴다).
액터는 가우시안에서 재매개변수화 기법으로 표본을 뽑아 로 행동 범위에 눌러 넣는다(). 2018년 12월 후속 논문은 목표 엔트로피(보통 )를 정하고 를 자동으로 조절하는 방법과 실제 로봇 실험을 추가했다.[11] 확률적 정책이라 탐험이 정책 안에 들어 있고, 후속 논문은 난수 시드가 달라도 성능이 일관적이라고 보고했다.
| 알고리즘 | 연도 | 정책 | 온/오프 폴리시 | 크리틱 | 행동 공간(SB3) | 탐험 | 특징 |
|---|---|---|---|---|---|---|---|
| A3C | 2016 | 확률적 | 온 | 이산·연속 | 정책 표본 + 엔트로피 | 비동기 병렬, CPU 친화 | |
| A2C | 2016~2017 | 확률적 | 온 | 이산·연속 | 정책 표본 + 엔트로피 | 동기식, 단순 | |
| PPO | 2017 | 확률적 | 온 | 이산·연속 | 정책 표본 + 엔트로피 | 클리핑으로 데이터 재사용 | |
| DDPG | 2015 | 결정론적 | 오프 | 1개 | 연속 | 행동 잡음 | 표본 효율 높으나 불안정 |
| TD3 | 2018 | 결정론적 | 오프 | 2개 | 연속 | 행동 잡음 | 과대평가 억제, 지연 갱신 |
| SAC | 2018 | 확률적 | 오프 | 2개 | 연속 | 엔트로피 최대화 | 자동 온도 조절, 시드 편차 작음 |
SB3 열은 Stable-Baselines3 공식 구현이 지원하는 행동 공간이다. DDPG·TD3·SAC는 Box(연속)만, A2C·PPO는 Box, Discrete, MultiDiscrete, MultiBinary를 지원한다.[12] 이산 행동용 SAC 변형도 연구되어 있지만 SB3 본체에는 없다.
Stable-Baselines3 2.9 기준으로 SAC를 Gymnasium의 Pendulum-v1(연속 토크 1차원)에 학습시키는 코드다. 다른 알고리즘도 클래스 이름만 바꾸면 같은 방식으로 쓴다(TD3, DDPG, A2C, PPO).
import gymnasium as gym
from stable_baselines3 import SAC
env = gym.make("Pendulum-v1")
model = SAC("MlpPolicy", env, learning_rate=3e-4, buffer_size=100_000,
batch_size=256, tau=0.005, gamma=0.99, ent_coef="auto", verbose=1, seed=0)
model.learn(total_timesteps=20_000)
obs, _ = env.reset(seed=0)
action, _ = model.predict(obs, deterministic=True) # 평가 때는 평균 행동을 쓴다
ent_coef="auto"가 자동 온도 조절이고, tau는 목표 신경망의 폴리액 평균 계수다. SB3에서 SAC의 기본 batch_size는 256, buffer_size는 100만이다.
- 두 신경망이 서로의 출력에 의존하므로, 크리틱이 틀리면 액터가 그 오차를 이용하는 쪽으로 잘못 학습한다. TD3의 쌍둥이 크리틱과 지연 갱신이 이 문제를 겨냥한다.
- 하이퍼파라미터(학습률 두 개, 목표 신경망 갱신 속도, 엔트로피 계수)가 많다.
- 오프 폴리시 액터-크리틱을 고정된 데이터셋으로만 학습하면 데이터에 없는 행동의 가 과대평가되어 무너진다. 이 문제를 다루는 것이 오프라인 강화 학습이다.
- ↑ Andrew G. Barto, Richard S. Sutton, Charles W. Anderson, 〈Neuronlike adaptive elements that can solve difficult learning control problems〉, IEEE Transactions on Systems, Man, and Cybernetics SMC-13(5), 834~846, 1983. doi:10.1109/TSMC.1983.6313077
- ↑ Richard S. Sutton 외, 〈Policy Gradient Methods for Reinforcement Learning with Function Approximation〉, NIPS 12, 1999. 논문
- ↑ John Schulman, Philipp Moritz, Sergey Levine, Michael I. Jordan, Pieter Abbeel, 〈High-Dimensional Continuous Control Using Generalized Advantage Estimation〉, ICLR 2016. arXiv:1506.02438
- ↑ Volodymyr Mnih 외, 〈Asynchronous Methods for Deep Reinforcement Learning〉, ICML 2016. arXiv:1602.01783
- ↑ Stable-Baselines3 문서, A2C
- ↑ Ziyu Wang 외, 〈Sample Efficient Actor-Critic with Experience Replay〉, ICLR 2017. arXiv:1611.01224
- ↑ David Silver 외, 〈Deterministic Policy Gradient Algorithms〉, ICML 2014. PMLR 32
- ↑ Timothy P. Lillicrap 외, 〈Continuous control with deep reinforcement learning〉, ICLR 2016. arXiv:1509.02971
- ↑ Scott Fujimoto, Herke van Hoof, David Meger, 〈Addressing Function Approximation Error in Actor-Critic Methods〉, ICML 2018. arXiv:1802.09477
- ↑ Tuomas Haarnoja, Aurick Zhou, Pieter Abbeel, Sergey Levine, 〈Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor〉, ICML 2018. arXiv:1801.01290
- ↑ Tuomas Haarnoja 외, 〈Soft Actor-Critic Algorithms and Applications〉, 2018. arXiv:1812.05905
- ↑ Stable-Baselines3 문서, RL Algorithms