Just Fighting
[강화학습] A2C 본문
< A2C >
A2C(advantage actor-critrc)은 정책을 업데이트하기 위해서 에피소드가 끝날 때까지 기다려야 하며, 그래디언트의 분산이 매우 크다는
REINFORCE의 단점을 개선한 알고리즘이다. (살짝 개선한 것이지만 성능은 뛰어나다고 함!)
< 그래디언트의 재구성 >
\begin{align*}
\bigtriangledown_\theta J(\theta) &= E_{\tau\sim p_\theta(\tau)}\left [ \sum_{t=0}^{T}\left ( \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t)\left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) \right ) \right ] \\
&= \sum_{t=0}^{T} \left \{ E_{\tau\sim p_\theta(\tau)}\left [ \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t)\left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) \right ] \right \}
\end{align*}
위 식은 REINFORCE 알고리즘의 그래디언트이다.(REINFORCE 추후 작성 예정ㅎㅎ)
두 번째 줄의 소괄호 항은 시간 스텝 $k=t$부터 에피소드가 종료될 때까지 받을 수 있는 감가된 예정 보상(reward-to-go)의 총합인 반환값 $\sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k)$이다.
궤적 $\tau$를 시간스텝 $t$를 기준으로 두개의 영역으로 분할한다.
$$\tau = \tau_{x_0:u_t}\cup \tau_{x_{t+1}:u_T}$$
그렇다면 목적함수의 그래디언트는 다음과 같이 표현할 수 있다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&= \sum_{t=0}^{T} \int_{\tau_{x_0:u_t}}^{} \int_{\tau_{x_{t+1}:u_T}}^{} \left ( \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t)\left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) \right ) p_\theta(\tau_{x_0:u_t}, \tau_{x_{t+1}:u_T})d\tau_{x_{t+1}:u_T} d\tau_{x_0:u_t} \\
&= \sum_{t=0}^{T} \int_{\tau_{x_0:u_t}}^{} \int_{\tau_{x_{t+1}:u_T}}^{} \left ( \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t)\left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) \right ) p_\theta( \tau_{x_{t+1}:u_T}|\tau_{x_0:u_t})p(\tau_{x_0:u_t})d\tau_{x_{t+1}:u_T} d\tau_{x_0:u_t} \\
&= \sum_{t=0}^{T} \int_{\tau_{x_0:u_t}}^{} \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t) \left [ \int_{\tau_{x_{t+1}:u_T}}^{} \left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) p_\theta( \tau_{x_{t+1}:u_T}|\tau_{x_0:u_t})d\tau_{x_{t+1}:u_T} \right ] p(\tau_{x_0:u_t}) d\tau_{x_0:u_t}
\end{align*}
위의 식에서 대괄호 항은 마르코프 가정에 의해서 행동가치 함수가 된다.
\begin{align*}
& \int_{\tau_{x_{t+1}:u_T}}^{} \left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) p_\theta( \tau_{x_{t+1}:u_T}|\tau_{x_0:u_t})d\tau_{x_{t+1}:u_T} \\
&= \int_{\tau_{x_{t+1}:u_T}}^{} \left ( \sum_{k=t}^{T} \gamma^{k-t}r(x_k, u_k) \right ) p_\theta( \tau_{x_{t+1}:u_T}|x_t,u_t)d\tau_{x_{t+1}:u_T} \\
&= Q^{\pi_\theta}(x_t, u_t)
\end{align*}
이 식을 위에 대입하면
\begin{align*}
\bigtriangledown_\theta J(\theta)
&= \sum_{t=0}^{T} \int_{\tau_{x_0:u_t}}^{} \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) p_\theta (\tau_{x_0:u_t}) d\tau_{x_0:u_t} \\
&= \sum_{t=0}^{T} \left( \int_{x_t,u_t}^{} \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) p_\theta (x_t, u_t) dx_t du_t \right )
\end{align*}
여기서 $p_\theta(x_t, u_t)$는 $(x_t, u_t)$의 한계확률밀도함수이다.
확률의 연쇄 법칙을 적용하면 다음과 같다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&= \sum_{t=0}^{T} \left ( \int_{x_0:u_t}^{} \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) \pi_\theta (u_t| x_t) p_\theta(x_t)] dx_t du_t \right ) \\
&= \sum_{t=0}^{T} \left ( E_{x_t \sim p_\theta(x_t), u_t \sim \pi_\theta (u_t|x_t)} \left [ \gamma^t \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) \right ] \right ) \\
&= \sum_{t=0}^{T} \left ( E_{x_t \sim p_\theta(x_t), u_t \sim \pi_\theta (u_t|x_t)} \left [ \bigtriangledown_\theta log \pi_\theta (u_t|x_t) Q^{\pi_\theta}(x_t, u_t) \right ] \right )
\end{align*}
여기서 $d_\theta(x_t) = \gamma^t p_\theta(x_t)$를 상태변수 $x_t$의 감가된 확률밀도함수라고 한다.
감가율은 에피소드 후반부 궤적에 있는 데이터의 이용도를 크게 떨어트리는 단점이 있어, 일반적으로는 제거한다.
그러면 $d_\theta(x_t) = p_\theta(x_t)$이 된다.
이제 목적함수의 그래디언트를 계산하기 위해서 행동가치를 계산하면 된다.
행동가치는 상태변수 $x_t$에서 행동 $u_t$를 선택하고 그로부터 정책 $\pi$에 의해 행동이 가해졌을 때 기대할 수 있는 미래의 반환값으로서, 정책이 실현되는 시간스텝 $t$에서의 기댓값이기 때문에 목적함수의 그래디언트를 계산할 때 에피소드가 끝날때까지 기다릴 필요가 없다.
[출처]
박성수, 「수학으로 풀어보는 강화학습 원리와 알고리즘」, 위키북스(2020)