Udacity Deep RL Nanodegree — Policy Based Methods

Policy-Based Methods

이전까지 우리는 state가 주어질 때 action의 가치(기대보상)을 판단하고 그 중에서 정책에 따라(Q-Learning, Expected Sarsa 같은) action을 선택했다. 하지만 Policy-Based Methods는 action value를 판단하지 않고 state가 주어질 때 곧바로 action을 선택하는 방법이다. 즉 Action Value를 예측하지 않고 최적의 Action의 확률을 예측한다.

action이 이산적이라면(예: 가위바위보) softmax를 이용한 다음 가장 높은 값을 출력하고, 만약 연속적인 값이라면(예: 로봇의 각 관절에 가해지는 힘) tanh같은 활성화함수를 사용한다. (결정적)

Gradient Ascent(Hill Climbing)

딥러닝에서 사용하는 Gradient Descent(경사하강법)과는 반대이다. 이는 일반적인 신경망은 prediction loss를 0으로 최대한 줄이는 것을 목표로 하지만, 강화학습은 Reward를 최대한으로 하는 것을 원하기 때문이다. 딥러닝과 마찬가지로 Local Maximum의 문제가 나타날 수 있다.

Image for post
gradient ascent 가중치 갱신 수식, g는 expected reward를 theta로 미분

gradient ascent를 이용해서 가중치를 갱신하는 방법을 Policy Gradient Method라고 한다. Gradient Ascent 외에도 가중치를 갱신하는 여러 방법이 있지만 아무래도 주로 다루게 되는건 Gradient Ascent이다.

장점

  1. 간단하다
  2. 확률기반의 정책이 필요할때 좋다
  3. 연속적인 공간에서 사용 가능하다.

The Big Picture

우리의 목표는 state에서 좋은 reward를 주는 action은 더 높은 확률이 나오고, 나쁜 reward를 주는 action의 확률은 낮아지도록 모델을 만드는 것이다. 한 에피소드에서 겪은 states, actions를 모두 모아서 trajectory라고 하고 그리스문자 τ(tau)로 표시한다. 이 때 우리의 목표는 아래의 식으로 표현되는 expected return U(θ)을 가장 큰 값으로 만들어줄 weight인 θ를 찾는 것이다. U(θ)는 곧 objective function이다

Image for post

위 식에서 R(τ)는 에피소드의 보상의 총합이다. P(τ; θ)는 trajectory 내의 모든 state, action 이 policy θ내에서 발생할 확률의 곱이다. 가중치 갱신이 한 에피소드를 다 진행한 뒤에(1 trajectory마다) 이루어지면 이것을 REINFORCE method라고 한다.

Beyond Reinforce

REINFORCE Method의 단점

  1. 비효율적이다: policy를 한번 실행하고, 갱신하고, trajectory는 버린다
  2. gradient가 noisy하다. 우연히 수집된 trajectory가 정책과는 무관할 수 있다.
  3. 명확하게 신용할 수 없다(no clear credit assignment): trajectory 중간에는 잘못된 선택도 있을텐데, 오직 최종 output만을 갖고 평가를 한다. 때문에 잘못된 action도 좋은 reward로 평가받는다

Noise Reduction

noise를 줄이는 방법

  1. 하나의 trajectory만 갖고 가중치를 갱신하지 말고, 동시에 여러 trajectory를 만든 다음(여러 에피소드를 진행해본 다음) 이들의 평균으로 가중치를 갱신하자.
  2. objective function을 계산할 때, 각 trajectory의 reward는 reward간의 정규화된 값을 이용하자. 왜냐면 예를 들어 1이라는 보상이 좋아보이지만, 전체 episode를 봤을 때 그저그런 보상이거나 정말 좋은 보상일 수 있다. 이것을 분포로 파악할 수 있게 한다.
Image for post
여러 trajectory 를 이용한 objective function의 미분식
Image for post
Reward Normalization, 이는 Batch Normalization의 원리와 같다.

normalization은 결과적으로 보상을 좋은 보상/나쁜 보상으로 나누고, 보상 값이 너무 크거나 작지 않도록 만들어준다.

Credit Assignment

Markov Process에서 현재의 선택은 오직 미래의 보상만 관련이 있을 뿐, 현재의 선택이 과거의 보상을 바꾸지는 않는다. 즉 action의 가치는 미래 보상의 합이되어야 한다. 하지만 위 Objective function은 모든 보상의 합이므로 특정 action의 과거의 보상까지 합쳐져있다. 따라서 action의 미래보상의 합만을 적용해야한다.

Image for post

Importance Sampling

학습이 끝난 후 trajectory는 버려진다. 새로운 policy로 갱신되어도 이들을 재사용할 수는 없을까? 즉 식에서 old policy의 확률을 new policy에서 바뀐 확률만큼의 가중치로 바꿔주는 것이다.

Image for post
원래 trajectory에서 이렇게 구해야하는건데
Image for post
분모/분자에 old policy확률을 곱해서 같은 식이지만 약간 다른 느낌으로 바꿀 수 있다.

자 만약 새로운 policy π`를 얻었는데 trajectory는 old policy π의 것밖에 없다고 한다면 아래의 식을 이용해서 new policy의 trajectory로 바꿀 수 있다.

Image for post

이 식을 단순하게 바꿀 수 있는데…

Image for post
Image for post
Image for post

결과적으로 위처럼 줄일 수 있고 미분기호만 떼서 이를 아래처럼 Surrogate Function(대리함수?)라고 부른다.

Image for post

하지만 너무 오래된 trajectory를 계속 재사용하면 나중에는 new policy와의 차이가 너무 커지게됨. 그리고 new policy πθ`와 πθ간의 차이가 너무 커지면 나눗셈의 결과가 inf가 되거나 0에 가깝게 될 수도 있어서 이를 보정해줘야 한다.

Image for post
Image for post

때문에 이를 위처럼 일정 범위 내로 clip해준다면 보다 안정적임(clipped surrogate function). 이제 이것을 Proximal Policy Optimization을 소개

  1. θ`, θ를 동일하게 초기화
  2. clipped surrogate function을 이용해서 θ` 가중치 갱신
  3. 보통 2–3 차례 반복
  4. θ에 θ`을 저장해서 동일하게 하고 다시 1로 돌아감

OpenAI 논문

리뷰

ㅜㅠㅠ 다시 수식 정리해봐야겠다. PPO가 잘 이해가 안간다.

근데 아직 actor-critic methods 남았다..

Written by

2020.12.8 ~ 2022.6.9 군복무중 Serving in the South Korean Military Service

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store