[RL] 7. Policy Gradient method: REINFORCE, Baseline, Actor-Critic

2024. 4. 30. 17:24RL

지금까지 배운 기법(DP, MC, TD)은 모두 가치 기반 기법(value-based method)이다.

가치 기반 기법은 가치 함수를 모델링하고 가치 함수를 학습한다. 그리고 가치 함수를 경유하여 정책을 얻는다.

참고로, 가치 기반 기법에서는 "일반화한 정책 반복"으로 최적 정책을 찾는 경우가 많다.

 

이번 글에서는 정책 경사법(policy gradient method)에 기반한 다양한 알고리즘에 대해 알아볼 것이다.

The simplest policy gradient method

정책 경사법은 기울기를 이용하여 정책을 갱신하는 기법들의 총칭이다.

우선 가장 간단한 정책 경사법을 도출해보자.

 

DNN으로 $\pi(a|s)$ 표현

우선, 정책 $\pi(a|s)$를 신경망으로 모델링한다.

이때, 상태를 입력으로 받으면 모든 행동 선택 확률을 반환하는 신경망 구조를 일반적으로 많이 사용한다.

이렇게 정책을 모델링한 신경망을 정책 신경망이라 부르고, 이를 $\pi_\theta(a|s)$로 표기한다.

 

목적 함수(손실 함수)

목적 함수를 설정하기 전, 문제 설정을 명확히 하자.

일회성 과제이고, 에이전트는 정책 $\pi_\theta$에 따라 행동한다고 하자.

그리고, 경험을 통해 다음과 같이 시계얼 데이터를 얻는다고 가정하자.

$$\tau = (S_0, A_0, R_0, S_1, A_1, R_1, \cdots, S_{T+1})$$

이때, 수익은 모든 보상에 할인율을 적용해 합한 것으로 다음과 같이 표현할 수 있다.

$$G(\tau) = R_0 + \gamma R_1 + \gamma^2 R_2 + \cdots + \gamma^T R_T$$

 

우리의 목표는 수익이 최대가 되는 정책을 갖는 것이므로, 목적 함수를 다음과 같이 표현할 수 있다.

$$J(\theta) = \mathbb E_{\tau \sim \pi_{\theta}}[G(\tau)]$$

수익 $G(\tau)$는 확률적으로 변하기 때문에 그 기댓값이 목표 함수가 된다.

그리고, 시계열 데이터 $\tau$가 정책 $\pi_\theta$로부터 생성되기 때문에 $\mathbb E$ 첨자로 $\tau \sim \pi_\theta$가 붙었다.

물론, $\tau$의 생성 과정에는 정책 $\pi_\theta$ 외에도 환경의 상태 전이 확률 $\mathcal P_{ss^\prime}^a$과 보상 함수 $R_s^a$도 관여한다.

하지만 우리가 통제할 수 있는 요인은 에이전트 정책이기 때문에 $\tau \sim \pi_\theta$로 표기했다.

 

기울기

매개변수 $\theta$에 대한 $J(\theta)$의 기울기는 다음과 같다.

$$\begin{matrix} \nabla_\theta J(\theta) &=& \nabla_\theta \mathbb E_{\tau \sim \pi_\theta} [G(\tau)] \\ &=& \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T G(\tau) \nabla_\theta \log \pi_\theta(A_t|S_t)\right] \end{matrix}$$

 

$\nabla_\theta J(\theta)$는 $\tau$의 기댓값으로 표현된다.

이 기댓값은 몬테카를로법(=샘플링을 여러 번하여 평균을 구하는 방법)으로 구할 수 있다. 

구체적으로, 정책 $\pi_\theta$에 따라 에피소드를 n번 수행하여 n개의 $\tau$를 얻어 구할 수 있다. 이를 수식으로 표현하면 다음과 같다.

$$x^{(i)} = \sum_{i=0}^T G(\tau^{(i)}) \nabla_\theta \log \pi_\theta(A_t^{(i)}|S_t^{(i)}), \quad (\tau^{(i)} \sim \pi_\theta, \ (i = 1, 2, \cdots, n))$$

