공부/강화학습

[강화학습] An Introduction to Deep Reinforcement Learning 4장 - Value-based methods for deep RL

리미61 2025. 7. 14. 15:51

https://arxiv.org/abs/1811.12560

 

An Introduction to Deep Reinforcement Learning

Deep reinforcement learning is the combination of reinforcement learning (RL) and deep learning. This field of research has been able to solve a wide range of complex decision-making tasks that were previously out of reach for a machine. Thus, deep RL open

arxiv.org

 

1. Q-learning

Q-learning은 강화학습에서 최적 정책을 찾기 위해 행동의 가치를 직접적으로 학습하는 오프폴리시 방법이다. 

"어떤 상태에서 어떤 행동을 하면 얼마나 좋은지(Q값)"를 학습한다.

 

최적의 Q값 함수 $Q^*(s,a)$를 학습하기 위헤, Q값 함수에 대한 벨만 방정식을 사용한다. 이 방정식의 유일한 해가 $Q^*(s,a)$이다. 앞으로 받을 총 보상의 기대값이 가장 크도록 하는 값을 Q*(s, a) 라고 부르고 벨만 방정식을 만족해야 한다.

 

$$Q^*(s, a) = (BQ^*)(s, a)$$

 

벨만 연산자 \(B\)는 주어진 함수 \(K(s, a)\)를 다음 방식으로 업데이트한다.

 

