[Deep Reinforcement Learning] 19강 DQN variant

Woosci·2025년 7월 24일

👨‍🏫학습목표

오늘은 Multi-step Learning, Double-DQN, Prioritized Replay에 대해 배워볼 예정이다.

👨‍🎓강의영상: https://www.youtube.com/watch?v=hjXbfFeY1Ac&list=PLvbUC2Zh5oJtYXow4jawpZJ2xBel6vGhC&index=19

1️⃣ Multi-step Learning

🔻 기존 DQN의 학습 방법

L(θ)=[rt+1+γmaxaQ(st+1,a;θ)Q(st,at;θ)]2L(\theta) = [r_{t+1} + \gamma \max_a Q(s_{t+1}, a; \theta) - Q(s_t, a_t; \theta)]^2
  • Loss function을 보면 다음 step으로 이동할 때의 Reward rt+1r_{t+1} 를 target으로 학습하는 것을 관찰할 수 있다.

그런데 다음 step의 데이터를 통해 model이 판단하는 것도 좋지만, 10 step, 20 step 등 n-step 이후의 reward를 참고하여 판단하는 것이 더 좋은 경우도 있을 것이다. 즉 미래에 어떤 일이 발생할지 미리 엿보고 지금의 행동을 결정하는 것이다. Multi-step Learning은 이러한 아이디어를 구현한 방법이다.


🔷 Multi-step Learning

  • Multi-step Learning은 n-step의 data를 target으로 학습한다.
rt+1(n)=k=0n1γkrt+k+1r_{t+1}^{(n)} = \sum_{k=0}^{n-1} \gamma^k r_{t+k+1}
  • Multi-step Learning에 사용하는 reward를 truncated n-step return이라고 한다.

L(θ)=[rt+1(n)+γnmaxaQ^(st+n,a;θ^)Q(st,at;θ)]2L(\theta) = [r_{t+1}^{(n)} + \gamma^n \max_a \hat{Q}(s_{t+n}, a; \hat{\theta}) - Q(s_t, a_t; \theta)]^2
  • Loss function에 truncated n-step return이 사용되는 것을 확인할 수 있다.
  • Action function 역시 n-step 이후의 state Q^(st+n,a;θ^)\hat{Q}(s_{t+n}, a; \hat{\theta})을 target으로 한다.
  • Multi-step Learning은 미래의 정보를 알 때 더 유리한 경우에 사용하면 좋다.


2️⃣ Double DQN

🔷 Q-Learning의 pseudo code

🔻 Q-Learning의 pseudo code

