본문 바로가기
Data Science/Reinforcement

A2C 알고리즘

by hyelog 2023. 6. 27.

A2C 알고리즘

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

M = 에피소드 개수, m = 에피소드 인덱스

$$ \nabla_\theta J(\theta) \approx \sum\limits_{t=0}^M \left[ {1 \over M} \sum\limits_{m=1}^{M} \left( \nabla_\theta log \pi_\theta(u_t^{(m)}|x_t^{(m)}) A^{\pi_\theta}(x_t^{(m)},u_t^{(m)}) \right) \right] $$

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

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

이 식을 대입해보면 다음과 같이 근사적으로 표현할 수 있는데

 

📌 하지만 이것은 뇌피셜입니다🤥
$x_{t+1}$이 1개의 값을 가진다고 가정하면 기대값이 $\gamma V^{\pi_\theta}(x_{t+1})$ 그 값 자체가 될 수 있기 때문이다.

그러나 이러한 가정은 있을 수 없는 일이므로 근사적으로 밖에 표현하지 못하는 것이다.

더 정확한 이유가 있다면 제발 알려주세요….🙏

 

$$ \begin{matrix} 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{matrix} $$

위 식을 보면, 상태가치를 얼마나 정확히 계산 하느냐에 따라 어드밴티지를 더 정확하게 도출해 낼 수 있다.

문제 해결을 위해 정책 신경망($\pi_\theta(u_t|x_t)$를 추정)과 또 다른 신경망($V_\phi(x_t) \approx V^{\pi_\theta}(x_{t+1})$를 추정)을 통해서 상태가치 함수를 근사 한다.

  • 정책 신경망은 에이전트의 행동을 결정하므로 actor
  • 가치 신경망은 그 행동을 평가하므로 critic

📌 알아두기

  • 이 두 신경망은 중첩되는 부분이 많아 결과만 다른 층을 쓰는 경우도 많다.

가치 신경망 알고리즘

$V_\phi(x_t) \approx V^{\pi_\theta}(x_{t+1})$ 를 추정하는 알고리즘을 위해 벨만 방정식을 이용한다.

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

 

$$ V^\pi(x_t) = \mathbb{E}{u_t\ \sim \ \pi(u_t|x_t)} \left[ r(x_t,u_t)+\mathbb{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})$ 로 설정해보자.

$$ Loss_{critic} = {1 \over 2}\sum_i \parallel r(x_i,u_i)+\gamma V_\phi(x_{i+1}) - V_\phi(x_i) \parallel^2 $$

정책 신경망 알고리즘

어드밴티지를 근사적으로 추정하면, 아래와 같고

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

액터 신경망의 손실 함수로는

$$ Loss_{actor}(\theta) \approx - \sum_i(log\pi_\theta(u_i|x_i)A\phi(x_i,u_i))A_\phi(x_i,u_i)) $$

를 사용하면 된다.

$$ \theta \leftarrow \theta-\alpha\nabla_\theta\sum_i -(log\pi_\theta(u_i|x_i)A_\phi(x_t,u_t)) $$

어드밴티지 함수는 $\theta$의 함수가 아니기 때문에 그래디언트 안에 포함될 수 있다.

앞에 마이너스 부호가 붙은 이유

  • 손실함수 최소화, 목적함수 최대화를 위해

손실함수의 구조를 보면,

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

📌 $CrossEntropy Loss=−log(예측값)$

 

그러므로 어드밴티지가 큰 정책의 샘플은 더 큰 영향을, 작은 정책의 샘플은 덜 영향을 받아 점진적으로 정책이 향상될 것을 기대할 수 있다.

 

이것이 바로 A2C이다!

배치 어드밴티지 A2C

정책 $\pi_{\theta_1}$을 N 시간스텝 동안 실행시켜 N개의 상태 천이 데이터 생성하여 이를 바탕으로 $\pi_{\theta_1}$에서 $\pi_{\theta_2}$로 업데이트 한다.

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

사용한 N 개의 샘플은 폐기하며, 이 과정을 일정 성능에 도달할 때까지 반복하며 학습을 진행한다.

[Process]

  1. 크리틱과 액터 신경망의 파라미터 $\phi$ 와 $\theta$를 초기화한다.
  2. $Repeat \ N \ times$ $\{$
    1. 정책 $u_i \ \sim \ \pi_\theta(u_t|x_t)$로 행동을 확률적으로 선택한다
    2. $u_i$를 실행해 보상 $r(x_i, u_i)$과 다음 상태변수 $x_{t+1}$을 측정한다.
    3. 샘플 $(x_i, u_i, r(x_i, u_i), x_{i+1})$를 저장한다.
    $\}$ # N개의 샘플 생성
  3. TD target(시간차 타겟) $y_i = r(x_i, u_i) + \gamma V_\phi(x_{i+1})$ 를 계산한다.
  4. 크리틱 신경망의 손실함수를 계산한다.
    $$ L = {1 \over 2}\sum_i(y_i - V_\phi(x_i))^2 $$
  5. 어드밴티지를 계산한다.
    $$ A_\phi(x_t,u_t) = r(x_t,u_t) + \gamma V_\phi(x_{t+1}) - V_\phi(x_t), \\ i=i, \dots, N $$
  6. 크리틱 신경망을 업데이트 한다.
    $$ \phi \leftarrow \phi + \alpha_{critic}\sum_{i=1} \left[ (y_i - V_\phi(x_i))\nabla_\phi V_\phi(x_i) \right] $$
  7. 액터 신경망을 업데이트 한다.

$$ \theta \leftarrow \theta+\alpha\nabla_\theta\sum_i (log\pi_\theta(u_i|x_i)A_\phi(x_t,u_t)) $$

온라인 학습

한 개의 상태 천이 데이터 샘플이 생성되는 즉시 신경망을 업데이트 하는 방법이다.

이산공간과 연속공간

  • 이산공간
    • 액터 신경망의 출력층 뉴런 개수 = 행동변수가 가질 수 있는 값의 개수
      • 행동변수 차원 * 행동변수가 가질 수 있는 값 개수
    • 액터 신경망의 출력 = 행동변수가 가질 수 있는 값의 확률
  • 연속공간
    • 행동변수 1개당 가질 수 있는 값이 무한개
    • 신경망의 출력 $\pi_\theta(u_t|x_t)$는 확률밀도함수
    • 그러므로 확률밀도함수를 표현하기위해 무한 개의 뉴런이 필요 → 구현가능하도록 만드려면 임의의 값이 아닌 고정된 구조가 필요하다.

댓글