Data & Research

[Reinforcement Learning] Policy Gradient

물박사의 저장공간 2025. 6. 25. 23:52

2025.06.29 - [Data & Research] - [Reinforcement Learning] Table of Contents


Policy Gradient Theorem

정책 기반 강화학습의 핵심은 정책을 직접 파라미터 \(\theta\)로 표현하고, 보상의 기댓값을 최대로 만드는 \(\theta\)를 찾는 것입니다. 정책 경사도 정리(Policy Gradient Theorem)는 이 과정의 수학적 근간을 제공합니다. 이 정리를 한 번 유도해볼까요?

 

목적 함수 \(J(\theta)\)는 \(V^{\pi_{\theta}}(s_0)\)로 정의할 수 있습니다. 우리가 구해야 할 것은 이 목적 함수의 미분값, \(\nabla_{\theta} J(\theta)\) 입니다.

\[ J(\theta) = V^{\pi_{\theta}}(s_0) \implies \nabla_{\theta} J(\theta) = \nabla_{\theta} V^{\pi_{\theta}}(s_0) \]

\[ \nabla_{\theta} V^{\pi}(s) = \sum_{a \in \mathcal{A}} \left( (\nabla_{\theta} \pi_{\theta}(a|s)) Q^{\pi}(s,a) + \pi_{\theta}(a|s) \nabla_{\theta} Q^{\pi}(s,a) \right) \]

위의 마지막 항(행동가치 함수의 \(\theta\)에 대한 미분값)을 계산하는 것이 어렵기 때문에 이를 대체할 수 있는 식으로 변형하는 것이 1차적인 목표라고 할 수 있습니다. 

 

\[ \nabla_{\theta} V^{\pi}(s) = \nabla_{\theta} \sum_{a \in \mathcal{A}} \pi_{\theta}(a|s) Q^{\pi}(s,a) = \sum_{a \in \mathcal{A}} \left[ (\nabla_{\theta} \pi_{\theta}(a|s)) Q^{\pi}(s,a) + \pi_{\theta}(a|s) \nabla_{\theta} Q^{\pi}(s,a) \right] \]

여기서 \(Q^{\pi}(s,a)\)는 \(R_s^a + \gamma \sum_{s'} P_{ss'}^a V^{\pi}(s')\) 이므로, Q의 그래디언트 \(\nabla_{\theta} Q^{\pi}(s,a)\)는 다음 상태의 가치 그래디언트 \(\nabla_{\theta} V^{\pi}(s')\)에 의존하게 됩니다. (보상 R과 전이확률 P는 \(\theta\)와 무관)

\[ \nabla_{\theta} Q^{\pi}(s,a) = \nabla_{\theta} \left( R_s^a + \gamma \sum_{s'} P_{ss'}^a V^{\pi}(s') \right) = \gamma \sum_{s'} P_{ss'}^a \nabla_{\theta} V^{\pi}(s') \]

이 식을 위 미분 식에 다시 대입하면, \(V^{\pi}(s)\)의 그래디언트는 다음 상태 \(s'\)의 가치 그래디언트 \( \nabla_{\theta} V^{\pi}(s')\)에 대한 재귀적인 관계를 갖게 됩니다.