Q(S,A)Q(S,A)+α[R+γmaxaQ(S,a)Q(S,A)]Q(S,A) \leftarrow Q(S,A) + \alpha [R + \gamma \max_a Q(S', a) - Q(S,A)]
  • maxaQ(S,a)\max_a Q(S', a)를 통해 Optimal action function을 선택하기 때문에 overestimated되는 경향이 있다.

🔻 Double Q-Learning

with 0.5 probability

Q1(S,A)Q1(S,A)+α[R+γQ2(S,argmaxaQ1(S,a))Q1(S,A)]Q_1(S,A) \leftarrow Q_1(S,A) + \alpha [R + \gamma Q_2(S', \arg \max_a Q_1(S', a)) - Q_1(S,A)]

else:

Q2(S,A)Q2(S,A)+α[R+γQ1(S,argmaxaQ2(S,a))Q2(S,A)]Q_2(S,A) \leftarrow Q_2(S,A) + \alpha [R + \gamma Q_1(S', \arg \max_a Q_2(S', a)) - Q_2(S,A)]
  • Double Q-Learning에서는 action function이 overestimated되는 것을 막기 위해 2개의 action-value table을 사용한다.
Double Q-Learning에 대한 추가적인 내용은 아래 링크에서 확인 가능하다.
📃자료: https://velog.io/@tina1975/Deep-Reinforcement-Learning-15강-Temporal-Difference-Learning-3

🤔 생각해볼 점

Q:Q: Q-Learning에서 overestimated 되는 현상이 발생하는데 만약 모든 Q(s,a)Q(s,a)에 대하여 동등하게 overestimated되면 어떤 현상이 발생할까?

A:A: 그렇다면 아무 문제가 없다. 우리는 Q(s,a)Q(s,a)값의 크기가 아닌 상대적 크기를 통해 어떤 action을 선택할 지 결정하는 것에 집중하기 때문이다.

Q:Q: 그렇다면 동등하게 overestimated될 수도 있는데 굳이 Double Q-Learning을 사용할 필요가 있을까?

A:A: 강화학습에서 학습을 진행할 때는 sample episode에 대하여 Q(s,a)Q(s,a)가 업데이트 되기 때문에 Uniform하게 overestimated 되는 것이 쉽지 않다.


🔷 Double DQN

  • DQN에 Double Q-Learning을 적용한 모델이다.
  • Double Q-Learning을 적용하여 DQN의 overestimation bias를 줄일 수 있다.

🔻 DQN의 Loss function

L(θ)=[rt+1+γmaxaQ^(st+1,a;θ^)Q(st,at;θ)]2L(\theta) = [r_{t+1} + \gamma \max_a \hat{Q}(s_{t+1}, a; \hat{\theta}) - Q(s_t, a_t; \theta)]^2
  • Behavior Network θ\thetatarget Network θ^\hat{\theta}가 존재한다.

🔻 Double DQN의 Loss function

L(θ)=[rt+1+γQ^(st+1,argmaxaQ(st+1,a;θ);θ^)Q(st,at;θ)]2L(\theta) = [r_{t+1} + \gamma \hat{Q}(s_{t+1}, \arg \max_a Q(s_{t+1}, a; \theta); \hat{\theta}) - Q(s_t, a_t; \theta)]^2
  • DQN의 Behavior Network θ\theta와 target Network θ^\hat{\theta}Q1,Q2Q_1, Q_2로 구분하여 Loss function을 설계할 수 있다.
  • Behavior Network θ\theta를 통해 action을 선택한 후 target Network θ^\hat{\theta}을 통해 Q(s,a)Q(s,a)를 정의한다.
  • 새로운 Network 설계 없이 구현 가능하다는 장점이 있다.
  • DQN과 비교하여 Q-value의 정확도가 높고, policy의 성능이 더 좋다.


3️⃣ Prioritized Replay

🔷 Online RL의 문제점

Online RL에서 데이터는 시간에 따라 계속해서 수집된다. 모델은 이 데이터를 통해 업데이트를 진행한다. 즉 시간 순으로 Incrementally하게 파라미터를 업데이트한다.
그런데 시간 순으로 업데이트를 진행할 경우 temporal correlation이 강해진다. 이에 따라 성능이 현저히 떨어진다. 또한 가끔 등장하는 중요한 데이터를 놓치는 경우 역시 발생한다.

이를 해결하기 위해서 DQN은 Experience replay를 사용한다.


🔷 Experience replay

  • 모델이 수집한 데이터 (st,at,rt+1,st+1)(s_t, a_t, r_{t+1}, s_{t+1})Replay Buffer에 저장한다.
  • 파라미터를 업데이트할 때 Replay Buffer에 저장된 데이터를 sampling한다.
Replay Buffer에 대한 추가적인 내용은 아래의 글에서 확인 가능하다.
📃 자료: https://velog.io/@tina1975/Deep-Reinforcement-Learning-17강-DQN-1

🔷 Prioritized replay

  • Prioritized replay는 replay buffer에서 sampling을 할 때 중요한 데이터를 더 많이 가져올 수 있도록 하는 방법이다.
  • 이를 위해서 Replay Buffer 속 각 데이터에 priority를 부여한다.

🤔 데이터의 중요성은 어떻게 판단을 하지?

  • 각 데이터의 중요성Temporal Difference Errror를 통해 파악한다.
  • TD error가 클수록 더 중요한 데이터라고 판단한다.

🔻 Temporal Difference error

P(i)=piαkpkα  where  pi=ri+1+γmaxaQ^(si+1,a;θ^)Q(si,ai;θ)+ϵP(i) = \frac{p_i^\alpha}{\sum_k p_k^\alpha} \ \text{ where } \ p_i = |r_{i+1} + \gamma \max_a \hat{Q}(s_{i+1}, a; \hat{\theta}) - Q(s_i, a_i; \theta)| + \epsilon
  • Gradient descent를 계산할 때 사용하던 값이다.
  • pi:p_i: 각 sample에 대한 Temporal Difference error의 크기이다.
  • P(i)P(i)α\alphapriority의 세기를 조절하는 파라미터이다.

🔷 Priority sampling의 문제점

🔻 Loss of diversity

  • 데이터에 Priority를 부여하였기 때문에 파라미터를 업데이트할 때 특정 데이터를 많이 사용하는 “쏠림 현상”이 발생한다.
  • 이를 완화하기 위해 Stochastic sampling prioritization을 사용한다.

🔻 Bias

  • Sampling을 하는 확률 분포가 바뀌었기 때문Bias가 발생한다.
  • 추정치는 sample 데이터가 통계적으로 uniform하다고 가정하기 때문이다.
  • 이를 해결하기 위해 Importance sampling weight를 적용한다.


4️⃣ Prioritizing with TD error

🔷 TD error로 Priority를 부여하는 이유

데이터를 업데이트할 때 sample data를 Uniform하게 사용하는 것보다 Priority를 부여한 후 sampling하는 것이 더 좋은 성능을 보이는 경우가 많다.

그래서 기존에도 sample에 priority를 부여하는 경우가 많았다. 그렇다면 어떤 기준으로 priority를 부여할 것인가? 바로 state value값의 변화량을 기준으로 priority를 준다.

Temporal Difference Error가 state value값의 변화량을 확인하기 좋은 지표이기 때문이다.


예시를 들어 한번 이해해보자.

어떤 로봇이 계속 넘어지다가 한번 제대로 걷는 방법을 경험했다고 하자. 모델은 계속해서 넘어지기 때문에 대부분의 sample은 넘어지는 데이터일 것이고 제대로 걷는 데이터는 아주 적을 것이다. 우리는 이 적은 데이터가 더 많이 sampling되도록 하는 것이 목적이다.

로봇이 평소에 계속 넘어지다가 가끔 제대로 걷는다면 이때 얻게 되는 reward와 state value는 굉장히 클 것이다. 이는 모델이 학습할 것이 많다는 의미이기도 하다. 그래서 우리는 이를 의미하는 temporal difference error를 기준으로 priority를 부여한다.


🔻 계산적 효율성

  • DQN의 gradient descent를 계산할 때 TD error를 이미 계산하기 때문에 추가적인 연산과정이 필요하지 않다.


5️⃣ Prioritized replay의 하이퍼파라미터

🔷 Priority 업데이트 과정

  1. Replay Buffer에 있는 데이터에서 minibatch 만큼 데이터를 sampling한다.
  2. 이후 업데이트를 진행할 때 sampling된 데이터에 대하여 TD error를 다시 계산하게 된다.
  3. 즉 minibatch에 있는 데이터에 대하여는 조금 더 정확한 pip_i 값을 추출하게 된다.
  4. 이 데이터를 활용하여 minibatch로 sampling된 데이터의 priority를 업데이트한다.

🔷 Prioritized replay의 한계

🔻 Loss of diversity

  • 학습 초기에 TD error가 큰 데이터가 자주 sampling된다.
  • 그 결과 모델이 lack of diversity를 겪에 되어 overfitting되기 쉽다.

🔻 Bias

  • 모델을 업데이트할 때마다 priority가 업데이트 되기 때문에 확률 분포가 계속해서 변하여 bias가 발생한다.

🔷 해결 방법

🔻 하이퍼파라미터 α\alpha 사용

P(i)=piαkpkα  where  pi=ri+1+γmaxaQ^(si+1,a;θ^)Q(si,ai;θ)+ϵP(i) = \frac{p_i^\alpha}{\sum_k p_k^\alpha} \ \text{ where } \ p_i = |r_{i+1} + \gamma \max_a \hat{Q}(s_{i+1}, a; \hat{\theta}) - Q(s_i, a_i; \theta)| + \epsilon
  • 하이퍼파라미터 α\alpha값을 0으로 조정하면 uniform하게 sampling을 진행할 수 있다.
  • 하이퍼파라미터 α\alpha은 sampling 시 priority를 얼마나 반영할 지 결정한다.

🔻 Importance sampling weight 사용

wi=(1N1P(i))βw_i = \left( \frac{1}{N} \cdot \frac{1}{P(i)} \right)^\beta
  • Importance sampling weight는 “샘플링”과정이 아닌 “업데이트”과정에 적용된다.
  • Q-Learning에서 Q-value를 업데이트 할 때, sampling된 데이터는 Uniform하다고 가정한다.
  • 만약 이 가정이 깨지면 우리가 추정하는 Q-value값에는 통계적 bias가 발생한다.
  • Bias를 없애기 위하여 weights를 곱해줄 수 있다.
  • 그 결과 priority가 높은 데이터는 적게 업데이트되고, priority가 낮은 데이터는 많이 업데이트되어 bias를 상쇄한다.
  • 학습 초기에는 β\beta 값을 0에 가깝게 하여 bias를 감수하더라도 효율적으로 학습이 되도록 한다.
  • 이후 β\beta 값을 1에 가깝게 하여 Q-value값이 정확하게 수렴할 수 있도록 안정적으로 학습한다.


6️⃣ Double DQN with prioritized replay의 pseudo code

🔻 구현 시 주목해야할 부분

Replay period K:K: KK 개의 sample이 replay buffer에 추가될 때마다 파라미터 업데이트를 진행한다.


🔻 Double DQN이 구현된 부분

δi=rt+1+γQ^(st+1,argmaxaQ(st+1,a;θ);θ^)Q(st,at;θ)\delta_i = r_{t+1} + \gamma \hat{Q}(s_{t+1}, \arg \max_a Q(s_{t+1}, a; \theta); \hat{\theta}) - Q(s_t, a_t; \theta)
  • Optimal Q-value를 선택할 때, target Network가 아니라 behavior Network를 기준으로 선정한다.

🔻 Prioritized replay가 구현된 부분

iP(i)=piα/kpkαi \sim P(i) = p_i^\alpha / \sum_k p_k^\alpha
  • priority를 통해 minibatch를 sampling한다.

wi=(NP(i))β/maxkwkw_i = (N \cdot P(i))^{-\beta} / \max_k w_k
  • Importance sampling weight를 구한다.

Update transition priority piδi\text{Update transition priority } p_i \leftarrow |\delta_i|
  • Temporal Difference error를 구한 후 priority를 업데이트한다.

Accumulate weight-change ΔΔ+wiδiθQ(si,ai;θ)\text{Accumulate weight-change } \Delta \leftarrow \Delta + w_i \delta_i \nabla_\theta Q(s_i, a_i; \theta)
  • Importance sampling weight를 사용하여 가중치 업데이트를 진행한다.


7️⃣ 정리

🔷 19강에서 배운 내용은 아래와 같다.

  1. Multi-step Learning의 개념과 유리한 상황에 대해 배웠다.
  2. Double-DQN을 구현하는 방법에 대해 살펴보았다.
  3. Prioritized Replay의 장점과 한계에 대해 살펴보았다.
  4. Prioritized Replay의 한계를 극복하기 위한 Importance sampling weight을 배웠다.
  5. Prioritized replay가 반영된 Double DQNpseudo code에 대해 살펴보았다.
profile
I'm curious about AI

0개의 댓글