본문 바로가기
Data Science/Reinforcement

PPO(Proximal Policy Optimization) 알고리즘의 탄생배경과 목적함수 그래디언트

by hyelog 2023. 9. 5.

6.1 배경

A2C 개선점

  • REINFORCE 알고리즘의 단점인 mc 업데이트 문제, 목적함수 gradient의 분산 커진 점 개선

단점 on-policy

  • policy로 실행시킨 sample 필요 → 효율성 떨어짐
  • 정책 gradient를 이용하므로 파라미터 변화량이 작더라도 정책 자체는 크게 변할 수 있음 → 점진적 업데이트 필요

6.2 그래디언트의 재구성

A2C의 그래디언트

  • On-policy
    • $\pi_\theta$(정책)로 발생시킨 샘플을 이용한 기댓값 계산 → 정책 업데이트 → 정책을 업데이트하면 이전 정책의 샘플을 폐기 후 업데이트 된 정책으로 새로운 샘플 발생

❖ off-policy의 장점

  • 다른 정책으로 발생시킨 샘플도 사용 가능

확률밀도함수 p(x)에 기반한 함수 f(x)의 기댓값을 다른 확률밀도함수 q(x)에 기반해 아래와 같이 계산한다

 

$$ \mathbb{E}{x \sim p(x)}[f(x)] = \mathbb{E}{x \sim q(x)}[\frac{p(x)}{q(x)}f(x)] \longrightarrow 식1 $$

 

이를 A2C 목적함수 그래디언트 식에 적용하면

$$ \nabla_\theta J(\theta) = \sum\limits_{t=0}^{T}(\mathbb{E}{\tau{x_\theta : u_t \sim p_{\theta_{OLD}}(\tau_{x_0}:u_t)}} [\frac{p_\theta(\tau_{x_0:u_t})}{p_{\theta_{OLD}}(\tau_{x_0:u_t})}\gamma^t \nabla_\theta log\pi_\theta(u_t|x_t)A^{\pi_\theta}(x_t,u_t)]) $$

이와 같다

 

여기서 $p_{\theta_{OLD}}$는 $p_\theta$와는 다른 정책으로 파라미터 화 된 확률밀도함수다.

 

궤적이 $\tau=(x_0, u_0, \cdots, x_T, u_T)$ 일 때, 마르코프 가정 하에서 $p_\theta(\tau)$를 전개하면,

$$ p_\theta(\tau) = p(x_0)\prod_{t=0}^{T}\pi_\theta(u_t|x_t)[(x_{t+1}|x_t, u_t) $$

$$ \begin{matrix} \frac{p_\theta(\tau_{x_0:u_t})}{p_{\theta_{OLD}}(\tau_{x_0:u_t})} &=& \frac{p(x_0)\prod\limits_{k=0}^{t}\pi_\theta(u_k|x_k)p(x_{k+1}|x_k,u_k)}{p(x_0)\prod\limits_{k=0}^{t}\pi_{\theta_{OLD}}(u_k|x_k)p(x_{k+1}|x_k,u_k)} \\ &=& \prod\limits_{k=0}^{t}\frac{\pi_\theta(u_k|x_k)}{\pi_{\theta_{OLD}}(u_k|x_k)} \end{matrix} $$

가 되고, 이를 그래디언트에 접목하면

$$ \nabla_\theta J(\theta) = \sum\limits_{t=0}^{T}(\mathbb{E}{\tau{x_\theta : u_t \sim p_{\theta_{OLD}}(\tau_{x_0}:u_t)}} [(\prod\limits_{k=0}^{t}\frac{\pi_\theta(u_k|x_k)}{\pi_{\theta_{OLD}}(u_k|x_k)})\gamma^t \nabla_\theta log\pi_\theta(u_t|x_t)A^{\pi_\theta}(x_t,u_t)]) $$

다음과 같이 된다.

 

$p_{\theta_{OLD}}$는 이전 정책, $p_\theta$ 현재 정책이다.

 

위 식에 의해 이전 정책으로 발생시킨 샘플 \tau_{x_0:u_t}를 이용해 기댓값을 계산할 수 있다. → 이전 샘플로 정책 업데이트 가능!

 

하지만 문제가 있다.

시간의 흐름에 따라 스케일함수가 계속 곱해 진다는 것인데,

이는 비슷한 파라미터를 가지는 정책일지라도 곱하기가 누적 될수록

스케일이 아주 커지거나 혹은 아주 작아지거나 하는 문제를 만들 수 있다.

이는 학습의 불안정으로 이어질 것이다.

 

그렇다면 A2C의 다른 그래디언트 식에 적용해보면 어떨까?

 

$$ \nabla_\theta J(\theta) = \sum_{t=0}^{T}\limits \left( \mathbb{E}{x_t \sim p\theta(x_t), u_t\sim \pi_\theta(u_t|x_t)}\left[ \gamma^t \nabla_\theta log\pi_\theta(u_t|x_t)A^{\pi_\theta}(x_t,u_t)\right] \right) $$

위 식에 위에서 사용한 식 1을 대입해 본다면

$$ \nabla_\theta J(\theta) = \sum_{t=0}^{T}\limits( \mathbb{E}{x_t \sim p{\theta_{OLD}}(x_t)} [\frac{p_\theta(x_t)}{p_{\theta_{OLD}}(x_t)} \mathbb{E}{u_t \sim \pi{\theta_{OLD}}(u_t|x_t)} [\gamma^t\frac{\pi_\theta(\tau_{x_0:u_t})}{\pi_{\theta_{OLD}}(\tau_{x_0:u_t})} \nabla_\theta log\pi_\theta(u_t|x_t)A^{\pi_\theta}(x_t,u_t)]]) $$

$\frac{p_\theta(x_t)}{p_{\theta_{OLD}}(x_t)} \approx 1$이라면,

$$ \nabla_\theta J(\theta) = \sum_{t=0}^{T}\limits( \mathbb{E}{x_t \sim p{\theta_{OLD}}(x_t)} [ \mathbb{E}{u_t \sim \pi{\theta_{OLD}}(u_t|x_t)} [\gamma^t\frac{\pi_\theta(\tau_{x_0:u_t})}{\pi_{\theta_{OLD}}(\tau_{x_0:u_t})} \nabla_\theta log\pi_\theta(u_t|x_t)A^{\pi_\theta}(x_t,u_t)]]) $$

가 될 수 있다.

 

이렇게 되면,

▲ 이전 정책으로 발생시킨 샘플로 정책을 평가, 업데이트하고

▲ 스케일함수 $\frac{\pi_\theta(u_k|x_k)}{\pi_{\theta_{OLD}}(u_k|x_k)}$는 현재 시간스텝 $t$만의 함수가 되므로 누적되지 않는다.

 

하지만

$\frac{p_\theta(x_t)}{p_{\theta_{OLD}}(x_t)} \approx 1$, 이조건을 만족해야 하는데…

 

다음 포스팅은 이 조건을 만족하는 조건이 무엇인지 알아보자.

댓글