Data & Research

[Reinforcement Learning] Q-learning (Off-policy TD Control)

물박사의 저장공간 2025. 6. 23. 00:17

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


1. Q-learning의 핵심 아이디어

Q-learning은 벨만 최적 방정식의 샘플 기반 버전이라고 보면 됩니다(참고로 SARSA같은 경우에는 벨만 기대 방정식을 기반으로했고 때문에 정책이 기댓값 계산에 영향을 받았습니다). "궁극적으로 최적 정책은 환경에 의존적인 것이고 환경을 충분히 잘 탐험한다면 최적 정책을 찾을 수 있다. 그리고 환경을 탐험하는데 동원되는 정책은 무엇이든 상관없다." 의 컨셉입니다. 

 

먼저, 벨만 최적 방정식을 기댓값 형태로 다시 표현해 보겠습니다.

\[ Q^*(s,a) = \mathbb{E}_{s' \sim P} \left[ R_s^a + \gamma \max_{a'} Q^*(s',a') \right] \]

이 식의 기댓값 \(\mathbb{E}_{s' \sim P}[\dots]\)을 계산하려면 모든 가능한 다음 상태 \(s'\)에 대한 정보, 즉 환경 모델 \(P\)를 알아야 합니다. 샘플링을 통해 기댓값을 계산한다는 아이디어를 적용하면, 아래와 같은 Q-러닝의 핵심 update식을 쓸 수 있습니다. 

\[ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \left( \underbrace{R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a')}_{\text{TD Target}} - Q(S_t, A_t) \right) \]

 

 

2. 행동과 학습의 분리

SARSA와 Q-learning의 업데이트를 비교해볼까요? 

  • SARSA 타겟: \(R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})\)    (다음 행동 \(A_{t+1}\)에 의존)
  • Q-러닝 타겟: \(R_{t+1} + \gamma \max_{a'} Q(S_{t+1}, a')\) (다음 행동과 무관)

Q-learning의 TD 타겟을 계산하는 \(\max_{a'} Q(S_{t+1}, a')\) 부분을 주목해야 합니다. 이 부분은 다음 상태 \(S_{t+1}\)에서 실제로 어떤 행동을 할지와는 상관없이, 가능한 모든 행동 중 Q값이 가장 큰 값을 선택합니다. 이 덕분에 '행동'과 '학습'이 분리됩니다.

  • 행동 정책 (Behavior Policy, \(\mu\)): 에이전트가 실제로 환경과 상호작용하며 경험을 쌓는 데 사용하는 정책입니다. 충분한 탐색을 위해 보통 ε-Greedy 정책을 사용합니다.
  • 타겟 정책 (Target Policy, \(\pi\)): 에이전트가 궁극적으로 배우고자 하는 목표 정책입니다. Q-러닝의 \(\max\) 연산자는 타겟 정책이 항상 최선의 행동만을 선택하는 순수한 탐욕적(Greedy) 정책임을 의미합니다.

즉, Q-learning은 ε-Greedy 정책에 따라 자유롭게 탐색하며 행동(\(A_t\))하면서도, 업데이트는 항상 탐욕적 정책을 따랐을 경우(\(\max\))를 가정하고 수행합니다. 이처럼 행동과 학습의 정책이 다르므로 Off-Policy이며, 업데이트 규칙 자체에 타겟 정책(\(\pi\))이 녹아있어 importance sampling(\(\rho\))이 필요 없게 됩니다(다르게 표현하면 update target이 행동 정책 \(\mu\)의 '다음 행동'으로부터 완전히 독립적이기 때문에, 두 정책의 확률 차이를 보정할 필요가 없어지고 importance sampling이 필요 없게 됩니다).

 

3. Q-learning 알고리즘의 전체 흐름

  1. 모든 상태-행동 쌍에 대해 \(Q(s,a)\)를 0 또는 임의의 값으로 초기화합니다.
  2. 루프 (각 에피소드마다 반복):
    1. 상태 S를 에피소드의 시작 상태로 초기화합니다.
    2. 루프 (에피소드가 끝날 때까지 스텝마다 반복):
      1. 현재 상태 S에서, Q값에 대한 ε-Greedy 정책(\(\mu\))에 따라 행동 A를 선택합니다.
      2. 행동 A를 수행하여, 보상 R과 다음 상태 S'를 관찰합니다.
      3. (핵심 업데이트) Q-러닝 업데이트 규칙을 적용하여 \(Q(S,A)\)를 업데이트합니다.
        \(Q(S, A) \leftarrow Q(S, A) + \alpha [R + \gamma \max_{a'} Q(S', a') - Q(S, A)]\)
      4. 다음 스텝을 위해 상태를 업데이트합니다: \(S \leftarrow S'\)