[강화학습] Deep Q-Network <DQN> - 기본

2025.03.10 - [공부/강화학습] - [강화 학습] Markov Decision Process ((MDP))

 

[강화 학습] Markov Decision Process ((MDP))

강화 학습이란 무엇인가?- 에이전트가 환경에 대한 사전 지식없이 환경과 상호 작용하여 경험에 의해 정책을 점진적으로 개선해 나아가는 것을 의미합니다. 그럼 Planning은 무엇인가? 강화 학습

occident.tistory.com

 

DQN은 DeepMind((2013))의 첫번째 Deep Q-learning 모델입니다. CNN을 사용하여 high-dimension에서도 직접적으로 policy를 학습할 수 있게 했습니다. Continuous state spacediscrete action space를 가지며 아래 그림과 같이 CNN의 입력과 출력은 state ((raw image pixel))와 모든 action에 대한 추정된 Q-value입니다.

 

Input에 4장의 사진을 한번에 넣는다. corelation을 줄이기 위해

DQN의 inpute을 보면 84x84x4인데, 이것은 굉장히 큰 dimension이고 이 state를 모아놓은 state space는 굉장히 클 것입니다. 하지만, 각 state 하나에 대해서만 input으로 집어넣기 때문에 state space를 고려하지 않아도 되기에 굉장히 크거나 연속적인 state에 관해 효율적인 면을 보입니다. ((Q-learning은 모든 state의 table을 알아야 계산이 가능하지만, DQN은 network에 state를 input으로 넣어 output인 Q-value를 도출하면 되기 때문에, 즉 현재 상태만 알면 되기 때문에 연속적이거나 굉장히 거대한 state에 사용가능하다는 장점이 있다.))

 

1. Naive DQN

 

Q-learning

$$
Q\left(S_t, A_t\right) \leftarrow Q\left(S_t, A_t\right)+\alpha\left[R_{t+1}+\gamma \max _a Q\left(S_{t+1}, a\right)-Q\left(S_t, A_t\right)\right]
$$

DQN

$$
L(\theta)=\left[r_{t+1}+\gamma \max _a Q\left(s_{t+1}, a ; \theta\right)-Q\left(s_t, a_t ; \theta\right)\right]^2
$$

 

Target과 behavior을 minimize하는 방향으로 파라미터 $\theta$를 update 할 수 있다.

Naive DQN은 3개의 CNN 레이어와 2개의 FC 레이어를 사용하고

Linear Model은 1개의 FC 레이어를 사용하지만, 서로 성능이 비슷하다. 즉, Naive DQN은 구리다!

 

왜 성능이 안좋은지를 DeepMind가 파악하고 DQN의 2가지 문제를 해결하기 위한 기능을 추가하고, 이것은 앞으로 거의 모든 RL 모델에 적용된다. 이 문제들을 해결한 DQN은 쓸만하다!

 

2. DQN's Problems and Solutions

  1.  Experience Replay
  2. Target Network
  3. Clipping rewards

online RL에서 incrementally update를 진행한 후에 관찰된 경험은 버려지게 되는게 기본적이다.

 

Issues

  • 하지만, 이렇게 된다면 심각한 문제를 초래한다.매우 강력한 temporally-correlated update가 진행되어 i.i.d 가정이 깨져버리게 된다.

예를 들어, Robot Walking을 학습하는데, 넘어지기 시작하는 지점에서는 positive reward를 받게되며, 넘어졌다고 판단된 순간에 negative reward를 받게된다. 이렇게 되면, 넘어지기 시작하는 상태가 굉장히 안좋은 것인데, 모델은 괜찮다고 판단될 가능성이 높다.

Temporal corelation의 예시

 

  • Rare experience를 inceremental update 후에 버리게 된다.

2.1. Experience Replay

