👨🏫학습목표
오늘은 Multi-step Learning, Double-DQN, Prioritized Replay에 대해 배워볼 예정이다.
1️⃣ Multi-step Learning

🔻 기존 DQN의 학습 방법
L(θ)=[rt+1+γamaxQ(st+1,a;θ)−Q(st,at;θ)]2
- Loss function을 보면 다음 step으로 이동할 때의 Reward rt+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=0∑n−1γkrt+k+1
- Multi-step Learning에 사용하는 reward를 truncated n-step return이라고 한다.
L(θ)=[rt+1(n)+γnamaxQ^(st+n,a;θ^)−Q(st,at;θ)]2
- Loss function에 truncated n-step return이 사용되는 것을 확인할 수 있다.
- Action function 역시 n-step 이후의 state Q^(st+n,a;θ^)을 target으로 한다.
- Multi-step Learning은 미래의 정보를 알 때 더 유리한 경우에 사용하면 좋다.
2️⃣ Double DQN

🔷 Q-Learning의 pseudo code
🔻 Q-Learning의 pseudo code
Q(S,A)←Q(S,A)+α[R+γamaxQ(S′,a)−Q(S,A)]
- maxaQ(S′,a)를 통해 Optimal action function을 선택하기 때문에 overestimated되는 경향이 있다.
🔻 Double Q-Learning
with 0.5 probability
Q1(S,A)←Q1(S,A)+α[R+γQ2(S′,argamaxQ1(S′,a))−Q1(S,A)]
else:
Q2(S,A)←Q2(S,A)+α[R+γQ1(S′,argamaxQ2(S′,a))−Q2(S,A)]
- Double Q-Learning에서는 action function이 overestimated되는 것을 막기 위해 2개의 action-value table을 사용한다.
Double Q-Learning에 대한 추가적인 내용은 아래 링크에서 확인 가능하다.
🤔 생각해볼 점
Q: Q-Learning에서 overestimated 되는 현상이 발생하는데 만약 모든 Q(s,a)에 대하여 동등하게 overestimated되면 어떤 현상이 발생할까?
A: 그렇다면 아무 문제가 없다. 우리는 Q(s,a)값의 크기가 아닌 상대적 크기를 통해 어떤 action을 선택할 지 결정하는 것에 집중하기 때문이다.
Q: 그렇다면 동등하게 overestimated될 수도 있는데 굳이 Double Q-Learning을 사용할 필요가 있을까?
A: 강화학습에서 학습을 진행할 때는 sample episode에 대하여 Q(s,a)가 업데이트 되기 때문에 Uniform하게 overestimated 되는 것이 쉽지 않다.
🔷 Double DQN
- DQN에 Double Q-Learning을 적용한 모델이다.
- Double Q-Learning을 적용하여 DQN의 overestimation bias를 줄일 수 있다.
🔻 DQN의 Loss function
L(θ)=[rt+1+γamaxQ^(st+1,a;θ^)−Q(st,at;θ)]2
- Behavior Network θ와 target Network θ^가 존재한다.
🔻 Double DQN의 Loss function
L(θ)=[rt+1+γQ^(st+1,argamaxQ(st+1,a;θ);θ^)−Q(st,at;θ)]2
- DQN의 Behavior Network θ와 target Network θ^를 Q1,Q2로 구분하여 Loss function을 설계할 수 있다.
- Behavior Network θ를 통해 action을 선택한 후 target Network θ^을 통해 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)를 Replay Buffer에 저장한다.
- 파라미터를 업데이트할 때 Replay Buffer에 저장된 데이터를 sampling한다.
Replay Buffer에 대한 추가적인 내용은 아래의 글에서 확인 가능하다.
🔷 Prioritized replay
- Prioritized replay는 replay buffer에서 sampling을 할 때 중요한 데이터를 더 많이 가져올 수 있도록 하는 방법이다.
- 이를 위해서 Replay Buffer 속 각 데이터에 priority를 부여한다.
🤔 데이터의 중요성은 어떻게 판단을 하지?
- 각 데이터의 중요성은 Temporal Difference Errror를 통해 파악한다.
- TD error가 클수록 더 중요한 데이터라고 판단한다.
🔻 Temporal Difference error
P(i)=∑kpkαpiα where pi=∣ri+1+γamaxQ^(si+1,a;θ^)−Q(si,ai;θ)∣+ϵ
- Gradient descent를 계산할 때 사용하던 값이다.
- pi: 각 sample에 대한 Temporal Difference error의 크기이다.
- P(i)의 α는 priority의 세기를 조절하는 파라미터이다.
🔷 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 업데이트 과정
- Replay Buffer에 있는 데이터에서 minibatch 만큼 데이터를 sampling한다.
- 이후 업데이트를 진행할 때 sampling된 데이터에 대하여 TD error를 다시 계산하게 된다.
- 즉 minibatch에 있는 데이터에 대하여는 조금 더 정확한 pi 값을 추출하게 된다.
- 이 데이터를 활용하여 minibatch로 sampling된 데이터의 priority를 업데이트한다.
🔷 Prioritized replay의 한계
🔻 Loss of diversity
- 학습 초기에 TD error가 큰 데이터가 자주 sampling된다.
- 그 결과 모델이 lack of diversity를 겪에 되어 overfitting되기 쉽다.
🔻 Bias
- 모델을 업데이트할 때마다 priority가 업데이트 되기 때문에 확률 분포가 계속해서 변하여 bias가 발생한다.
🔷 해결 방법
🔻 하이퍼파라미터 α 사용
P(i)=∑kpkαpiα where pi=∣ri+1+γamaxQ^(si+1,a;θ^)−Q(si,ai;θ)∣+ϵ
- 하이퍼파라미터 α값을 0으로 조정하면 uniform하게 sampling을 진행할 수 있다.
- 하이퍼파라미터 α값은 sampling 시 priority를 얼마나 반영할 지 결정한다.
🔻 Importance sampling weight 사용
wi=(N1⋅P(i)1)β
- Importance sampling weight는 “샘플링”과정이 아닌 “업데이트”과정에 적용된다.
- Q-Learning에서 Q-value를 업데이트 할 때, sampling된 데이터는 Uniform하다고 가정한다.
- 만약 이 가정이 깨지면 우리가 추정하는 Q-value값에는 통계적 bias가 발생한다.
- Bias를 없애기 위하여 weights를 곱해줄 수 있다.
- 그 결과 priority가 높은 데이터는 적게 업데이트되고, priority가 낮은 데이터는 많이 업데이트되어 bias를 상쇄한다.
- 학습 초기에는 β 값을 0에 가깝게 하여 bias를 감수하더라도 효율적으로 학습이 되도록 한다.
- 이후 β 값을 1에 가깝게 하여 Q-value값이 정확하게 수렴할 수 있도록 안정적으로 학습한다.
6️⃣ Double DQN with prioritized replay의 pseudo code

