Skip to content

Commit 528e052

Browse files
Add a posting about PPO
1 parent e3a16bd commit 528e052

File tree

4 files changed

+161
-0
lines changed

4 files changed

+161
-0
lines changed

_posts/2022-9-25-ppo.md

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
---
2+
layout: post
3+
title: "[강화학습] Proximal Policy Optimization (PPO) 짧은 리뷰"
4+
date: 2022-9-25 19:00
5+
categories: [RL]
6+
use_math: true
7+
comments: true
8+
---
9+
10+
![figure1](https://raw.githubusercontent.com/HiddenBeginner/hiddenbeginner.github.io/master/static/img/_posts/2021-2-4-rl-notations-cheat-sheet/figure1.png){: width="300" height="300"){: .center}
11+
12+
<br>
13+
14+
[지난 포스팅](https://hiddenbeginner.github.io/rl/2022/09/18/trpo.html)에서는 TRPO 논문의 스토리에 대해서 심도 있게 다뤄보았다.
15+
TRPO는 일반적인 정책에 대해서 정책의 monotonic improvement를 보장할 수 있는 방법을 이론과 함께 제시하였다.
16+
하지만, 이론이 복잡할수록 구현은 어려운 법이다. 유명 강화학습 라이브러리에서도 TRPO의 구현체가 없는 것을 보면 TRPO는 구현이 어렵다는 것을 간접적으로 알 수 있다.
17+
내 생각에 TRPO에서 중요한 부분은 현재 정책과 "가까운 정책들 중에서" performance measure를 최적화하는 정책을 찾는 것이다.
18+
이는 performance measure를 최적화하는 방향을 먼저 찾고, 그 방향으로 정책을 아주 조금만 업데이트하면 어느 정도 위의 사항을 달성할 수 있다.
19+
PPO는 TRPO의 업데이트 크기를 clip하여 정책을 조금씩만 업데이트 하는 방법이라고 요약할 수 있다.
20+
21+
- 제목: Proximal Policy Optimization Algorithms
22+
- 저자: John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov, ***Open AI***
23+
- 연도: 2017
24+
- 링크: [https://arxiv.org/abs/1707.06347](https://arxiv.org/abs/1707.06347)
25+
26+
<br>
27+
28+
다음 링크에서 본 포스팅의 PDF 파일 버전을 다운 받아서 볼 수 있습니다.
29+
- [https://github.com/HiddenBeginner/hiddenbeginner.github.io/tree/master/static/pdf/2022-9-25-ppo.pdf](https://github.com/HiddenBeginner/hiddenbeginner.github.io/tree/master/static/pdf/2022-9-25-ppo.pdf)
30+
31+
<br>
32+
33+
---
34+
## TRPO의 목적함수
35+
TRPO는 업데이트 전 정책 $\pi\_{\theta\_{\text{old}}}$와 업데이트 후 정책 $\pi\_{\theta}$의 KL divergence에 대해 제약 (constraint)을 걸어 다음 surrogate objective를 최대화를 했다.
36+
37+
$$
38+
\operatorname*{maximize}_\theta \hat{\mathbb{E}}_t \left[ \frac{\pi_{\theta}\left( a_t |s_t\right)}{\pi_{\theta_{\text{old}}}\left( a_t |s_t\right)} \hat{A}_t\right], \quad \quad (1)
39+
$$
40+
41+
$$
42+
\text{subject to} \quad \hat{\mathbb{E}}_t \left[ \operatorname{KL}\left[ \pi_{\theta_{\text{old}}}\left(\cdot|s_t \right), \pi_\theta \left(a_t | s_t \right) \right] \right] \le \delta. \quad \quad (2)
43+
$$
44+
45+
<br>
46+
47+
해석하자면,
48+
- 정책은 주어진 상태에 대한 행동들의 확률분포이기 때문에 두 정책 사이의 KL divergence를 계산할 수 있다.
49+
- 업데이트 전, 후 정책의 KL divergence를 $\delta$ 이하로 유지하면서 식 $(1)$의 surrogate objective를 최대화.
50+
- TRPO에서는 식 $(1), (2)$의 constraint optimization 대신 아래의 $(3)$을 최대화하는 방법도 제안했지만, $\beta$ 값을 하나로 정하는 것이 매우 어렵다고 한다. $\beta$를 환경에 따라 지정해줘야할 뿐만 아니라, 사실 학습 도중에도 adaptive하게 바꿔줘야할 필요가 있었다.
51+
52+
$$
53+
\operatorname*{maximize}_{\theta} \hat{\mathbb{E}}_t \left[ \frac{\pi_{\theta}\left( a_t |s_t\right)}{\pi_{\theta_{\text{old}}}\left( a_t |s_t\right)} \hat{A}_t -\beta \operatorname{KL}\left[ \pi_{\theta_{\text{old}}}\left(\cdot|s_t \right), \pi_\theta \left(a_t | s_t \right)\right] \right]. \quad \quad (3)
54+
$$
55+
56+
<br>
57+
58+
---
59+
60+
## 논문의 해결책
61+
### Clipped Surrogate Objective
62+
63+
- KL divergence를 이용하여 업데이트의 크기를 제한하지 않고, 애초에 업데이트 대상인 $\frac{\pi\_{\theta}\left( a_t \|s_t\right)}{\pi\_{\theta\_{\text{old}}}\left( a_t \|s_t\right)} \hat{A}_t$의 크기를 clipping하여 제한.
64+
- 표기의 편의를 위해 $r\_{t} \left( \theta \right) = \frac{\pi\_{\theta} \left( a_t \| s_t \right)}{\pi\_{\theta_{\text{old}}} \left( a_t \| s_t \right)}$라 하자. (진작에 할껄 ,,,)
65+
66+
$$
67+
L^{\text{CLIP}}(\theta)=\hat{\mathbb{E}}_t \left[ \min \left(r_t \left(\theta\right)\hat{A}_t, \operatorname{clip}\left(r_t \left(\theta\right), 1-\epsilon,1+\epsilon \right) \hat{A}_t \right) \right], \quad \quad (4)
68+
$$
69+
70+
<br>
71+
72+
where
73+
74+
$$
75+
\operatorname{clip}\left(x, \text{low}, \text{high} \right)=\begin{cases} \text{low} & \text{if } x<\text{low} \\x & \text{if } \text{low} \le x < \text{high} \\ \text{high} & \text{if } x \ge \text{high} \end{cases}
76+
$$
77+
78+
<br>
79+
80+
- 우선 $\theta = \theta\_{\text{old}}$일 때 $r_t \left( \theta \right)=1$에서 업데이트를 시작한다.
81+
- 만약 $\hat{A}_t>0$ 라면, 상태 $s_t$에서 행동 $a_t$를 취할 확률을 높여주는 방향으로 policy를 업데이트하게 된다. 따라서 $r_t \left( \theta \right)$이 1보다 커지게 된다. 이때, $\operatorname{clip}$은 $r_t \left( \theta \right)$이 $1+\epsilon$ 까지만 커지도록 만들어준다.
82+
- 반대로 만약 $\hat{A}_t<0$ 라면, 상태 $s_t$에서 행동 $a_t$를 취할 확률을 낮춰주는 방향으로 policy를 업데이트한다. 즉, $r_t \left( \theta \right)$이 1보다 작아지게 된다. 이때, $\operatorname{clip}$은 $r_t \left( \theta \right)$이 $1-\epsilon$ 까지만 작아지게 만들어준다.
83+
84+
![png](https://raw.githubusercontent.com/HiddenBeginner/hiddenbeginner.github.io/master/static/img/_posts/2022-9-25-ppo/clip.png){: width="500" height="500"){: .center}
85+
86+
<br>
87+
88+
### Adpative KL Penalty Coefficient
89+
90+
Clipped surrogate objective 방법 대신 식 $(3)$의 $\beta$를 policy가 업데이트 정도에 따라 adaptive하게 바꿔주는 방법인데, 굳이 정리할 필요까지는 없는 듯 ..?
91+
92+
### 전체 목적 함수
93+
94+
우선 Advantage에 대한 추정량 (estimator)는 다음과 같다.
95+
96+
$$
97+
\hat{A}_{t} = \delta_{t} + (\gamma\lambda)\delta_{t+1}+\cdots+(\gamma\lambda)^{T-t+1}\delta_{T-1}, \quad \quad (5)
98+
$$
99+
100+
$$
101+
\text{where} \quad \delta_t=r_t+\gamma V(s_{t+1}) - V(s_t). \quad \quad (6)
102+
$$
103+
104+
<br>
105+
106+
$\lambda=1$일 때를 살펴보면 조금 와닿는다.
107+
108+
$$
109+
\hat{A}_t = -V(s_t) + r_t + \gamma r_{t+1} + \cdots + \gamma^{T- t +1}r_{T-1}+\gamma^{T-t} V(S_T)
110+
$$
111+
112+
113+
<br>
114+
115+
우리가 아는 advantage $A_t = Q(s_t, a_t) - V(s_t)$과 식 $(6)$을 비교해보면 $-V(s_t)$는 동일하게 갖고 있으며, 나머지 텀 $r\_{t} + \gamma r\_{t+1} + \cdots + \gamma^{T-t+1}r\_{T-1} + \gamma^{T-t} V(S_T)$는 $Q(s_t, a_t)$를 추정량이다. 이 논문에서 제안하는 전체 목적 함수는 다음과 같다.
116+
117+
$$
118+
\begin{equation}
119+
L_{t}^{\text{CLIP}+\text{VF}+\text{S}}\left( \theta \right) = \hat{\mathbb{E}}_t \left[ L_t^{\text{CLIP}} \left( \theta \right) -c_{1}L_{t}^{\text{VF}}\left( \theta \right) + c_{2} S\left[\pi_{\theta}\right]\left( s_{t} \right)\right], \quad \quad (7)
120+
\end{equation}
121+
$$
122+
123+
<br>
124+
125+
where $L_t^{\text{VF}} \left( \theta \right) = \left( V\_{\theta} \left( s\_{t} \right) - V\_{t}^{\text{targ}} \right)^{2}$으로 가치 함수 approximator를 훈련시키기 위한 텀이다. $S\left[\pi\_{\theta} \right] \left( s_t \right)$은 entropy bonus으로서 exploration을 하게 만들어주는 텀이다. $c_1, c_2$는 각 텀에 대한 가중치이다.
126+
127+
<br>
128+
129+
---
130+
131+
## Algorithm
132+
133+
- 요약: $N$개의 policy가 각각 병렬적으로 환경과 $T$번 상호작용하여 $NT$개의 경험 데이터 획득하고, 이 경험 데이터들을 사용하여 목적 함수 최적화
134+
135+
![png](https://raw.githubusercontent.com/HiddenBeginner/hiddenbeginner.github.io/master/static/img/_posts/2022-9-25-ppo/algo.png){: width="500" height="500"){: .center}
136+
137+
<br>
138+
139+
## Experiment
140+
141+
### Experimental setting
142+
143+
- HalfCheetah, Hopper, InvertedDoublePendulum, InvertedPendulum, Reacher, Swimmer, Walker2d, all “-v1”, OpenAI Gym.
144+
- Policy network: a MLP with two hidden layers of 64 units, tanh nonlinearities, outputting the mean of a Gaussian distribution, with variable standard deviations.
145+
- No parameter sharing between policy and value function
146+
- No entropy bonus
147+
- Train for 1 million timesteps
148+
- $\gamma=0.99, \lambda=0.95$
149+
150+
<br>
151+
152+
![png](https://raw.githubusercontent.com/HiddenBeginner/hiddenbeginner.github.io/master/static/img/_posts/2022-9-25-ppo/exp.png)
153+
154+
155+
<br>
156+
157+
## 참고 문헌
158+
159+
Schulman, J., Wolski, F., Dhariwal, P., Radford, A., & Klimov, O. (2017). Proximal Policy Optimization Algorithms. arXiv. https://doi.org/10.48550/arXiv.1707.06347
160+
161+
<br>
570 KB
Loading
548 KB
Loading
1.53 MB
Loading

0 commit comments

Comments
 (0)