Multi-task Deep Reinforcement Learning with PopArt

부제: impala에 popart를 싸서 드셔보세요

Learning values across many orders of magnitude https://arxiv.org/abs/1602.07714

Multi-task Deep Reinforcement Learning with PopArt https://arxiv.org/abs/1809.04474

소개

Atari 57과같이 여러 Task를 한 모델을 가지고 학습하는 경우를 multi-task learning이라고 한다. 각 environment 마다 입력이 다르고, 보상체계가 다르기 때문에 reward clipping을 이용하여 학습이 균일하게 이루어 지도록 하는 테크닉이 사용되고 있다. 그 방법중 하나는 reward를 z-score로 normalization 하는것인데, pop-art에서는 단순히 z-score로 바꾸는 것 뿐만 아니라, $\mu, \Sigma$의 statistic가 바뀌었을 경우, state value/action value가 불안정해져 학습을 개선하지 못하고 단순히 복잡하게 만들수 있음을 인지하고,

  • ART: $\mu, \Sigma$의 통계치 수집
    • Adaptively Rescaling Targets
  • POP: unnormalized value가 수렴하도록 조정
    • Preserving Outputs Precisely

의 두가지 단계로 나누어 학습하는 알고리즘을 제시하였다.
원 논문 “Learning values across many orders of magnitude”에서는 DQN에 적용하였고,
새 논문 “Multi-task Deep Reinforcement Learning with PopArt”는
“IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures”에 적용된 IMPALA를 개선하여, popart+impala를 이용한 알고리즘을 제시하였다.

선행 연구와 비교한 장점

  1. 전술 했듯 environment의 입력이 다르다는 multi-task learning 자체의 어려움
  2. reward가 전부 non-negative일 경우에 강화학습 알고리즘은 그 reward의 빈도(frequency)가 높아지도록 학습한다.
    • 실제로 학습해야하는 것은 보상의 합(cumulative sum)임에도 불구하고, 쉽게 갈 수 있는 길을 선호하는 경향이 있음.

value를 normalization 할 경우, 비슷한 trajectory라도 절반은 negative feedback되므로, 전체적으로 optimum으로 향하도록 조정해 주는것으로 보임. 논문에 정리된 부분은

  1. scale of rewards
    각 environment마다 보상체계가 다르고, 스케일이 다름
    ex) 스테이지를 클리어하면 +1점/1000step vs 장애물을 격파할때마다 +1점/50step

  2. sparsity of rewards
    스테이지를 클리어 하는 빈도 « 장애물을 격파할때 reward를 받는 횟수

  3. competetance of agents
    unnormalized reward의 경우자주 들어오는 environment를 학습할 확률이 더 높다. 가끔 들어오는 다른 environment의 reward때문에 전체 학습이 non-stationary해지며 학습자체가 collapse할 수도 있다.

제시 기술/방법

state value는 impala와 동일하게 v-trace target을 이용한다.

\[\begin{aligned} G_t^{\text{v-trace}}&=v(S_t)+\sum\limits_{k=t}^{t+n-1}\gamma^{k-t}\big(\prod\limits_{i=t}^{k}c_i\big)\delta_k,\\ \delta_k&=(R_t+\gamma v(S_{t+1})-v(S_t)) \end{aligned}\]
  • Value Advantage ($G_t^v$)

    \[G_t^v = G_t^{\text{v-trace}}\]
  • Policy Advantage ($G_t^\pi$)

    \[G_t^\pi = R_{t+1}+\gamma G_{t+1}^{\text{v-trace}}\]

unnormalized value estimate를 $v_{{\mu, \sigma, \theta}}(S)$,
normalized value estimate를 $n_\theta(S)$라고 한다면,

\[{\{\mu, \sigma, \theta\}}(S) = \sigma n_{\theta}(S)+\mu\]

가 성립한다.

moving average를 적용하여

\[\begin{align} \mu_t &= (1-\)\mu_{t-1}+\ G_t^v,\\ \nu_t &= (1-\)\nu_{t-1}+\ (G_t^v)^2,\\ \sigma_t &= \sqrt{\nu_t-\mu_t^2} \end{align}\]

