본문으로 바로가기

OpenAI Spinning-up : Vanilla Policy Gradient

Spinning up 코드 관련한 내용은 제외합니다.

배경지식(Background)

(이전 내용 참조 : 강화학습 소개 파트 3)

policy gradient의 핵심 아이디어는 최적의 정책이 될 때까지 return값을 더 높게 만들어주는 행동의 확률을 올리고, return값을 낮게 해주는 행동의 확률을 줄이는 것입니다.

빠르게 알고갈 사실

  • VPG는 on-policy 알고리즘입니다.
  • VPG는 discrete하거나 continuous한 action space를 가진 환경에서 사용할 수 있습니다.
  • Spinning UP 구현에서는 MPI를 이용한 병렬화를 지원합니다.

주요 방정식

$\pi_\theta$를 파라미터 $\theta$를 가진 정책이라고 하고, $\mathcal{J}(\pi_\theta)$를 정책에서 얻을 expected finite-horizon undiscounted return이라고 정의합니다. 그렇게 해서 $\mathcal{J}(\pi_\theta)$의 gradient는 다음과 같습니다.

$$\nabla_\theta \mathcal{J}(\pi_\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left [ \sum^T_{t=0} \nabla_\theta \log \pi_\theta(a_t | s_t) A^{\pi_\theta}(s_t, a_t)\right]$$

여기서 $\tau$는 trajectory를 말하며, $A^{\pi_\theta}$는 현재 정책에 대한 advantage function입니다.

policy gradient 알고리즘은 정책 성능(performance)에 대해 stochastic gradient ascent해서 정책 파라미터를 업데이트하는 방식으로 돌아갑니다.

$$\theta_{k+1} = \theta_k + \alpha \nabla_\theta \mathcal{J}(\pi_{\theta_k})$$

policy gradient는 보통 infinite-horizon discounted return으로 advantage function을 estimate하는 식으로 구현하지만, finite-horizon undiscounted policy gradient 식으로 하는 경우도 있습니다.

탐험 vs 활용 (Exploration vs. Exploitation)

VPG는 on-policy 방법으로 확률적인 정책(stochastic policy)를 학습합니다. 근데 이 말은 곧 가장 최근의 정책을 통해 행동을 샘플링하여 탐험(explore)를 한다는 뜻입니다. 초기 조건과 학습 과정이 어떻냐에 따라 행동 선택을 랜덤하게 선택합니다. 학습하는 동안, 이미 발견한 보상에 대해서만 계속 활용(exploit)하도록 업데이트가 되다보니, 정책은 점점 랜덤하지 않게 됩니다. 결국 local optima에 빠지게 될 수도 있습니다.

의사코드

참조

관련 논문