정책 경사
더 많은 작업
- Policy gradient; 정책 경사
- 정책을 매개변수화한 함수로 두고, 기대 이득의 기울기를 표본으로 추정해 매개변수를 직접 올리는 강화 학습 방법
정책 경사(policy gradient) 방법은 강화 학습에서 정책 를 신경망 같은 미분 가능한 함수로 두고, 기대 이득 가 커지는 방향으로 를 경사 상승시키는 방법의 총칭이다. "폴리시 그래디언트", "정책 그래디언트"라고도 쓴다. 가치 함수를 먼저 배우고 거기서 정책을 끌어내는 Q-러닝·DQN 같은 가치 기반 방법과 달리, 정책 자체를 최적화한다.
정책 경사는 연속 행동 공간을 자연스럽게 다루고, 확률적 정책을 그대로 학습할 수 있다. 대신 기울기 추정의 분산이 커서 표본이 많이 필요하고 학습이 불안정하기 쉽다. 그래서 기준선, 크리틱, 신뢰 영역 같은 분산 감소·안정화 기법이 함께 발전했고, 그 결과가 액터-크리틱, TRPO, PPO다. 대형 언어 모델의 RLHF와 GRPO도 정책 경사 계열이다.
에피소드형 과제에서 궤적 의 확률은 정책과 환경의 곱이다.
최대화할 목표는 기대 이득이다.
는 환경이 정하므로 로 미분할 수 없다. 대신 확률 쪽을 미분한다. (로그 미분 기법, 점수 함수 추정량, likelihood ratio)를 쓰면
이다. 를 펼치면 초기 상태 분포와 전이 확률 항은 와 무관해 미분에서 사라진다.
그래서 환경 모델을 몰라도 정책의 로그 확률 기울기와 실제 받은 보상만으로 기울기를 추정할 수 있다.
시점 의 행동은 그 이전 보상에 영향을 줄 수 없으므로, 과거 보상 항은 기댓값이 0이 되어 빼도 된다. 그러면 각 행동에 그 뒤의 보상만 곱한다(reward-to-go).
서턴·매캘리스터·싱·만수르(NIPS 1999)는 함수 근사를 쓰는 일반적인 경우의 정책 경사 정리를 증명했다.[1]
는 정책을 따를 때의 상태 방문 분포다. 정책이 바뀌면 상태 분포도 바뀌는데, 정리의 핵심은 상태 분포의 기울기를 계산할 필요가 없다는 점이다. 같은 논문은 특정 조건(호환 함수 근사)을 만족하는 근사 로 를 바꿔도 기울기가 편향되지 않음을 보였다.
로널드 윌리엄스가 1992년 발표한 REINFORCE는 위 식의 자리에 실제 이득 를 넣은 몬테카를로 정책 경사다.[2] 알고리즘은 세 단계다.
- 1단계: 현재 정책으로 에피소드 하나(또는 여러 개)를 끝까지 생성한다.
- 2단계: 각 시점의 이득 를 계산한다.
- 3단계: 로 갱신한다.
서턴·바토 교과서의 정식 알고리즘에는 인자가 붙지만,[3] 실제 구현 대부분은 이를 빼고 쓴다. 엄밀한 기울기는 아니지만 뒤쪽 시점의 학습 신호가 사라지는 것을 막아 준다.
직관은 단순하다. 이득이 컸던 행동의 로그 확률은 올리고, 작았던 행동은 내린다. 를 쓰는 덕분에 자주 뽑히는 행동이 횟수 때문에 과하게 강화되지 않는다(확률로 나눠 주는 효과). 행동 공간이 이산이면 는 소프트맥스 출력의 범주 분포, 연속이면 평균과 표준편차를 출력하는 가우시안을 흔히 쓴다.
REINFORCE의 추정량은 편향이 없지만 분산이 크다. 모든 보상이 양수인 과제라면 모든 행동의 확률을 올리려 하고, 상대적으로 덜 올라간 행동이 결과적으로 내려가는 식이라 표본이 많이 필요하다.
행동에 의존하지 않는 아무 함수 를 이득에서 빼도 기울기의 기댓값은 그대로다.
그래서
로 써도 편향이 없고, 를 잘 고르면 분산이 크게 준다. 흔히 상태 가치 추정 를 기준선으로 쓰며, 이를 기준선 있는 REINFORCE(REINFORCE with baseline)라 한다. 이때 는 어드밴티지 의 추정값이 된다. 평균보다 나은 행동만 확률이 올라간다.
| 기법 | 무엇을 바꾸나 | 편향 | 비고 |
|---|---|---|---|
| 인과성(reward-to-go) | 전체 이득 대신 이후 보상만 곱함 | 없음 | 거의 모든 구현이 기본으로 쓴다. |
| 기준선 | 이득에서 상태 함수를 뺌 | 없음 | 상수 평균, 이동 평균, 학습한 |
| 크리틱(부트스트래핑) | 대신 | 있음 | 액터-크리틱. 에피소드가 끝나기 전에 갱신 가능 |
| GAE(λ) | 여러 단계 TD 오차를 로 가중합 | λ로 조절 | λ=1이면 몬테카를로, λ=0이면 1단계 TD[4] |
| 할인율 | 먼 미래 보상을 덜 반영 | 있음 | 실무에서는 분산 감소용 하이퍼파라미터로도 쓴다. |
| 어드밴티지 정규화 | 배치 안에서 평균 0, 표준편차 1로 맞춤 | 근사적 | 학습률 조정 효과 |
| 묶음 기준선(그룹 평균) | 같은 입력에 여러 표본을 뽑고 서로의 평균을 기준선으로 | 없음(자기 제외 평균일 때) | RLOO, GRPO. 크리틱 신경망이 필요 없다. |
파이토치와 Gymnasium(1.x)의 CartPole-v1로 구현한 예다. 정책 신경망과 기준선(가치) 신경망을 따로 두고, 기준선은 이득을 회귀해서 배운다. 손실에 음수를 붙여 경사 하강 최적화기로 경사 상승을 한다. 이 코드는 로컬에서 실행해 300 에피소드 안에 최대 점수 500에 도달하는 것을 확인했다(시드에 따라 다르다).
import gymnasium as gym
import torch
import torch.nn as nn
env = gym.make("CartPole-v1")
obs_dim, n_act = env.observation_space.shape[0], env.action_space.n
policy = nn.Sequential(nn.Linear(obs_dim, 64), nn.Tanh(), nn.Linear(64, n_act))
value = nn.Sequential(nn.Linear(obs_dim, 64), nn.Tanh(), nn.Linear(64, 1)) # 기준선 b(s)
opt = torch.optim.Adam(list(policy.parameters()) + list(value.parameters()), lr=1e-2)
gamma = 0.99
for episode in range(300):
obs, _ = env.reset(seed=episode)
states, log_probs, rewards, done = [], [], [], False
while not done:
s = torch.as_tensor(obs, dtype=torch.float32)
dist = torch.distributions.Categorical(logits=policy(s))
a = dist.sample()
obs, r, terminated, truncated, _ = env.step(a.item())
states.append(s); log_probs.append(dist.log_prob(a)); rewards.append(r)
done = terminated or truncated
# 각 시점의 이득 G_t를 뒤에서부터 계산
G, returns = 0.0, []
for r in reversed(rewards):
G = r + gamma * G
returns.insert(0, G)
returns = torch.tensor(returns)
v = value(torch.stack(states)).squeeze(-1)
advantage = returns - v.detach() # G_t - b(s_t), 기준선 쪽으로는 기울기를 막는다
policy_loss = -(torch.stack(log_probs) * advantage).sum() # 경사 "상승"이므로 부호를 뒤집는다
value_loss = ((returns - v) ** 2).mean()
opt.zero_grad()
(policy_loss + value_loss).backward()
opt.step()
실무 구현에서는 여기에 여러 환경을 병렬로 돌려 배치를 키우고, 정책 엔트로피 보너스를 더해 너무 일찍 결정론적 정책으로 굳는 것을 막고, 어드밴티지를 정규화한다.
정책 경사는 매개변수 공간에서 작은 걸음이 정책 공간에서도 작은 변화라는 보장이 없다. 학습률이 조금만 커도 정책이 무너지고, 한 번 나빠진 정책은 나쁜 데이터를 모아 회복이 어렵다. 이를 다루는 흐름은 다음과 같다.
| 방법 | 연도 | 핵심 아이디어 |
|---|---|---|
| REINFORCE | 1992 | 몬테카를로 이득으로 기울기 추정[2] |
| 정책 경사 정리 | 1999 | 함수 근사에서도 성립하는 기울기 식, 액터-크리틱의 이론적 근거[1] |
| 자연 정책 경사 | 2001 | 피셔 정보 행렬 로 기울기를 보정한 방향으로 갱신. 매개변수화 방식에 덜 민감하다.[5] |
| 결정론적 정책 경사(DPG) | 2014 | 연속 행동에서 . DDPG·TD3의 기반[6] |
| TRPO | 2015 | 갱신 전후 정책의 평균 KL 발산을 이하로 제한[7] |
| A3C·A2C | 2016 | 병렬 액터와 n단계 어드밴티지[8] |
| PPO | 2017 | 확률비 를 잘라(clip) 신뢰 영역을 1차 최적화로 근사, 같은 데이터로 여러 번 갱신[9] |
| GRPO, RLOO 등 | 2024 | 언어 모델에서 같은 프롬프트에 대한 여러 응답의 보상 평균을 기준선으로 써 크리틱을 없앰 |
TRPO와 PPO는 이전 정책으로 모은 데이터를 재사용하기 위해 중요도 비율 를 곱한 대리 목표(surrogate objective)를 쓴다. 이 비율이 1에서 멀어지면 추정이 부정확해지므로 비율을 제한하는 것이 두 방법의 공통점이다. 자세한 내용은 PPO (강화 학습) 문서 참고.
언어 모델을 정책으로, 생성한 토큰 하나하나를 행동으로, 완성된 응답의 평가를 보상으로 보면 RLHF는 정책 경사 문제다. 응답 하나가 끝나야 보상이 나오므로 에피소드형이고, 행동 공간(어휘)은 수만 개다. InstructGPT는 PPO를 썼지만, 2024년 아마디언 등은 RLHF 상황에서는 PPO가 해결하려던 문제(큰 분산, 불안정한 갱신)의 비중이 작아 더 단순한 REINFORCE 계열 방법이 PPO보다 낫다고 보고했다.[10] 같은 프롬프트에 응답을 개 뽑고 각 응답의 기준선으로 나머지 개 보상의 평균을 쓰는 RLOO(REINFORCE Leave-One-Out)와, 그룹 평균·표준편차로 정규화하는 GRPO가 이 흐름에 있다. 둘 다 크리틱 신경망을 없애 메모리를 아낀다.
| 장점 | 단점 |
|---|---|
| 연속·고차원 행동 공간을 그대로 다룬다. | 기울기 분산이 커서 표본 효율이 낮다. |
| 확률적 최적 정책(가위바위보, 부분 관측)을 표현할 수 있다. | 온 폴리시라 데이터를 한 번 쓰고 버린다(PPO는 몇 번 재사용). |
| 정책이 매개변수에 대해 매끄럽게 변해 수렴 성질이 좋다(국소 최적까지). | 전역 최적이 아니라 국소 최적에 머물 수 있다. |
| 사전 학습된 모델(언어 모델)의 정책을 바로 미세조정할 수 있다. | 하이퍼파라미터(학습률, 배치 크기)에 민감하다. |
- ↑ 1.0 1.1 Richard S. Sutton, David McAllester, Satinder Singh, Yishay Mansour, 〈Policy Gradient Methods for Reinforcement Learning with Function Approximation〉, NIPS 12, 1999. 논문
- ↑ 2.0 2.1 Ronald J. Williams, 〈Simple statistical gradient-following algorithms for connectionist reinforcement learning〉, Machine Learning 8, 229~256, 1992. doi:10.1007/BF00992696
- ↑ Richard S. Sutton, Andrew G. Barto, 《Reinforcement Learning: An Introduction》 2판, MIT Press, 2018, 13장. 저자 공개본
- ↑ John Schulman 외, 〈High-Dimensional Continuous Control Using Generalized Advantage Estimation〉, ICLR 2016. arXiv:1506.02438
- ↑ Sham M. Kakade, 〈A Natural Policy Gradient〉, NIPS 14, 2001.
- ↑ David Silver 외, 〈Deterministic Policy Gradient Algorithms〉, ICML 2014. PMLR 32
- ↑ John Schulman 외, 〈Trust Region Policy Optimization〉, ICML 2015. arXiv:1502.05477
- ↑ Volodymyr Mnih 외, 〈Asynchronous Methods for Deep Reinforcement Learning〉, ICML 2016. arXiv:1602.01783
- ↑ John Schulman 외, 〈Proximal Policy Optimization Algorithms〉, 2017. arXiv:1707.06347
- ↑ Arash Ahmadian 외, 〈Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs〉, 2024. arXiv:2402.14740