특정 문제를 완벽히 풀어내는 해답이 생기면 연구는 중단된다. 하지만 문제를 제한적으로 풀어내는 해답이 지속 제시된다면, 개선된 방법이 지속적으로 연구된다. MDP 문제를 푸는 강화학습도 문제의 성격에 따라, 기존 답안 보다 더 좋은 방법들이 지속적으로 연구되어 왔다.
MDP 문제 중 환경을 알 때 적용 가능한 Dynamic Programming, 환경을 모를 때 적용 가능한 Monte Carlo, Temporal Difference, SARSA, Q-Learning 등.. 그리고 현실의 많은 문제들이 state를 Table 형태로 표현이 불가능하기 때문에 (너무 많아서), 인공 신경망을 접목하는 방법들이 연구되어 왔다. 이전 글에서는 정책을 인공신경망으로 근사하는 REINFORCE 알고리즘을 정리했다. 오늘은 정책이 아닌 Q함수를 인공신경망으로 근사하고, 인공신경망을 잘 학습시키는 몇가지 아이디어를 제공한 (그리고 매우 유명한) DQN에 대해 정리한다.
DQN은 Deep Q Network의 약자이다. 이는 엄청난 인용수를 가진 아래 논문에서 제시되었다. DQN은 단순히 네트워크의 구조를 말하는 것이 아니라, Experience Replay 및 Target Network 개념을 도입하고 이미지 입력을 CNN을 사용해 MDP 문제를 푼 전체 프레임 워크를 말한다. DQN을 제시안 아카이브 및 저널 논문은 각각 아래와 같다.
아카이브 : PlayingAtari with Deep Reinforcement Learning,
Nature : Human-level control through deep reinforcement learning
DQN의 특징은 3가지이다.
1. 행동 가치 함수(이하 Q함수)를 인공신경망으로 근사한다. 타임스텝별로 에피소드와 상호작용을 통해 얻는 데이터로부터 인공신경망을 학습한다.
2. Experience Replay를 사용한다.
3. Target Network를 사용한다.
이를 차례대로 한가지씩 정리하자.
1. Q함수를 인공신경망으로 근사
Q함수는 특정 state에서 action을 선택했을 때, 얻을 수 있는 반환값의 기댓값이다. 따라서 Q함수를 근사한 인공신경망도 state를 입력으로 받아 Action에 대한 Q 값들을 출력한다. 이때 인공신경망의 출력 Q함수 개수는 Action의 개수와 동일하다.
Q함수를 인공신경망으로 근사하는 방법은 DQN이 처음 시도한 것은 아니다. Deep SARSA 또한 Q함수를 인공신경망으로 근사했는데, 인공신경망을 학습하는데 사용되는 Loss Functino의 정의가 다르다. 이름에서 알 수 있듯이 Deep SARSA의 Q함수 업데이트 목표값은 SARSA와 동일하게 입실론 탐욕정책이 사용된다. 반면 DQN은 Q-learning과 같이 탐욕정책을 사용한다. 이를 식으로 표현하면 아래와 같다.
Deep SARSA
$$ MSE\, = \,(R_{t+1} \, + \, \gamma Q(s_{t+1},\,a_{t+1})\,\, - \, Q(s_{t},\,a_{t} ))^{2} $$
DQN
$$ MSE\, = \,(R_{t+1} \, + \, \gamma\, max \, Q(s_{t+1},\,a_{t+1})\,\, - \, Q(s_{t},\,a_{t} ))^{2} $$
즉, DQN은 Q함수 근사 인공신경망을 학습할 때 Q-Learning의 Q함수 업데이트 방법을 사용한다.
2. Experience Replay (이하 ER)
ER이란, Agent가 환경에서 상호작용하는 데이터를 일정 크기의 메모리에 저장해놓고, 메모리에서 특정 크기의 batch 만큼 데이터를 샘플링하여 학습을 진행하는 방법을 말한다. ER이 가지는 장점은 아래 3가지가 있다.
1. 기존 방법(ER 사용 전)에서, 학습에 사용되는 샘플들은 시간 연관성이 존재했다. (action 한번 취하고 학습을 진행하는데, 과거 State와 현재 State에서의 데이터가 연관성이 있다.. 과거 선택한 action이 좋은 action이더라도 이후 선택한 action이 안좋을 경우 잘못 학습될 수 있음). ER에서는 과거의 데이터와 함께 batch로 여러 데이터를 뽑아서 학습하기 때문에, 학습에 사용되는 샘플들 간 상관 관계를 없앨 수 있다. (이게 왜 좋은지 잘 이해 안됨..)
2. 학습 시, 하나의 데이터가 아닌 여러개의 데이터를 사용하므로 업데이트 량(Gradient 값의 variance)이 상대적으로 작다. 그래서 안정적인 학습이 가능하다.
3. ER 메모리는 FIFO로 관리된다. 따라서 최근의 데이터만 저장되어 있다. 학습이 충분히 진행된 상황이라면, 메모리에 남아 있는 샘플들은 올바르게 학습이 진행될 수 있는 좋은 데이터들일 것이다. 따라서 한번의 잘못된 데이터를 취득하더라도 과거의 좋은 데이터가 추출되어 같이 학습될 수 있다. (하지만 반대로, local minima에 빠지거나 학습 초기에 학습 속도가 느려질 수 있지 않나?)
3. Target Network
DQN의 Q함수 근사 인공신경망의 업데이트 방법은 아래와 같다.
$$ MSE\, = \,(R_{t+1} \, + \, \gamma\, max \, Q(s_{t+1},\,a_{t+1})\,\, - \, Q(s_{t},\,a_{t} ))^{2} $$
그런데, 목표 Q함수 값을 출력하는 인공신경망과 현재 상태의 Q함수 값을 출력하는 인공신경망이 동일하다. 그럼 학습이 1회 진행되었을 때, 인공신경망의 가중치 값이 바뀌므로 목표 함수 Q값도 조금 변하게 된다. 즉, 학습이 진행될 수록 목표값이 학습에 의해 변경되는 것이다. DQN의 MSE는 Temporal Difference 방식이다. (Bootstrap) 즉, 업데이트 목표 값으로 자기 자신을 사용하기 때문에 내재된 Bias가 존재한다. 이로 인해 학습 횟수가 충분히 늘더라도 무조건 참 값으로 수렴하지 않는다. 즉 DQN의 인공신경망 Loss function은 이미 Bias를 내포하고 있는데, 인공신경망이 학습됨에 따라 목표 값이 변해 이 Bias의 영향이 커질 수 있다.
이를 해결하기 위해 DQN에서는 업데이트 목표 값을 출력하는 네트워크를 별도로 구성한다. 이를 Target Network라고 한다. 즉, MSE 수식에서 max \, Q(s_{t+1},\,a_{t+1}) 부분은 Target Network에서 출력한다. Q(s_{t},\,a_{t} ) 는 현재 학습중인 네트워크에서 출력한다. 학습은 학습 네트워크에서만 이루어지게 한다. 그리고 일정 주기로 Target Network에서 학습 Network를 복사해온다. (보통 에피소드가 끝난 후) 이를 통해 학습 네트워크의 학습에 의해 업데이트 목표 값이 변경되는 문제를 막을 수 있다.
위 논문 에서는 ER과 Target Network의 사용이, 각각을 사용하지 않았을 때보다 Q함수를 더 잘 근사하는 것으로 주장한다.
위 3가지 특성을 가진 DQN의 학습 방식을 보자.
1. 현재 상태 S_t 에서 epsilon-greedy 정책으로 행동 A_t 선택
2. 행동 A_t에 따른 한 타임 스텝 진행(State transition probability) 및 이동
3. 다음 상태 S_t+1와 보상 R_t+1 받음
4. ER의 Replay memory에 S_t, A_t, R_t+1, S_t+1 저장함
5. Replay memory 에서 일정 크기의 batch 만큼 데이터 샘플링
6. S_t, A_t를 통해 학습 네트워크에서 Q(S_t, A_t) 계산
7. S_t+1 & Max Q 를 통해 타겟 네트워크에서 Q(S_t+1, A_t+1) 계산
8. MSE를 계산하여 학습 모델의 인공신경망 가중치 학습
9. 1~8 반복
10. 에피소드 종료 시 타깃 네트워크 가중치 값을 학습 네트워크의 가중치 값으로 복사
그 외.
Q함수나 정책을 인공신경망으로 근사하는 이유는 수많은 state와 state의 dimension을 표현하기 위해서다. 보통 이런 경우는 state 가 int가 아닌 float로 표현되는 경우이거나 이미지 입력을 사용하는 경우가 된다. 전자의 경우 인공신경망을 심층 인공 신경망으로 구성하면 된다. 하지만 후자와 같이 이미지 입력을 사용하는 경우 인공신경망을 CNN으로 구성한다. 위 논문에서도 인공신경망으로 CNN을 사용했다.
패스트 캠퍼스 강의에서는 위 논문에서 학습할때 10million frame의 데이터를 사용했다고 한다. 개수로 보면 1,000만개이다. 필요한 데이터의 개수가 많은데,, 논문에서는 하나의 네트워크로 여러가지 Atari 게임을 대응해야만 했기 때문에 많은 데이터를 사용한 것으로 생각한다.
DQN이 발표된 이후, 성능을 높이기 위해 이런저런 테크닉을 추가한 방법들이 발표되었다. 대표적으로 아래 3가지가 있다.
1. Double Q-learning
2. Prioritized Replay - batch로 여러 데이터를 샘플링하고, 데이터를 (업데이트 목표 값 - 현재 Q값) 계산 값의 크기 순서대로 높은 가중치로 학습시키는 방법. 학습 수렴속도가 빠르다고 함.
3. Dueling Network
DeepMind에서 발표한 Rainbow라는 논문이 있는데, 위 테크닉을 포함해 이런저런 테크닉을 모두 종합해 적용하니, 개별 DQN 기반 방법들 보다 낫더라! 하는 내용이다. DQN의 성능을 높이고 싶을 때 이런 테크닉들을 살펴보자.
* 정책을 인공신경망으로 근사하는 방법과 Q함수를 인공신경망으로 근사하는 방법 중 무엇이 더 좋은지 모르겠다.
'개념공부 > 강화학습(Reinforcement Learning)' 카테고리의 다른 글
강화학습 8 <Continuous Action Space에 적용가능한 DDPG> (0) | 2022.01.10 |
---|---|
강화학습 7 <REINFORCE 방식을 개선한 PG 방법인 Actor - Critic> (0) | 2021.12.31 |
강화학습 5 <Policy-based RL의 시작 : REINFORCE> (0) | 2021.12.26 |
강화학습 4 <인공신경망을 활용한 강화학습 - Deep SARSA> (0) | 2021.12.24 |
강화학습 3 <환경을 모를때 MDP 풀이, MC, TD, SARSA, Q-Learning> (0) | 2021.12.01 |