$$\nabla_\theta J(\theta) \simeq {x^{(1)} + x^{(2)} + \cdots + x^{(n)} \over n}$$

 

샘플 수가 1개일 때 다음과 같이 단순화시킬 수 있다.

$$\nabla_\theta J(\theta) \simeq  \sum_{i=0}^T G(\tau) \nabla_\theta \log \pi_\theta(A_t|S_t), \quad (\tau \sim \pi_\theta)$$

계산 과정을 시각화하면 다음과 같다.

 

기울기의 의미

$G(\tau) \nabla_\theta \log \pi_\theta(A_t|S_t)$가 무슨 의미를 내포하고 있는지 알아보자.

우선 $\log$의 미분부터 살펴보면, $\nabla_\theta \log \pi_\theta(A_t|S_t)$는 $\nabla_\theta \pi_\theta(A_t|S_t)$라는 기울기 벡터에 스칼라 ${1 \over \pi_\theta(A_t|S_t)}$를 곱한 것이다.

이로부터, $\nabla_\theta \log \pi_\theta(A_t|S_t)$와 $\nabla_\theta \pi_\theta(A_t|S_t)$는 같은 방향을 가리킨다는 사실을 알 수 있다.

$\nabla_\theta \pi_\theta(A_t|S_t)$는 상태 $S_t$에서 행동 $A_t$를 취할 확률이 가장 높아지는 방향을 가르킨다.

마찬가지로, $\nabla_\theta \log \pi_\theta(A_t|S_t)$도 "상태 $S_t$에서 행동 $A_t$를 취할 확률이 가장 높아지는 방향"을 가르킨다.

그 방향에 $G(\tau)$라는 "가중치"가 곱해진다.

즉, 선택의 결과(=수익)이 좋았으면 가중치가 커져 상태 $S_t$에서 행동 $A_t$를 취할 확률을 강화하고, 수익이 좋지 못하면 가중치를 낮춰 상태 $S_t$에서 행동 $A_t$를 취할 확률을 약화시킨다.

REINFORCE

앞에서 살펴본 가장 간단한 정책 경사법은 $\nabla_\theta \log \pi_\theta(A_t|S_t)$에 항상 일정한 가중치 $G(\tau)$를 적용하고 있다.

 

그런데, 시점 $t$에서 행동 $A_t$가 좋은 행동인지 나쁜 행동인지는 그 행동 이후에 얻은 보상의 총합으로 평가가 이루어져야 한다.

다시 말해, 행동 전에 얻은 보상은 해당 행동의 좋고 나쁨과 무관하다.

하지만, 앞에서 살펴본 가장 간단한 정책 경사법은 $\nabla_\theta \log \pi_\theta(A_t|S_t)$에 항상 일정한 가중치 $G(\tau)$를 적용하고 있다. 즉, 행동 전에 얻은 보상도 포함하고 있어 본질적으로 관련 없는 보상이 노이즈로 섞여 있다는 의미다.

 

이 노이즈를 제거하기 위해 가중치를 $G(\tau)$에서 $G_t$로 변경하여 수식을 다음과 같이 수정할 수 있다.

$$\nabla_\theta J(\theta) = \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T G_t \nabla_\theta \log \pi_\theta(A_t|S_t)\right]$$

$$G_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots + \gamma^T R_T$$

위 수식에 기반한 알고리즘이 REINFORECE다.

Baseline method

REINFORCE 수식은 다음과 같다.

$$\nabla_\theta J(\theta) = \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T G_t \nabla_\theta \log \pi_\theta(A_t|S_t)\right]$$

 

이때, $G_t$는 많은 시간이 쌓여서 만들어진 결과이기 때문에 변동성이 심하다. 즉, 분산이 크다.

 

직관적으로 보면, 답이 매번 바뀌는 것이기 때문에 샘플 효율이 좋지 못하다. 즉, 샘플을 더 많이 사용해야 한다.

 

베이스라인 기법을 사용해 분산을 줄여보자.

