ai theory
강화학습 기초 (15) - PPO는 Policy가 너무 멀리 가지 않게 한다
Junyoung Park · 2024-06-21 · 5 min
들어가며...
Policy Gradient는 좋은 Action의 확률을 높인다. 방향은 맞더라도 한 번에 너무 크게 움직이면 문제가 생긴다.
현재 Policy로 모은 Trajectory를 사용해 여러 번 Update하는 동안 Policy가 크게 바뀌면, 그 Data는 더 이상 현재 Policy가 만든 Data가 아니다. 특정 Action 하나의 확률이 갑자기 커지면서 다른 좋은 Action이 사라질 수도 있다.
PPO, Proximal Policy Optimization은 “좋은 방향으로 움직이되 Old policy에서 너무 멀리 가지 말자”는 생각을 비교적 간단한 Objective로 구현한다.
이번 글에서는 PPO-Clip의 확률 비율과 Clipping을 숫자로 읽어본다.
Old policy와 New policy의 확률 비율
Trajectory를 모을 때 사용한 Policy를 , 현재 Update 중인 Policy를 라고 하자.
Sample 에 대해 Probability ratio를 계산한다.
이 비율은 선택한 Action의 확률이 얼마나 변했는지 보여준다.
- : 확률이 그대로다.
- : Old policy보다 커졌다.
- : Old policy의 로 줄었다.
예를 들어 Old policy에서 어떤 Action의 확률이 , New policy에서 라면,
이다.
Clipped Objective
PPO-Clip의 핵심 Objective는,
이다.
처음 보면 길지만 두 후보 중 더 보수적인 값을 고르는 식이다.
- : 제한하지 않은 Policy Gradient 목적
- : 비율을 구간 안으로 자른 목적
- : 두 값 중 낙관적이지 않은 쪽을 선택
보통 라면 기준 구간은,
이다.
Advantage가 양수일 때
이면 선택한 Action이 기대보다 좋았다는 뜻이다. 확률을 높이고 싶다.
라고 하자.
제한하지 않은 값은,
Clipped 값은,
이므로 Objective는,
를 사용한다. 확률 비율이 를 넘은 뒤에는 더 올려도 이 Sample에서 얻는 이득이 커지지 않는다.
Advantage가 음수일 때
이면 선택한 Action이 기대보다 나빴으므로 확률을 낮추고 싶다. 하지만 너무 많이 낮추는 것도 막아야 한다.
이면,
이고 Clipped 값은,
이다.
을 사용하므로 로 더 작아지는 방향에 추가 이득을 주지 않는다.
음수를 다룰 때 이 헷갈릴 수 있다. 숫자선에서 이 보다 작은 값이라는 점만 조심하면 된다.
Clipping은 확률을 강제로 가두는 장치가 아니다
PPO가 모든 Probability ratio를 반드시 안에 가두는 것은 아니다. Objective가 구간 밖의 개선 유인을 잘라낼 뿐이다.
다른 Sample들의 Gradient와 Network Parameter 공유 때문에 일부 Ratio는 경계를 넘을 수 있다. 그래서 실제 구현에서는 Approximate KL divergence도 함께 확인하고 너무 커지면 Epoch를 일찍 멈추기도 한다.
Clipping을 “딱딱한 Constraint”보다 “한 Sample이 Policy를 과하게 밀어붙일 보상을 없애는 장치”로 이해하는 편이 정확하다.
PPO의 한 Batch가 학습되는 과정
PPO는 보통 다음 순서로 학습한다.
- Old policy 로 여러 Trajectory를 모은다.
- Return과 Advantage 를 계산한다.
- 각 Sample의 Old action probability를 저장한다.
- Batch를 Mini-batch로 섞는다.
- 같은 Data로 여러 Epoch PPO Objective를 최적화한다.
- Update가 끝난 Policy를 다음 Old policy로 사용해 새 Data를 모은다.
실제 Loss에는 무엇이 더 들어갈까
Actor-Critic PPO 구현에서는 Policy loss만 사용하지 않는다.
- : Clipped objective로 Actor를 학습한다.
- : Critic의 Value prediction error를 줄인다.
- : Entropy를 높여 Policy가 너무 빨리 한 Action으로 굳지 않게 한다.
- : 각 항의 크기를 조절한다.
문헌은 Objective를 최대화하는 식으로 쓰기도 하고, 구현은 앞에 음수를 붙인 Loss를 최소화하기도 한다. 부호가 다른 코드를 봤을 때 무엇을 최대화하고 최소화하는지 확인해야 한다.
GAE와 함께 쓰는 이유
PPO는 Advantage의 품질에 크게 영향을 받는다. 흔히 GAE를 사용한다.
여기서,
이다. 로 짧은 TD estimate와 긴 Return 사이의 Bias-Variance를 조절한다.
Mini-batch 안에서 Advantage를 평균 , 표준편차 정도로 Normalize하는 구현도 자주 사용한다. 이는 Gradient scale을 안정시키지만 Advantage의 상대적인 순서를 학습에 사용하는 셈이라는 점을 기억하면 된다.
PPO가 해결하지 않는 것
PPO는 Policy update를 안정시키는 실용적인 방법이지 모든 RL 문제의 답은 아니다.
- 여전히 On-policy Data를 계속 새로 모아야 한다.
- Reward가 잘못 설계되면 잘못된 목표를 안정적으로 최적화할 수 있다.
- Hyperparameter와 구현 세부사항에 민감하다.
- Clipping만으로 안전이나 일반화가 보장되지는 않는다.
이후 RLHF에서 PPO가 다시 등장한다. 그때도 핵심은 Preference reward를 올리되 Reference policy에서 너무 멀어지지 않도록 하는 것이다.
이번 글에서 기억할 것
PPO는 Old policy와 New policy의 Action probability ratio를 보고, Advantage가 Policy를 한 번에 너무 멀리 밀어붙이지 못하도록 개선 유인을 Clipping한다.
- 다.
- 이면 선택한 Action의 확률을 높이고, 음수면 낮춘다.
- PPO-Clip은 제한 전후 Objective 중 더 보수적인 값을 사용한다.
- Clipping은 Ratio를 강제로 가두는 Hard constraint가 아니다.
- 실제 PPO는 Value loss, Entropy, GAE와 함께 사용된다.