Just Fighting

[강화학습] A2C 알고리즘 본문

카테고리 없음

[강화학습] A2C 알고리즘

yennle 2023. 6. 27. 21:32
728x90

 

목적함수 그래디언트 계산

 

목적함수 그래디언트는 샘플링 기법을 이용하면 다음과 같이 근사적으로 계산할 수 있다.

 

\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*}

 

여기서, m은 에피소드 인덱스이며, M은 에피소드 개수다.

한 개의 에피소드만 고려하면 목적함수는 근사적으로 다음과 같다.

 

\begin{align*}
\bigtriangledown_\theta J(\theta) 

&\approx   \sum_{m=1}^{M} \left (  \bigtriangledown_\theta log \pi_\theta (u_t|x_t) A^{\pi_\theta}(x_t, u_t) \right ) \\

\end{align*}

 

 


어드밴티지 계산

 

어드밴티지를 계산하기 위해 행동가치 함수의 식을 이용한다.

두번째 식이 나오는 이유를 내 나름 생각해보자면,,

$x_{t+1}$이 나올 수 있는 값이 하나라면? 즉, 한가지 경우 밖에 없거나, 그 경우의 확률이 아주아주 크다면

기댓값이 아닌 그냥 그 값을 쓸 수 있지 않을까. 그러나 그게 아니기 때문에 $=$이 아닌 $\approx$를 쓴 것이 아닐까라는 나으 궁예,,

 

$$Q^\pi(x_t, u_t) = r(x_t, u_t)+E_{x_{t+1}\sim p(x_{t+1}|x_t,u_t)} \left [ \gamma V^\pi (x_{t+1}) \right ]$$

 

\begin{align*}
A^{\pi_\theta}(x_t,u_t) &= Q^{\pi_\theta}(x_t,u_t) - V^{\pi_\theta}(x_t) \\

&\approx r(x_t, u_t) + \gamma V^{\pi_\theta}(x_{t+1}) - V^{\pi_\theta}(x_{t})

\end{align*}

 


 

따라서, 이제 상태가치를 정확하게 예측하면 된다. 신경망을 사용해서.

정책 신경망은 $\pi_\theta (u_t|x_t)$를 추정하고 가치 신경망은 $\phi$로 파라미터화 된 가치함수 $V_\phi (x_t) \approx V^{\pi_\theta} (x_t)$를 추정한다.

 

정책 신경망은 에이전트가 어떻게 행동해야 하는지 알려주므액터(actor) 신경망이라고 하며,

가치 신경망은 그 행동을 평가하기 때문에 크리틱(critic) 신경망이라고 한다.

두 개의 신경망을 분리해서 쓰기도 하지만,

실제로 두 개의 신경망이 중첩되는 부분이 많아 공통의 신경망을 쓰고, 출력만 다른 층을 사용하는 경우도 있다.


가치함수를 근사하는 $V_\phi (x_t) \approx V^{\pi_\theta} (x_t)$를 구하는 알고리즘을 구하기 위해서는 벨만 방정식을 사용한다.

벨만 방정식에 의하면, 현재 상태와 다음 상태의 가치함수가 다음과 같은 관계가 있다.

 

$$V^\pi(x_t) = E_{u_t \sim \pi(u_t|x_t)} \left [ r(x_t, u_t)+E_{x_{t+1}\sim p(x_{t+1}|x_t,u_t)} \left [ \gamma V^\pi (x_{t+1}) \right ] \right ]$$

 

따라서, 가치함수를 근사하는 함수 $V_\phi (x_t)$는 다음과 같이 근사적으로 추정할 수 있다.

 

$$V_\phi(x_t) \approx  r(x_t, u_t)+ \gamma V_\phi (x_{t+1}) $$

 

시간차 타깃(TD target)을 $y_i = r(x_i, u_i)+\gamma V_\phi(x_{i+1})$로 설정하면,

다음 손실함수가 최소가 되도록 근사 가치함수 $V_\phi(x_t)$를 추정할 수 있다.

(실제값 - 추정값) 

 

$$Loss_{critic}(\phi) = \frac {1} {2} \sum_{i} \left\| r(x_i,u_i) + \gamma V_\phi(x_{i+1})-V_\phi (x_i) \right\|^2$$

 

여기서 $(x_i, u_i, r(x_i,u_i), x_{i+1})$은 상태 천이 데이터이며, 일정 시간 스텝 $N$동안 모으면 샘플의 개수는 $N$개가 된다.

어드밴티지도 다음과 같이 근사적으로 계산할 수 있다.

 

$$A_\phi (x_i,u_i) \approx r(x_i, u_i) + \gamma V_\phi (x_{i+1}) - V_\phi (x_{i})$$

 


액터 신경망의 손실함수

 

액터 신경망의 손실함수로는 아래 식을 사용한다.

 

$$Loss_{critic}(\phi) \approx - \sum_i  \left ( log \pi_\theta(u_i|x_i)A_\phi (x_i,u_i) \right )$$

 

$$\theta \leftarrow \theta - \alpha\bigtriangledown_{\theta} \sum_i  \left ( log \pi_\theta(u_i|x_i)A_\phi (x_i,u_i) \right )$$

 

여기서 $A_\phi(x_i, u_i)$는 $\theta$의 함수가 아니기 때문에 그래디언트 $\bigtriangledown_\theta[ \cdot ]$안에 포함될 수 있다.

앞의 마이너스 부호는 목적함수를 최대로 하기 위함이다.

손실함수의 구조는 이진분류 문제에서 사용하는 참값이 1인 교차엔트로피에 어드밴티지를 곱한 형태다.

따라서 어드밴티지가 큰 정책의 샘플은 그래디언트 계산 시 더 큰 영향을 미치며, 어드밴티지가 작은 정책의 샘플은 덜 영향을 미친다.

그렇게 되면, 점진적으로 정책이 향상되는 것을 기대할 수 있다.

 


액터 - 크리틱 알고리즘

 

1. 크리틱과 액터 신경망의 파라미터 $\phi$, $\theta$ 초기화

2. 반복

    2-1. 반복

        2-1-1. 정책 $u_i \sim \phi_\theta(u_i|x_i)$으로 행동을 확률적으로 선택

        2-1-2. $u_i$를 실행해 보상 $r(x_i,u_i)$과 다음 상태변수 $x_{i+1}$ 측정

        2-1-3. 샘플 $(x_i, u_i, r(x_i,u_i), x_{i+1})$ 저장

    2-2. 시간차 타깃 계산

    2-3. 크리틱 신경망 손실함수 계산

    2-4. 어드밴티지 계산

    2-5. 크리틱 신경망 업데이트

$$\phi \leftarrow \phi +\alpha_{actor} \sum_i \left [ (y_i - V_\phi (x_i)) \bigtriangledown_{\theta} V_\phi (x_i) \right ]$$

    2-6. 액터 신경망 업데이트

$$\theta \leftarrow \theta - \alpha\bigtriangledown_{\theta} \sum_i  \left ( log \pi_\theta(u_i|x_i)A_\phi (x_i,u_i) \right )$$

 

 

 

 

 

[참고]

박성수, 「수학으로 풀어보는 강화학습 원리와 알고리즘」, 위키북스(2020)

https://pasus.tistory.com/122

 

 

728x90
Comments