[2025-1] 김은서 - Playing Atari with Deep Reinforcement Learning (DQN 논문)
https://youtu.be/36tvs0H2mww?si=YUfvzTu4OhOxNG_W
논문 링크: dqn.pdf
Q-Learning
Q-Learning 알고리즘은 DQN(Deep Q Network)의 기반이다.
$$ updates; Q(S_{t}, a_{t}) ← Q(S_{t}, a_{t}) + \alpha(R_{t} + \gamma max_{a_{t+1}} Q(S_{t+1}, a_{t+1})-Q(S_{t}, a_{t})) $$
위의 식에서
- 현재 상태: $S_{t}$
- 현재 행동: $a_{t}$
- 다음 상태: $S_{t+1}$
- 대상 행동: $a_{t+1}$
따라서 Q-Learning에서, 현재의 Q값은 현재 Q값과 다음 State에서 가능한 모든 행동 중 가장 큰 Q 값(Q’)을 이용하여 업데이트된다. Q-Learning은 Q-table을 사용하여 모든 상태-행동 쌍의 Q값을 저장하며, 이 Q-table은 학습 과정에서 점진적으로 최적의 정책에 수렴하게 된다.
Q-Learning에서 Q’값을 알기 위해서는, 현재 State에서 가능한 모든 action에 대해 Q값을 계산한 후, 다음 State에서 가능한 모든 행동에 대한 Q값 중 가장 큰 값을 찾는다. 이렇게 되면 계산량이 많아지는 문제점이 발생한다.
Q-function
이때, State수가 엄청나게 많아지면 table을 작성하는 것이 힘들어진다.
이러한 문제를 해결하기 위해서는 Q-table이 아닌 Q-function을 사용해야한다.
이 함수는 해당 State에서 취할 수 있는 모든 action의 Q 값에 mapping한다. 이때, 최적의 Q 값을 출력할 수 있도록 가중치(Weights)를 학습한다.
DQN
DQN에서 CNN은 Q-function을 근사하는 역할을 한다. 정확히 말하자면, CNN은 상태 $S$를 입력으로 받아 해당 상태에서 가능한 행동 $a$들에 대한 $Q(S,a)$를 출력하는 함수이다.
DQN에서 업데이트가 될 때, Q-function의 weight가 업데이트된다.
핵심 Contribution
- CNN을 사용하여 인간처럼 Q값을 업데이트할 수 있다.
- Experience Replay를 사용할 때, mini-batch SGD를 이용하여 State correlation이 많이 줄어들었다.
Experience Replay와 mini-batch SGD
Experience Replay는 에이전트가 경험한 데이터(상태-행동-보상-다음 상태)를 Replay Buffer에 저장하고, 이를 재사용하는 방법이다. 학습 시 Replay Buffer에서 랜덤하게 일정 크기(mini-batch)의 데이터를 샘플링한다.
mini-batch SGD는 샘플링한 데이터를 사용하여 손실 함수의 기울기를 계산하고, 모델 가중치를 업데이트해 나간다.
알고리즘
- Replay Buffer은 D, capacity는 N이라고 하자 (N에서 넘치면 오래된 것부터 삭제) - 1
- Q값을 위한 weight를 랜덤으로 초기화 한다 (Network를 초기화하는 것이기 때문에) - 2
- ε-greedy를 진행한다 - 6,7
- $a_{t}$를 하고 $r_{t}$를 얻고 다음 이미지 $x_{t+1}$로 간다 - 8
- $s_{t}, a_{t}, x_{t+1}$를 이용하여 $s_{t+1}$을 구하고 transition $\phi$ 을 preprocess한다 - 9
- D에 transition을 저장한다 - 10
- D로 부터 mini-batch trainsitions을 샘플하라 - 11
- terminal이면 다음 Q값은 없고, terminal이 아니면 주어진 식과 같이 Q값을 업데이트한다 -12
- $y_{j}$에 다가가도록 $θ$(weight)를 업데이트를 한다 -13