Just Fighting
[강화학습] A3C의 개념 본문
앞서 어드밴티지 액터-크리틱(A2C) 알고리즘에 대해 다뤘다.
A2C 알고치즘은 에피소드가 끝날 때까지 기다릴 필요 없이 샘플이 모이면 정책을 업데이트하고, 그래디언트의 분산을 줄였다.
그러나, A2C의 문제점은 샘플이 시간적으로 상관되어 있다는 것이다.
샘플 간의 높은 상관관계는 목적함수의 그래디언트를 편향시키고, 학습을 불안정하게 만들 수 있다.
또한, 학습 배치에 있는 서로 유사한 데이터는 신경망을 비슷한 방향으로 업데이트하게 된다.
위와 같은 문제점을 개선하기 위해 비동기 A2C(A3C, asynchronous advantage actor-critic) 알고리즘에 대해 공부한다.
샘플의 상관관계
어드밴티지 액터-크리틱에서 사용한 목적함수의 그래디언트 식은 다음과 같다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&= \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) A^{\pi_\theta}(x_t, u_t) \right ] \right ) \\
\end{align*}
샘플링 기법을 이용하면 목적함수 그래디언트를 다음과 같이 근사적으로 계산할 수 있다.
아래 식에서 $m$은 에피소드 인덱스며, $M$은 에피소드 개수다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&\approx \sum_{t=0}^{T} \left( \frac{1}{M} \sum_{m=1}^{M} \left ( \bigtriangledown_\theta log \pi_\theta (u_t^{(m)}|x_t^{(m)}) A^{\pi_\theta}(x_t^{(m)}, u_t^{(m)}) \right ) \right ) \\
\end{align*}
한 개의 에피소드만 고려하면 목적함수 그래디언트를 아래와 같이 표현할 수 있다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&\approx \sum_{t=0}^{T} \left( \bigtriangledown_\theta log \pi_\theta (u_t|x_t) A^{\pi_\theta}(x_t, u_t) \right ) \\
\end{align*}
배치 경사상승법(batch gradient ascent)으로 액터 신경망을 업데이트 하려면
액터 신경망 파라미터 $\theta$를 반복 계산해야 한다.
아래 식 반복 !
\begin{align*}
\theta \leftarrow \theta +
\alpha \sum_{t=0}^{T} \left( \bigtriangledown_\theta log \pi_\theta (u_t|x_t) A^{\pi_\theta}(x_t, u_t) \right ) \\
\end{align*}
일반적인 미니배치 데이터로 업데이트 하려면 무작위로 배치의 데이터를 섞은 후 액터 신경망 파라미터 $\theta$를 반복 계산해야 한다.
for i in range(0, T//N):
for j in range(0, N-1):
\begin{align*}
\theta \leftarrow \theta +
\alpha \sum_{t=i}^{i+N-1} \left( \bigtriangledown_\theta log \pi_\theta (u_t|x_t) A^{\pi_\theta}(x_t, u_t) \right ) \\
\end{align*}
off-policy VS on-policy
확률적 경사하강법을 이용한 최적화 방법의 기본 가정은 학습 데이터가 독립적이고 동일한 분포(iid)를 가진 샘플이여야 한다는 것이다.
그러나, A2C에 사용되는 데이터는 독립적이지 않다.
에이전트가 환경과 상호작용하면서 순차적으로 데이터를 얻기 때문이다.
따라서, 일정 시간 스텝 $N$동안 수집한 $N$개의 샘플은 순차적인 데이터이므로 강한 상관관계가 있다고 할 수 있다.
또한, 동일한 분포를 가졌다고도 할 수 없다.
액터 신경망의 파라미터를 업데이트하여 새로운 정책으로 얻은 데이터는 이전과 다른 확률분포를 가질 것이기 때문이다.
따라서, 강화학습에서 얻는 데이터는 독립적이고 동일한 분포(iid)라는 가정을 충족시키기 어렵다.
이러한 문제를 해결하기 위해 DQN은 데이터를 바로 학습에 사용하지 않고 리플레이 버퍼에 저장해두고,
데이터가 어느정도 모이면 버퍼에서 무작위로 데이터를 꺼내 학습에 이용한다.
무작위로 데이터를 뽑으면 순차적인 데이터로 구성되지 않아 데이터 사이의 상관관계가 줄어든다.
또한, 버퍼가 차면 오래된 데이터를 먼저 제거하는 방식을 이용해 최근의 정책으로 생긴 데이터 위주로 학습이 진행된다.
그러나, 리플레이 버퍼를 이용해 학습을 할 수 있는 이유는 DQN이 off-policy 방법이기 때문이다.
A2C는 on-policy 방법이기 대문에 리플레이 버퍼를 사용할 수 없다.
on-policy 방법은 다른 정책으로 만든 데이터를 이용해 현재의 정책을 업데이트할 수 없기 때문이다.
A2C에서 데이터 간의 상관관계를 줄이기 위해서 샘플링 기법을 이용한 목적함수 그래디언트 근사식을 다시 보자.
그래디언트를 계산하기 위해서는 동일한 정책 $\pi_\theta$로 여러 개의 독립적인 에피소드를 발생시킨 후 각각의 에피소드에서 일정 시간스텝 동안의 데이터로 로그-정책 그래디언트와 어드밴티지의 곱을 계산해 모두 더하고 에피소드 평균을 내면 된다.
\begin{align*}
\bigtriangledown_\theta J(\theta)
&\approx \sum_{t=0}^{T} \left( \frac{1}{M} \sum_{m=1}^{M} \left ( \bigtriangledown_\theta log \pi_\theta (u_t^{(m)}|x_t^{(m)}) A^{\pi_\theta}(x_t^{(m)}, u_t^{(m)}) \right ) \right ) \\
&= \frac{1}{M} \sum_{m=1}^{M} \sum_{t=0}^{T} \left ( \bigtriangledown_\theta log \pi_\theta (u_t^{(m)}|x_t^{(m)}) A^{\pi_\theta}(x_t^{(m)}, u_t^{(m)}) \right ) \\
&\approx \frac{1}{M} \sum_{m=1}^{M} \sum_{i=t}^{i+N-1} \left ( \bigtriangledown_\theta log \pi_\theta (u_i^{(m)}|x_i^{(m)}) A^{\pi_\theta}(x_i^{(m)}, u_i^{(m)}) \right ) \\
\end{align*}
다중 에이전트를 병렬적으로 운용하여 각 에이전트가 각자 독립적인 환경과 상호작용하면서 데이터를 수집하면,
각각의 에이전트가 서로 다른 상태와 보상, 상태천이 등을 경험하면서 데이터를 모으기 때문에
학습데이터의 연관성을 깰 수 있다.
비동기 액터-크리틱
비동기 액터-크리틱에서는 글로벌 신경망과 워커(worker)라고 불리는 여러 개의 에이전트가 존재한다.
글로벌 신경망과 워커는 각자의 액터 신경망과 크리틱 신경망을 갖는다.
워커가 일정 시간 수집한 정보를 글로벌 신경망에 전달하면 글로벌 신경망은 자신의 액터와 크리틱 신경망을 업데이트하고,
업데이트된 신경망 파라미터를 해당 워커에 복사한다.
이 프로세스를 모든 워커가 한번에 수행하는 것이 아니고, 각자의 시간에 비동기적으로 수행한다.
비동기 액터 크리틱의 두가지 방식
[ 1 ]
워커가 수집한 N개의 샘플로 자신의 그래디언트를 계산하고, 그 결과를 글로벌 신경망에 전달하면
글로벌 신경망이 이를 이용해 자신의 신경망을 업데이트하고 업데이트된 신경망을 에이전트에 복사한다.
이를 그래디언트 병렬화(gradient parallelism)이라고 한다.
[ 2 ]
워커가 N개의 샘플을 글로벌 신경망에 전달하면
글로벌 신경망이 이 데이터를 이용해 목적함수 그래디언트를 계산 후 자신의 신경망 업데이트하고
업데이트된 신경망을 에이전트에 복사하는 방식
이를 데이터 병렬화(data parallelism)라고 한다.
[출처]
박성수, 「수학으로 풀어보는 강화학습 원리와 알고리즘」, 위키북스(2020)