\[ Q*(s, a) = 기대값 [ 보상 + 감가율 * 다음 상태에서의 최대 Q값 \]

\[(BK)(s, a) = \sum_{s'} T(s, a, s') \left[ R(s, a, s') + \gamma \max_{a'} K(s', a') \right]\]

  • 상태 $s$에서 행동 $a$를 하면, 다음 상태 $s'$로 갈 수 있다. 각 상태마다 전이 확률 $T(s,a,s')$가 있고, 그때 받을 보상은 $R(s,a,s')$이다. 도착한 다음 상태 $s'$에서는 가능한 행동 중 가장 좋은 것을 하게 되는데 그 Q값이 $max_{a'} K(s',a')$가 된다. 해당 내용을 전부 합쳐서 기대값을 계산하는 것이 $BK(s,a)$이다. 

특정 상태 \(s\)에서 행동 \(a\)를 했을 때, 도달할 수 있는 다음 상태 \(s'\)들에 대해 보상 + 다음 상태에서의 최대 Q값의 기대값을 계산한다.

 

Banach's theorem에 따르면 벨만 연산자 $B$는 수축 사상이기 때문에, 고정점이 존재한다.

수축 사상(contraction mapping)이란, 반복해서 적용하면 수렴하는 연산자라는 뜻이다. 따라서 \(B\)가 수축 사상이기 때문에, 반복해서 적용하면 \(Q^*\)라는 고정점에 도달하게 되고, 이것이 최적의 Q함수임을 보장한다.

 

현재의 상태-행동 공간은 너무 커서 모든 값을 테이블에 저장할 수 없다. 따라서 신경망 같은 함수 근사기를 사용해 Q함수를 파라미터화하는 fitted Q-learning이 필요하다. 

 

2. Fitted Q-learning (NFQ)

원래의 Q-learning에서는 Q값을 테이블에 저장한다. 하지만 상태공간이 너무 크거나 연속적이면 테이블로 저장하지 못해 Q함수를 파라미터화된 함수로 바꾼것이 Fitted Q-learning이다. 

Fitted Q-learning에서는 $Q(s,a;\theta_0)$를 무작위로 초기화한 후 시작한다. 신경망 함수 $Q(s,a;\theta)$를 근사하는 것이다.

 

$$Y_k^Q = r + \gamma \max_{a'} Q(s', a'; \theta_k)$$

이후 $k$번째 반복에서 Q함수는 아래와 같은 타겟값 \(Y_k^Q\)을 향해 업데이트된다.

  • 현재 보상 \(r\)
  • 미래 상태 \(s'\)에서의 최대 Q값 (할인된)

즉, 지금 보상 + 미래의 최대 이득을 예측값 \(Q(s, a; \theta_k)\)에 가까워지도록 한다. 

 

상태를 신경망의 입력으로 넣고, 가능한 각 행동에 대한 Q값을 출력으로 제공한다. 이 구조 덕분에 \(\max_{a'} Q(s', a'; \theta_k)\) 계산이 단 한 번의 forward pass로 가능해진다.

  • 입력: s (상태)
  • 출력: 모든 행동에 대한 Q값 → $[Q(s, a_1), Q(s, a_2), ... , Q(s, a_n)]$

이렇게 하면 $max_a' Q(s', a')$를 forward pass 한 번으로 바로 구할 수 있다.

  • loss : 예측값 $Q(s,a; \theta)$와 타겟 사이의 오차
    $$L_\text{DQN} = \left(Q(s, a; \theta_k) - Y_k^Q\right)^2$$
  • 업데이트 : gradient descent로 $\theta$ 업데이트
    $$\theta_{k+1} = \theta_k + \alpha (Y_k^Q - Q(s, a; \theta_k)) \nabla_{\theta_k} Q(s, a; \theta_k)$$
    • 예측값이 너무 낮으면 \((Y - Q)\)가 양수 → Q값을 늘리게 파라미터가 업데이트됨
    • 예측값이 너무 높으면 \((Y - Q)\)가 음수 → Q값을 줄이게 파라미터가 업데이트됨

하지만 오차 전파, 과대추정, 수렴 불안정성의 문제로 인해 double DQN이 나오게 되었다. 

 

3. Deep Q-networks

DQN은 강화학습과 딥러닝을 결합한 사례이다. 불안정한 학습을 해결하기 위해 두 가지 휴리스틱 (1) 타겟 네트워크, (2) 리플레이 메모리을 사용한다. 

(1) 타겟 Q-네트워크 사용

Q-타겟을 \( Q(s', a'; \theta_k^-) \)로 대체한다. \( \theta_k^- \)는 이전 Q-네트워크의 파라미터이고, 매 \( C \in \mathbb{N} \)번의 반복마다만 다음과 같이 업데이트된다. 

$$ \theta_k^- = \theta_k (매 C step마다)$$

계속 변하는 타겟 값 때문에 생기는 불안정한 러닝을 막을 수 있다. 

 

(2) 리플레이 메모리

매 step마다 생기는 경험을 전부 저장해 둔 후 (온라인 수집) 무작위로 mini-batch(오프라인 학습) 뽑아서 학습한다. 해당 경험들은 epsilon-greedy 정책을 따르며 수집된다. 이를 통해 다양한 상황을 반영하고, 과적합을 줄이게 된다. 

즉, 정책을 따라 수집된 데이터는 온라인처럼 만들고, 학습은 오프라인처럼 안정적으로 한다. 

 

(3) 기타 주요 기법들

  • 보상 clipping: 보상을 [-1, 1]로 제한
  • 삶(life)이 끝나는 경우를 종료 상태로 취급
  • 입력 전처리

4. Double DQN

$$Y_k^{DDQN} = r + \gamma \, Q\left(s', \arg\max_{a \in A} Q(s', a; \theta_k); \theta_k^- \right)\quad$$

하나의 동일한 Q값을 사용하여 행동을 선택, 평가할 경우 과대평가된 값을 선택할 가능성이 높아진다. 이 문제를 해결하기 위해 더블 추정 방법이 사용된다. 각 변수에 대해 두 가지 추정값을 사용하여, 어떤 추정기를 사용할지 선택하는 것과 그 값 자체를 분리할 수 있게 한다. 

 

greedy 행동을 선택할 때는 현재 네트워크(파라미터 $\theta$)를, 행동을 평가할 때는 타겟 네트워크(파라미터 $\theta^-$)를 사용한다. -> "행동을 고르는 것"과 "그 행동의 가치를 평가하는 것"을 서로 다른 네트워크

 

1. 선택(argmax)

현재 네트워크 $\theta$를 사용해서 $a^* = argmax_a Q(s', a;\theta)$

→ 다음 상태에서 뭘 하면 좋을까? 를 고름

 

2. 평가

그 고른 행동 $a*$에 대해 타겟 네트워크 $\theta^-$로 $Q(s', a*; \theta^-)$을 계산

→ 그 행동을 실제로 했을 때 얼마나 좋은지 평가

 

5. Dueling Network Architecture

Dueling Network Architecture는 신경망 구조를 상태 가치 함수 $V(s)$와 이득 함수 $A(s,a)$로 분리하여 설계한다. 

 

$$
Q(s, a)=V(s)+A(s)
$$

 

  • $Q(s, a)$ : 어떤 상태 s에서 행동 a를 했을 때 기대되는 총 보상
  • $V(s)$ : 그냥 그 상태 자체가 얼마나 좋은지
  • $A(s, a)$ : 그 상태에서 행동 a를 했을 때, 평균적인 행동보다 얼마나 더 좋은지

Q를 상태 가치 + 행동 이득으로 분해해서 이해한다. 

 

 

기존 DQN는 Q-value만 직접 예측하는데 , Dueling Network는 두 개의 stream으로 나눈다.

 

  1. Value Stream: $V(s)$ — 상태의 가치만을 추정
  2. Advantage Stream: $A(s, a)$ — 각 행동의 상대적 우수함을 추정

$$Q(s, a)=V(s)+\left(A(s, a)-\max _{a^{\prime}} A\left(s, a^{\prime}\right)\right)$$

 

$$Q(s, a) = V(s) + \left( A(s, a) - \frac{1}{|\mathcal{A}|} \sum_{a'} A(s, a') \right)$$

평균 advantage를 빼줘 안정적인 학습을 한다. 전체 advantage 값을 정규화하는 효과가 있다. 

 

 

  • 입력: 상태 $s$
  • 중간까지는 공통된 CNN (또는 FCN 등)을 거친 후,
  • 중간에 갈라져서:
    • 하나는 $V(s)$ (value stream)
    • 하나는 $A(s, a)$ (advantage stream)
  • 마지막에 이 둘을 합쳐서 최종 Q-value를 예측

❓ 왜 $Q(s, a^*) = V(s)$

$$Q(s, a) = V(s) + \left( A(s, a) - \max_{a'} A(s, a') \right)$$

 

여기서 가장 좋은 행동 $a^*$는

$$a^* = \arg\max_a Q(s, a)$$

즉, Q값이 가장 큰 행동이다. 그러면 그때의 Q값은:

$$Q(s, a^*) = V(s) + \left( A(s, a^*) - \max_{a'} A(s, a') \right)$$

그런데 $A(s, a^*) = \max A$ 니까:

$$Q(s, a^*) = V(s) + (\max A - \max A) = V(s)$$

그래서 최적 행동 $a^*$를 썼을 때는 Q값이 V(s)랑 같아진다. 즉, 최고의 행동을 할 거면, 결국 상태의 가치와 동일하다.

6. Distributional DQN

Distributional DQN은 보상의 확률분포 전체를 모델링하여 더 많은 정보를 확인한다. 따라서 $Q$가 아닌 $Z^π(s, a)$ 분포를 학습한다. 

  • $Z^π(s, a)$: 상태 $s$에서 행동 $a$를 했을 때 받을 수 있는 누적 보상의 분포 전체
  • 기대값은 Q와 같지만, 분포의 모양 자체를 학습

$$ Q^π(s, a) = \mathbb{E}[Z^π(s, a)]$$

 

$$ Z^π(s, a) = R(s, a, S') + \gamma Z^π(S', A')$$

기존 Bellman 식과 비슷하게, 분포 기반의 Bellman 식도 재귀적으로 정의한다. 단, 기댓값이 아닌 확률 분포 차원에서 식이 구성된다. 

 

  • $R(s, a, S')$ : 보상 자체도 랜덤
  • $(S', A')$ : 다음 상태, 다음 행동도 랜덤
  • $Z^π(S', A')$ : 그 다음의 리턴도 랜덤

즉, $Z(s, a)$는 아래 세 가지 랜덤 요소에 의해 정의된다.

  1. 보상 $R
  2. 다음 상태-행동 쌍 $(S', A')$
  3. 해당 다음 쌍에서의 return 분포 $Z(S', A')$

평균만 보는 DQN은 보상의 분산이나 극단값을 고려하지 못하지만, 분포를 아는 DQN은 그런 위험 기반 행동이 가능하다. 

Distributional DQN이 더 풍부한 학습 신호를 제공하기 때문에 정확도가 올라간다.

 

  • 두 정책의 Q값은 같음
  • 하지만 분포 Z는 다름

7. Multi-step Learning

일반적인 DQN은 1스텝만 보고 학습한다.(bootstrap) 하지만 미래 보상을 더 길게 보거나 (n-step Q-learning) 여러 개의 n-step을 동시에 조합해서 사용한다.(TD(λ))

DQN (bootstrap) 다음 상태 Q값을 이용해 현재 Q를 업데이트
Monte Carlo 에피소드 끝까지 실제 리턴을 보고 그걸로 학습
Multi-step 위 둘의 중간: 여러 스텝을 지나서 얻은 보상들을 일부 활용

n-step Q-learning

$$Y_k^{Q,n} = \sum_{t=0}^{n-1} \gamma^t r_t + \gamma^n \max_{a'} Q(s_n, a'; \theta_k)$$

 

앞으로 n개의 보상(r)을 차례로 더한 다음 , 마지막 상태 $s_n$에서 Q값을 한 번 부트스트랩해서 target으로 삼는다.

 

TD(λ)

$$Y_k^{Q,n} = \sum_{i=0}^{n-1} \lambda_i \left( \sum_{t=0}^i \gamma^t r_t + \gamma^{i+1} \max_{a'} Q(s_{i+1}, a'; \theta_k) \right)$$

$${단, } \sum_{i=0}^{n-1} \lambda_i = 1$$

 

여러 개의 n-step 리턴을 가중 평균해서 하나의 target을 만든다. (n-step 리턴을 λ 가중치로 혼합한 방식)

 

DQN처럼 순수한 부트스트랩 방식을 사용하는 경우, function approximation)와 결합되었을 때 불안정성이 발생할 수 있다. 반먼 오프폴리시 샘플로도 학습할 수 있는 장점이 있다.

 

n-step Q-learning 같은 방법은 자기 자신의 값 추정에 덜 의존한다. 이런 방식은 보상이 지연되는 상황에서도 정보를 더 빠르게 전파할 수 있다. 하지만 원칙적으로 on-policy 방법이기 때문에, 행동 정책과 다른 정책에서 수집된 데이터를 사용할 경우 편향이 발생할 수 있다.(리플레이 버퍼를 사용할 때)

 

따라서 off-policy 환경에서 eligibility trace (자격 추적)을 통해 효율적이고 안전하게 학습하는 방법이 제시되었다.

Retrace 연산자

Q-learning은 원래 off-policy이다. (지금의 정책 π가 아니라, 예전 행동 μ에서 수집한 데이터로 학습)

TD(λ) 같은 다단계 학습을 쓸 때는 문제가 발생한다.
→ on-policy여야 안정적인데, 리플레이 버퍼의 μ는 off-policy 
→ π ≠ μ → 불안정, 편향(bias)

 

Retrace는 π와 μ가 다르더라도, 안정적으로 다단계 학습을 할 수 있게 해주는 방식이다. 

행동 정책 μ에서 얻은 trajectory로 목표 정책 π를 학습하고 싶을 때 보정 계수 $c_s$를 넣어 해결한다.

 

$$Y = Q(s,a) + \sum_{t \ge 0} \gamma^t \left( \prod_{s=1}^{t} c_s \right) \left( r_t + \gamma \mathbb{E}_\pi Q(s_{t+1}, a') - Q(s_t, a_t) \right)$$

 

미래에 얻을 보상들로부터 수정값을 계속 누적합함

  • $\gamma^t$ : t단계 뒤니까 할인
  • $\prod_{s=1}^{t} c_s$: π와 μ의 차이에 따른 신뢰도 계수
  • $(r_t + \gamma \mathbb{E}_\pi Q(s_{t+1}, a') - Q(s_t, a_t))$:

→ 그 시점에서의 TD 오차 (TD error)

즉, 모든 미래 타임스텝에 대한 TD 오차를 누적,
→ 단, 각 오차는 π와 μ의 차이만큼 가중치 조절

 

$$c_s = \lambda \cdot \min\left(1, \frac{\pi(a|s)}{\mu(a|s)}\right)$$

 

  • π ≈ μ이면 → 거의 1 → 신뢰할만하니까 전체 오차를 씀
  • π ≠ μ이면 → 작아짐 → 오차 기여도를 낮춤

 

즉, Q(s, a)를 어떻게 업데이트할까?

1. 부트스트랩 (1-step TD) 한 스텝만 보고 r + γ·Q(s', a')로 학습 빠르지만 느림 (정보 전달), 불안정 가능
2. n-step Q-learning 여러 스텝 직접 보고 n번 보상 후 Q로 부트스트랩 더 많은 정보, 더 빠른 전달. 설정 민감
3. TD(λ) 여러 개의 n-step 리턴을 가중평균 정확도 + 안정성 조화. λ 조절 필요
4. Retrace(λ) TD(λ)를 off-policy에 맞게 수정. π≠μ에도 안정적 수렴 보장, 분산 낮음, 연산량은 증가

 

8. Combination of all DQN improvements and variants of DQN

Rainbow DQN은 DQN의 주요 확장을 한꺼번에 적용하여 Atari 벤치마크에서 좋은 성능을 보였다. 

하지만 여전히 DQN 기반 접근법의 한계는 존재한다.

 

  1. 연속적인 action space에 약하다.
    • Q(s,a)를 다 계산해야 하니, 행동이 무한하면 계산 불가
  2. 확률적인 정책 학습 불가하다.
    • DQN은 항상 "가장 높은 Q값"만 고르므로, stochastic policy는 못 만듦
  3. 환경 모델을 사용하지 않는다.
    • 샘플 낭비가 심함 (→ model-based 방식 필요)

따라서 이 한계를 넘기 위해 정책 기반 + 모델 기반 강화학습으로 확장해야 한다.