다음과 같이 $G_t$에 $S_t$에 대한 임의의 함수 $b(S_t)$를 뺀 $G_t - b(S_t)$를 $G_t$ 대신 사용해도 $\nabla_\theta J(\theta)$는 영향 받지 않는다.

$$\begin{matrix} \nabla_\theta J(\theta) &=& \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T G_t \nabla_\theta \log \pi_\theta(A_t|S_t)\right] \\ &=& \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T (G_t - b(S_t)) \nabla_\theta \log \pi_\theta(A_t|S_t)\right] \end{matrix}$$

그리고, 만약 $S_t$에 대한 함수인 $b(S_t)$의 값이 $G_t$의 최솟값과 최댓값 사이에 있으면 자명하게 분산이 작아진다.

 

그렇기 때문에, 위 조건을 만족하는 $b(S_t)$를 찾아 베이스라인으로 사용하면 즉,  $G_t$ 대신 $G_t - b(S_t)$를 사용하면 분산이 작아져 샘플 효율이 좋아진다.

대표적으로, $G_t$의 평균인 $v_{\pi_\theta}(S_t)$를 베이스라인 $b(S_t)$로 사용한다. 

참고로, 실제 상태 가치 함수 $v_{\pi_\theta}(s)$는 모르기 때문에, 상태 가치 함수를 베이스라인으로 사용하려면 상태 가치 함수도 근사해야 한다. 하지만 꼭 DNN으로 근사해야 하는 건 아니다.

Actor-Critic

강화 학습 알고리즘은 크게 가치 기반 기법과 정책 기반 기법으로 나뉜다.

이번 글에서 살펴본 기법은 모두 정책 기반 기법이고, 이전에서 살펴본 모든 기법은 가치 기반 기법이다.

actor-critic은 가치 기반이자 정책 기반인 기법이며, baseline 기법을 한 걸음 더 발전시킨 기법이다.

(baseline 기법에서도 $b(S_t)$를 상태 가치 함수로 사용하면 가치 기반이자 정책 기반이다.)

 

우선, actor-critic은 상태 가치 함수를 신경망으로 모델링한 가치 신경망 $V_w$를 베이스라인으로 사용한다.

$$\nabla_\theta J(\theta) = \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T (G_t-V_w(S_t)) \nabla_\theta \log \pi_\theta(A_t|S_t)\right]$$

 

근데, $G_t$는 에피소드가 끝날 때 정해진다. 즉, 위 수식은 에피소드가 끌날 때마다 학습할 수 있다는 단점이 있다.

이를 해결하기 위해, actor-critic은 여기서 시간차(TD) 아이디어를 추가해 매 타임스텝마다 학습을 가능케 했다.

즉, $G_t$ 대신 $R_t + \gamma V_w(S_{t+1})$를 사용했다.

$$\nabla_\theta J(\theta) = \mathbb E_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^T (R_t + \gamma V_w(S_{t+1})-V_w(S_t)) \nabla_\theta \log \pi_\theta(A_t|S_t)\right]$$

 

그리고 상태 가치 함수를 근사하기 위해, 가치 신경망(=critic)은 TD법에 따라 $V_w(S_t)$가 $R_t + \gamma V_w(S_{t+1})$에 가까워지도록 학습했다.

$$\text{MSE} = (y - t)^2$$

$$(y = V_w(S_t,A_t), t = R_t + \gamma V_w(S_{t+1}, A_{t+1}))$$

 

이처럼, actor-critic는 정책 신경망(=actor) $\pi_\theta$을 학습하여 정책을 개선하고, 가치 신경망(=critic) $V_w$를 학습하여 정책을 평가하는 과정을 반복한다.

'RL' 카테고리의 다른 글

[RL] 8. PPO: Proximal Policy Optimization  (0) 2024.05.21
[RL] 7.1. Advanced Policy Gradient: A3C, A2C  (0) 2024.05.01
[RL] 6. DQN(Deep Q Network)  (0) 2024.04.28
[RL] 5. Temporal Difference: SARSA, Q-learning  (0) 2024.04.26
[RL] 4. Monte Carlo method  (0) 2024.04.24