🔻 구현 시 주목해야할 부분
Replay period K: K 개의 sample이 replay buffer에 추가될 때마다 파라미터 업데이트를 진행한다.
🔻 Double DQN이 구현된 부분
δi=rt+1+γQ^(st+1,argamaxQ(st+1,a;θ);θ^)−Q(st,at;θ)
- Optimal Q-value를 선택할 때, target Network가 아니라 behavior Network를 기준으로 선정한다.
🔻 Prioritized replay가 구현된 부분
i∼P(i)=piα/k∑pkα
- priority를 통해 minibatch를 sampling한다.
wi=(N⋅P(i))−β/kmaxwk
- Importance sampling weight를 구한다.
Update transition priority pi←∣δi∣
- Temporal Difference error를 구한 후 priority를 업데이트한다.
Accumulate weight-change Δ←Δ+wiδi∇θQ(si,ai;θ)
- Importance sampling weight를 사용하여 가중치 업데이트를 진행한다.
7️⃣ 정리
🔷 19강에서 배운 내용은 아래와 같다.
- Multi-step Learning의 개념과 유리한 상황에 대해 배웠다.
- Double-DQN을 구현하는 방법에 대해 살펴보았다.
- Prioritized Replay의 장점과 한계에 대해 살펴보았다.
- Prioritized Replay의 한계를 극복하기 위한 Importance sampling weight을 배웠다.
- Prioritized replay가 반영된 Double DQN의 pseudo code에 대해 살펴보았다.