이 식을 오랜만에 봐서 왜 그런지 5분동안 고민했는데,

\[\text{Var(X)} = E(X^2)-[E(X)]^2\]

란 사실을 통계책 보고 떠올렸다.

다음으로 normalized된 값을 이용하여 value, policy update는 다음과 같이 스케일링 할 수 있다.

  • Actor-Critic Update
    value parameter($\theta$)의 업데이트(Minimize)

    \[\left(\frac{G_t^v-\mu}{\sigma}-n_\theta(S_t) \right)\nabla_\theta n_\theta(S_t)\nabla_\theta V_\theta(x_s)\]

    policy parameter($\omega$)의 업데이트(Maxmize)

    원서에는

    \[\Delta\omega \propto \left(\frac{G_t^\pi-\mu}{\sigma}-n_\theta(S_t) \right) \nabla_\omega \log\pi_\omega(A_t|S_t)\]

    (IMPALA와의 통일성을 위해 $\eta$를 $\omega$로 변경)
    라고 적혀있는데 impala는 importance weighted TD로 볼 수 있으니,

    \[\rho_s\left(\frac{G_t^\pi-\mu}{\sigma}-n_\theta(S_t) \right)\nabla_\omega\log\pi_\omega(a_s|x_s)\]

    이렇게 바꿀수 있겠다.

  • POP-ART
    이렇게 $n_\theta$를 갱신하여도 $\mu,\sigma$는 non-trainable variable이기 때문에
    학습 전후로 같은 입력이 주어지더라도 $\mu, \sigma$의 값이 변할경우 state value가 달라져 버린다.

    이것을 조정해 주는것이 POP부분이다. 평균, 분산 통계치가 각각 $\mu\rightarrow\mu^\prime,\quad \sigma\rightarrow\sigma^\prime$으로 수정되었다고 하자, 그러면

    \[y = wx +b\]

    라고 하였을때,

    \[\begin{align} w^\prime &= \frac{\sigma}{\sigma^\prime}w,\\ b^\prime &= \frac{\sigma b +\mu - \mu^\prime}{\sigma^\prime} \end{align}\]

    으로 보정한다.

  • 순서가 메챠쿠챠!

    오리지널 POPART에서는 들어온 학습데이터를 이용하여,

    1. 평균과 분산을 구하고(ART)
    2. 마지막 q-value의 이동평균을 갱신 및 보정(POP)
    3. 모델 파라미터 업데이트

    의 순서로 업데이트를 하고있다.

    POPART-IMPALA에서는 이 순서가 뒤바뀌어있다.

    1. 평균과 분산을 구하고(ART)
    2. 모델 파라미터 업데이트
    3. 이동평균을 갱신 및 보정(POP)
  • POPART-IMPALA에 따른 파라미터 업데이트 식을 Timeline에 맞게 다시 써보면

    1. ART

      \[\begin{align} \mu_{\text{new}} &= (1-\beta) \cdot \mu_{\text{old}}+\beta \cdot G_t^v,\\ \nu_{\text{new}} &= (1-\beta)\cdot\nu_{\text{old}}+\beta \cdot (G_t^v)^2,\\ \sigma_{\text{new}} &= \sqrt{\nu_{\text{new}}-\mu_{\text{new}}^2} \end{align}\]
    2. Actor-critic update

      \[\begin{align} \Delta\theta &= \left(\frac{G_t^v-\mu_{\text{old}}}{\sigma_{\text{old}}}-n_\theta(S_t) \right)\nabla_\theta n_\theta(S_t)\nabla_\theta V_\theta(x_s),\\ \Delta\omega &= \left(\frac{G_t^\pi-\mu}{\sigma}-n_\theta(S_t) \right)\nabla_\omega\log\pi_\omega(a_s|x_s) \end{align}\]
    3. POP

      \[\begin{align} w^\prime &= \frac{\sigma}{\sigma^\prime}w,\\ b^\prime &= \frac{\sigma b +\mu - \mu^\prime}{\sigma^\prime} \end{align}\]

    1,2는 서로 독립적이기에 같은 session에서 실행시켜도 문제 없으나 3은 독립적으로 실행하여야 한다.