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으로 나눈다.
- Value Stream: $V(s)$ — 상태의 가치만을 추정
- 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)$는 아래 세 가지 랜덤 요소에 의해 정의된다.
- 보상 $R
- 다음 상태-행동 쌍 $(S', A')$
- 해당 다음 쌍에서의 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 기반 접근법의 한계는 존재한다.
- 연속적인 action space에 약하다.
- Q(s,a)를 다 계산해야 하니, 행동이 무한하면 계산 불가
- 확률적인 정책 학습 불가하다.
- DQN은 항상 "가장 높은 Q값"만 고르므로, stochastic policy는 못 만듦
- 환경 모델을 사용하지 않는다.
- 샘플 낭비가 심함 (→ model-based 방식 필요)
따라서 이 한계를 넘기 위해 정책 기반 + 모델 기반 강화학습으로 확장해야 한다.