위의 Issue를 해결하기 위해, $(s, a, r, s')$의 튜플을 10000개의 buffer에 저장한다. 그리고 random하게 sample을 선택하여 network을 학습한다.

 

Replay buffer를 사용하면

  1. Network을 update할 때, sample들 간의 temporal corelation이 사라지게 된다.
  2. mini-batch 개수 만큼 update가 가능하여 속도가 빨라진다.
  3. 사용했던 sample을 재사용 가능해 data-effieciency가 굉장히 높아진다.

 

 

  1.  $\epsilon$-greedy로 Action 선택, $\mathrm{argmax}Q(s_t,a;\theta)$ 그리고, Environment에 action을 취한다. $r_{t+1}$과 $S_{t+1}$을 관찰한다.
  2. 즉시 update하지 않고, $(s_t,a_t,r_{t+1},s_{t+1})$을  replay buffer(N=100000)에 저장한다.
  3. mini-batch() 만큼을 뽑아서 network을 update한다.  

 

2.2 Target Network

Naive DQN의 non stationary target problem을 해결할 수 있는 것이 target network이다.

$$
\begin{aligned}
&\text { Naïve DQN treats } r_{t+1}+\gamma \max Q\left(s_{t+1}, a ; \theta\right) \text { as a target }\\
&L(\theta)=\left[t_{t+1}+\gamma \max Q\left(s_{t+1}, a ; \theta\right)-Q\left(s_t, a_t ; \theta\right)\right]^2
\end{aligned}
$$

 

$\theta$를 같은 네트워크를 사용한다고 가정을 해보자.

위 사진의 loss function은 target과 behavior의 차이를 minimize하는 방식으로 $\theta$룰 update할 것이다.

그러면 결국에 $Q(s_{t+1},a;\theta)$ 값 또한 바뀌고, $Q(s_{t},a;\theta)$ 또한 바뀔 것이다.

즉, update 할때마다 target도 변하고 behavior도 바뀌면, converge하기 어려워진다.

이것을 target이 고정돼있지 않고 움직이는 문제라 하여 non stationary target problem이라 한다.

 

$$
a_t=\underset{a}{\arg \max } Q\left(s_t, a ; \theta\right)
$$

behavior 항은 실제로 action은 선택할 때 사용되기 때문에, behavior Q-network이라 한다.

 

$$
\gamma \max _a \hat{Q}\left(s_{i+1}, a ; \hat{\theta}\right)
$$

 

Target의 경우 다른 network을 사용하기 때문에 target $\hat{Q}$-network이라 한다.

 

즉, 매번 미니배치만큼의 샘플을 가지고와서 파라미터 $\theta$를 update 할텐데, 그때, behavior Q-network은 계속 update를 해주고 target $\hat{Q}$-network은 update시키지 않고 고정을 해준다.

-> 그러면 network 초기화만 해주고 그 상태로 쭉 update 안하냐? (X)

-> 몇 십 episode 진행하고 target $\hat{Q}$-network도 update해준다. 즉, update 빈도를 줄인다.

같은 네트워크에 있지만, Parameter만 다르게 update하면서 사용하자!

Target Network의 parameter을 고정시켜서 non stationary target problem을 해결하자!

 

$$
\begin{aligned}
&\text { Forward pass (loss function) }\\
&L(\theta)=\frac{1}{B} \sum_{\|i\|=B}\left[r_{i+1}+\gamma \max _a \hat{Q}\left(s_{i+1}, a ; \hat{\theta}\right)-Q\left(s_i, a_i ; \theta\right)\right]^2
\end{aligned}
$$

 

$$
\begin{aligned}
&\text { Backward pass (gradient descent w.r.t. parameters } \theta \text { ) }\\
&-\nabla_\theta L(\theta)=\frac{1}{B} \sum_{\|i\|=B}\left[r_{i+1}+\gamma \max _a \hat{Q}\left(s_{i+1}, a ; \hat{\theta}\right)-Q\left(s_i, a_i ; \theta\right)\right] \nabla_\theta Q\left(s_i, a_i ; \theta\right)
\end{aligned}
$$

 

 

Backward Pass할 때, Loss function을 미분할건데, target network의 파라미터가 고정돼있다((상수로 보겠다))하면, 미분이 굉장히 쉬워진다.

 

전체 Process

 

 

2.3. Clipping Rewards

보상이 균일하지 않아서 생기는 문제를 해결하기 위해 reward를 positive= +1, negative=-1처럼 clipping하는 것

 

 

3. ETC

DQN이 Atari에서 굉장히 잘하는 게임이 있고, 못하는 게임이 있는데 어떤 특성 때문인가?

  1. DQN이 잘하는 게임
    1. 벽돌깨기, 탁구: 보상이 명확하며 자주 등장함. Image data의 변화하는 부분이 곧 중요한 정보
  2. DQN이 못하는 게임
    1. 슈퍼 마리오 같이 장기적인 전략이 필요한 게임, Partial Obsevability인 경우

 

DQN의 Breakout 학습할 때, frame을 4개씩 사용하는 이유는? 공이 어느 방향으로 이동하는지에 대한 정보를 담을 수 있어서, Markov property를 강제로 만족시키기 위해서다. 

 

 

 

엄청 큰 state dimension을 CNN을 통해 feature space로 압축이 가능하기에 CNN을 사용했고, DQN의 CNN은 Max Pooling을 사용하지 않는다. Max Pooling을 사용하는 가장 주된 이유는 translation invariance((위치가 바뀌어도 같은 정보라고 인식하고 싶은 것))상태로 만들고 싶기 때문이다. 하지만, Breakout은 공의 위치가 바뀌면 다른 것이라고 인식을 해야하기 때문에 사용 안 한다.

 

항상 강화학습을 공부하며, 질문이 들어오면, 그것이 무엇인지? 장점은? 단점은? 왜 수렴하니? 에 대해 대답할 수 있어야 된다고 생각한다.

 

고려대학교 오승상 교수님의 강화학습 동영상 및 강의 자료를 참고했습니다.