\[ \nabla_{\theta}V^{\pi}(s) = \sum_{a \in \mathcal{A}} \left( (\nabla_{\theta}\pi_{\theta}(a|s))Q^{\pi}(s,a) + \pi_{\theta}(a|s) \gamma \sum_{s'} P(s'|s,a) \nabla_{\theta}V^{\pi}(s') \right) \]

 

재귀 관계의 단순화

이전 단계에서 유도된 \(V^{\pi}(s)\)의 그래디언트에 대한 재귀적 관계식은 다음과 같습니다.

\[ \nabla_{\theta}V^{\pi}(s) = \sum_{a \in \mathcal{A}} \left( (\nabla_{\theta}\pi_{\theta}(a|s))Q^{\pi}(s,a) + \pi_{\theta}(a|s) \gamma \sum_{s'} P(s'|s,a) \nabla_{\theta}V^{\pi}(s') \right) \]

이 복잡한 식을 더 쉽게 다루기 위해, 이미지에서처럼 두 부분으로 나누어 새로운 기호를 정의합니다.

  • \(\phi(s)\): 상태 s에서 발생하는 그래디언트의 '즉각적인(immediate)' 부분을 나타냅니다.\[ \phi(s) = \sum_{a \in \mathcal{A}} (\nabla_{\theta}\pi_{\theta}(a|s))Q^{\pi}(s,a) \]
  • \(\rho^{\pi}(s \to s', 1)\): 정책 \(\pi\)를 따라 상태 s에서 1 스텝 후에 상태 s'로 전이할 확률을 나타냅니다.\[ \sum_{a \in \mathcal{A}} \pi_{\theta}(a|s) P(s'|s,a) = \rho^{\pi}(s \to s', 1) \]

이 새로운 기호들을 사용하면, 위의 긴 재귀 관계식을 아래와 같이 매우 간결한 형태로 표현할 수 있습니다.

\[ \nabla_{\theta}V^{\pi}(s) = \phi(s) + \gamma \sum_{s' \in S} \rho^{\pi}(s \to s', 1) \nabla_{\theta}V^{\pi}(s') \]

 

재귀적 전개

이제 위에서 정리된 간결한 재귀식을 반복적으로 대입하여 풀어보겠습니다.

$$ \begin{aligned} \nabla_{\theta}V^{\pi}(s) &= \phi(s) + \gamma \sum_{s' \in S} \rho^{\pi}(s \to s', 1) \nabla_{\theta}V^{\pi}(s') \\ &= \phi(s) + \gamma \sum_{s'} \rho^{\pi}(s \to s', 1) \left[ \phi(s') + \gamma \sum_{s'' \in S} \rho^{\pi}(s' \to s'', 1) \nabla_{\theta}V^{\pi}(s'') \right] & \text{; (∇V(s')를 다시 전개)} \\ &= \phi(s) + \gamma \sum_{s'} \rho^{\pi}(s \to s', 1) \phi(s') + \gamma^2 \sum_{s'} \rho^{\pi}(s \to s', 1) \sum_{s''} \rho^{\pi}(s' \to s'', 1) \nabla_{\theta}V^{\pi}(s'') \\ &= \phi(s) + \gamma \sum_{s'} \rho^{\pi}(s \to s', 1) \phi(s') + \gamma^2 \sum_{s''} \underbrace{\left( \sum_{s'} \rho^{\pi}(s \to s', 1) \rho^{\pi}(s' \to s'', 1) \right)}_{=\rho^{\pi}(s \to s'', 2)} \nabla_{\theta}V^{\pi}(s'') & \text{; (2-step 전이 확률로 정리)} \end{aligned} $$

위 식에서 볼 수 있듯이, 2-step 전이 확률 \(\rho^{\pi}(s \to s'', 2)\)는 모든 중간 상태 \(s'\)를 거쳐가는 1-step 전이 확률들의 합으로 정의됩니다. 이 과정을 무한히 반복하면, 현재 상태의 그래디언트는 모든 미래 시점의 \(\phi\)값들의 할인된 총합으로 표현됩니다.

재귀적 전개를 끝까지 수행한 최종 결과는 다음과 같습니다. (\(\rho^{\pi}(s \to s, 0)=1\)로 정의)

\[ \nabla_{\theta}V^{\pi}(s) = \sum_{x \in S} \sum_{k=0}^{\infty} \gamma^k \rho^{\pi}(s \to x, k) \phi(x) \]

이 식의 의미는 아래과 같습니다.

"상태 \(s\)의 가치 그래디언트는, 정책 \(\pi\)를 따랐을 때 상태 \(s\)로부터 도달 가능한 모든 미래 상태 \(x\)들에서 발생하는 즉각적인 그래디언트 \(\phi(x)\)들의 할인된(discounted) 총합과 같다."

로그-미분 트릭

gradient를 계산 가능한 형태로 바꾸는 테크닉인데요(열역학에서도 나오는..), 로그 함수의 미분 성질 \(\nabla \log f(x) = \frac{\nabla f(x)}{f(x)}\)을 이용하면, 정책의 그래디언트 \(\nabla_{\theta} \pi_{\theta}\)를 다음과 같이 변형할 수 있습니다.

\[ \nabla_{\theta} \pi_{\theta}(a|s) = \pi_{\theta}(a|s) \nabla_{\theta} \log \pi_{\theta}(a|s) \]

 

 

이제 최종적으로 유도를 해보면(앞서 살펴본 단계에서 할인율 \(\gamma=1\)로 가정하고 진행하겠습니다)

\[ \nabla_{\theta}J(\theta) = \nabla_{\theta}V^{\pi}(s_0) = \sum_{s \in S} \sum_{k=0}^{\infty} \rho^{\pi}(s_0 \to s, k) \phi(s) \]

여기서 \(\sum_{k=0}^{\infty} \rho^{\pi}(s_0 \to s, k)\)는 시작 상태 \(s_0\)에서 출발하여 상태 \(s\)에 도달하는 총 빈도를 나타내며, 이를 \(\eta(s)\)로 정의합니다.

\[ \eta(s) = \sum_{k=0}^{\infty} \rho^{\pi}(s_0 \to s, k) \]

더보기

일반적인 정의: 보상 합의 기댓값

가장 일반적인 정의는, 정책 \(\pi_{\theta}\)를 따랐을 때 얻게 되는 총 보상(리턴)의 기댓값입니다.

\[ J(\theta) = \mathbb{E}_{\pi_{\theta}} \left[ \sum_t r_t \right] \]

시작 상태가 고정된 경우

만약 에피소드가 항상 특정 상태 \(s_0\)에서 시작한다면, 목적 함수는 간단하게 시작 상태 \(s_0\)의 가치 함수 \(v_{\pi_{\theta}}(s_0)\)와 동일합니다.

\[ J(\theta) = \mathbb{E}_{\pi_{\theta}} \left[ \sum_t r_t \Big| s_0 \right] = v_{\pi_{\theta}}(s_0) \]

시작 상태의 분포가 주어진 경우

만약 시작 상태가 고정되어 있지 않고, 시작 상태가 될 확률 분포 \(d(s)\)가 정의되어 있다면, 목적 함수는 모든 가능한 시작 상태의 가치에 대한 기댓값이 됩니다.

\[ J(\theta) = \sum_{s \in S} d(s) v_{\pi_{\theta}}(s) \]

어떤 정의를 사용하든, policy gradient theorem은 최종 공식은 동일합니다.

 

Policy Gradient Theorem는 state 분포나 행동가치함수가 우리가 관심있는 parameter \(\theta\)에 대한 함수가 아니라는 것을 알려줍니다. 따라서 우리는 마음놓고 \(\theta\)에 대한 정책 최적화를 진행할 수 있게 되는것이죠

 

이 \(\eta(s)\)를 정규화하면 정책 \(\pi\)를 따를 때 상태 \(s\)에 있을 확률인 정상 상태 분포(stationary distribution) \(d^{\pi}(s)\)를 얻을 수 있습니다. 즉, \(\eta(s) \propto d^{\pi}(s)\) 입니다. 이 관계를 이용하고, \(\phi(s)\)의 원래 정의를 대입하여 식을 다시 쓸 수 있습니다.

\[ \nabla_{\theta}J(\theta) \propto \sum_{s \in S} d^{\pi}(s) \phi(s) = \sum_{s \in S} d^{\pi}(s) \sum_{a \in \mathcal{A}} \nabla_{\theta}\pi_{\theta}(a|s) Q^{\pi}(s,a) \]

 

아직은 식에는 여전히 다루기 어려운 \(\nabla_{\theta}\pi_{\theta}\) 항이 있습니다. 여기에 로그-미분 트릭 \(\nabla_{\theta} \pi_{\theta} = \pi_{\theta} \nabla_{\theta} \log \pi_{\theta}\)을 적용하여 식을 최종적으로 변형합니다.

$$ \begin{aligned} \nabla_{\theta} J(\theta) &\propto \sum_{s \in S} d^{\pi}(s) \sum_{a \in \mathcal{A}} \nabla_{\theta}\pi_{\theta}(a|s) Q^{\pi}(s,a) \\ &= \sum_{s \in S} d^{\pi}(s) \sum_{a \in \mathcal{A}} \pi_{\theta}(a|s) \frac{\nabla_{\theta}\pi_{\theta}(a|s)}{\pi_{\theta}(a|s)} Q^{\pi}(s,a) & \text{; (분자, 분모에 \(\pi_{\theta}\)를 곱함)}\\ &= \mathbb{E}_{\pi} \left[ \frac{\nabla_{\theta}\pi_{\theta}(A_t|S_t)}{\pi_{\theta}(A_t|S_t)} Q^{\pi}(S_t, A_t) \right] & \text{; (기댓값 형태로 변환)}\\ &= \mathbb{E}_{\pi} \left[ \nabla_{\theta} \log \pi_{\theta}(A_t|S_t) Q^{\pi}(S_t, A_t) \right] & \text{; (로그-미분 트릭 적용)} \end{aligned} $$

 

정책 경사도 정리 (Policy Gradient Theorem)
\[ \nabla_{\theta} J(\theta) = \mathbb{E}_{\pi} \left[ \nabla_{\theta} \log \pi_{\theta}(A_t|S_t) Q^{\pi}(S_t, A_t) \right] \]

이 정리는 샘플링 기반으로 기댓값을 추정할 수 있도록 하는 열쇠가 됩니다. 즉, 모델 없이도 정책의 gradient를 계산하고 gradient ascent를 통해 정책을 개선할 수 있습니다. 

 

이 공식의 직관적인 의미는 아래와 같습니다.

  • \(\nabla_{\theta} \log \pi_{\theta}(A_t|S_t)\): "상태 \(S_t\)에서 행동 \(A_t\)를 했을 때, 이 행동의 확률을 가장 크게 증가시키는 파라미터 \(\theta\)의 방향"을 알려줍니다.
  • \(Q^{\pi}(S_t, A_t)\): "상태 \(S_t\)에서 행동 \(A_t\)를 한 것이 얼마나 좋았는가?"를 나타내는 값입니다.

만약 \(Q^{\pi}\)값이 큰 (좋은 결과를 낳은) 행동이었다면, 그 행동을 할 확률을 높이는 방향으로 파라미터를 많이 업데이트하고, 반대로 \(Q^{\pi}\)값이 작은 (나쁜 결과를 낳은) 행동이었다면, 그 행동을 할 확률을 낮추는 방향으로 파라미터를 업데이트한다는 것이죠