“바닥부터 배우는 강화학습”(저자 Github) 책을 읽으면서 정리하고자 합니다.

바닥부터 배우는 강화학습

Chapter 9. 정책 기반 에이전트

9.1 Policy Gradient

  • 정책 기반 에이전트가 필요한 이유?
    • 가치 기반 에이전트는 결정론적 정책이지만 정책 기반 에이전트는 확률적 정책으로 좀 더 유연한 정책이다.
    • 액션공간이 연속적인 경우 정책 기반 에이전트는 𝝿(s)가 주어져 있다면 바로 액션을 뽑아줄 수 있다.
    • 환경 자체가 변하는 경우에도 더 유연하게 대처할 수 있다.
  • 정책 네트워크를 강화하는 목적
    • MDP 정보를 모르는 모델 프리 상황
    • 커다란 문제여서 테이블에 값을 담을 수 없어서 뉴럴넷이 꼭 필요한 상황
    • 뉴럴넷을 이용하여 필요한 정책을 강화 하는것이 목적이다.

[목적 함수 정하기]

  • 정책 네트워크
    \(\pi_{\theta}(s, a)\)

    • θ는 정책 네트워크 파라미터

    • 𝝿(s,a)를 계속해서 강화하는 것이 목적이다.

      𝝿(s,a)의 손실 함수를 어떻게 정의할까?

    • 손실 함수가 정의되어야 이를 줄이는 방법으로 파라미터를 업데이트할 수 있다.

      • 밸류를 학습할 때는 정답지를 MC와 TD 기법으로 구했지만 정책 함수의 정답을 구하는 방법은 막연하다.

      • 정책 함수의 정답이 곧 최적 정책인데, 최적 정책을 알 수가 없다.

    • 손실 함수를 줄이는 방향이 아니라, 정책을 평가하는 기준을 세워서 그 값을 증가시키도록 하자.

  • 평가 함수 J(θ)

    • 𝝿를 인풋으로 받아 점수를 리턴하는 함수

    • 함수의 값을 증가시키는 방향으로 그라디언트 어센트하자

    • 보상의 합에 기댓값을 취한 것이 곧 J(θ)
      \(J(\theta) = E_{\pi_{\theta}}\left [\sum_{t}r_{t}\right ]=v_{\pi_{\theta}}(s_{0})\)

    • 즉, J(θ)는 S0의 밸류

    • 그러나 시작하는 상태가 항상 고정된 것이 아니기 때문에 확률분포 d(s)를 사용한다.
      \(J(\theta) = \sum_{s\in S}d(s)*v_{\pi_{\theta}(s)}\)

  • 그라디언트 어센트

    • 목적 함수를 최대화하기 위해 그라디언트 방향으로 파라미터 업데이트하자.
      \(\theta' \leftarrow \theta + \alpha*\triangledown_{\theta}J_{\theta}\)


  • 따라서 우리의 목적은 \(\triangledown_{\theta}J_{\theta}\) 를 구하는 것이다.

[1-Step MDP]
\(\begin{align*} &\quad J(\theta) = \sum_{s\in S}d(s)*v_{\pi_{\theta}(s)} \\ &\qquad\quad = \sum_{s\in S}d(s)*\sum_{a\in A}\pi_{\theta}(s,a)*R_{s,a} \end{align*}\)

  • R을 모르기 때문에 계산할 수가 없다.
    \(\begin{align*} &\quad \triangledown_{\theta}J(\theta) = \sum_{s\in S}d(s)*\sum_{a\in A}\pi_{\theta}(s,a)\triangledown_{\theta}log\pi_{\theta}(s,a)*R_{s,a} \\ &\qquad\quad = E_{\pi_{\theta}}[\triangledown_{\theta}log\pi_{\theta}(s,a)*R_{s,a}] \end{align*}\)


  • 즉, \(R_{s,a}\) 는 s에서 a를 선택하고 얻는 보상을 관측하면 되고 이 값을 여러 번 모아 평균을 내면, 그 평균이 곧 \(\triangledown_{\theta}J_{\theta}\) 와 같다.

  • 기댓값 연산자를 이용한 샘플 기반 방법론의 힘이며
    \(\triangledown_{\theta}log\pi_{\theta}(s,a)*R_{s,a}\) 이 식만 계산하면 끝이다.

[일반적 MDP에서의 Policy Gradient]

Policy Gradient Theorem
\(\triangledown_{\theta}J(\theta) = E_{\pi_{\theta}}[\triangledown_{\theta}log\pi_{\theta}(s,a)*Q_{\pi_{\theta}}(s,a)]\)

  • R이 Q로 바뀐 것

    s에서 a를 할 때 받는 보상 대신 s에서 a를 할 떄 얻는 리턴의 기댓값으로 바뀐 것이다.

    한 스텝만 밟고 MDP가 종료되는 것이 아니기 때문에 이후에 받을 보상까지 더해주는 개념

  • policy gradient는 J(θ)에 대한 그리다이언트이며 𝝿(s,a)가 경험한 데이터를 기반으로 계산할 수 있게 해주는 방법론이다.

9.2 REINFORCE 알고리즘

[이론적 배경]
\(\triangledown_{\theta}J(\theta) = E_{\pi_{\theta}}[\triangledown_{\theta}log\pi_{\theta}(s,a)*G_{t}]\)

  • Gt는 편향되지 않는 샘플, 즉 Gt의 샘플을 여러 개 얻어서 평균을 내면 그 값이 실제 액션밸류인 Q(s,a)에 근사해진다.

  • 수도코드

9.3 액터-크리틱

액터 크리틱 방법은 정책 네트워크와 밸류 네트워크를 함께 학습하는 방법이며

Q 액터-크리틱, 어드밴티지 액터-크리틱, TD 액터-크리틱

총 세가지 방법론을 살펴보려 한다.

[Q 액터-크리틱]
\(\triangledown_{\theta}J(\theta) = E_{\pi_{\theta}}[\triangledown_{\theta}log\pi_{\theta}(s,a)*Q_{\pi_{\theta}}(s,a)]\)

  • Q(s,a)를 사용하면 Q 액터-크리틱
  • 𝝿는 실행할때 액션 a를 선택하는 액터 역할
  • Qw는 선택된 액션 a의 밸류를 평가하는 크리틱 역할
  • 즉, 정책 𝝿와 밸류 Q를 모두 학습하는 방식을 액터-크리틱이라고 한다.

[어드밴티지 액터-크리틱]

  • 샘플을 무한히 많이 모아서 계산하면 분명 올바른 그라디언트 값을 계산해 주겠지만 과연 효율적인가? 하는 부분에서 의문을 제기할 수 있다.

  • 상태 s에 있는 것보다 액션 a를 실행함으로써 추가로 얼마나 가치를 더 얻게 되느냐를 생각해보자

  • 이 값을 어드밴티지라고 한다.

    \(A_{\pi_{\theta}}(s,a) = Q_{\pi_{\theta}}(s,a) - V_{\pi_{\theta}}(s)\)

  • V를 기저라고한다.

  • 어드밴티지 A를 곱해줌으로써 그라디언트 추정치의 변동성이 작아져 학습 성능 향상에 도움이 된다.

  • 즉, 분산을 상당히 개선시킬 수 있다.

  • 그러나, Value 함수와 Action Value 함수 모두 근사화를 해야하는 단점이 있다.

[TD 액터-크리틱]

  • 가치 함수 V(s)의 TD 에러 δ
    \(\delta = r + \gamma V(s') - V(s)\)

  • TD 에러인 δ의 기댓값 = 어드밴티지 A(s, a)

    다른 말로 A(s,a)의 불편 추정량(unbiased estimate)

  • policy gradient 수식
    \(\triangledown_{\theta}J(\theta) = E_{\pi_{\theta}}[\triangledown_{\theta}log\pi_{\theta}(s,a)*\delta]\)

Summary of Policy Gradient Algorithms