[RL] 6. DQN(Deep Q Network)

2024. 4. 28. 20:16RL

지금까지는 상태와 행동의 가짓수가 적은 문제만 다뤘기 때문에, 행동 가치 함수(Q 함수)를 테이블로 관리해도 아무런 문제가 없었다.

하지만 현실은 훨씬 복잡하기 때문에 Q 함수를 테이블로 관리하는 건 현실적으로 불가능하다.

 

해결책으로 Q 함수를 더 가벼운 함수로 근사하는 방법을 생각해볼 수 있으며, 딥러닝이 현시점 가장 유력한 후보다.

 

이번 글에서는 강화학습에서 가장 유명한 알고리즘인 Q 러닝과 DNN(Deep Neural Network)의 결합인 DQN (Deep Q Network)에 대해 알아볼 것이다.

DNN으로 Q 함수를 표현

지금까지는 Q 함수를 테이블로 Q 함수를 표현(관리)했다.

이제 테이블로 표현한 Q 함수를 DNN으로 "변신"시켜보자.

다시 말해, DNN으로 Q 함수를 근사해보자.

 

우선, DNN의 입출력 관계를 명확히 규정해야 한다. 몇 가지 후보가 존재하지만, 대표적으로 두 가지를 생각해볼 수 있다.

1. 상태와 행동 두 가지를 입력으로 받고 해당 행동의 Q-value을 출력해주는 관계

2. 상태만 입력으로 받고 (에이전트가 취할 수 있는) 모든 행동의 Q-value을 출력해주는 관계

두 관계는 서로 다른 신경망 구조를 가진다.

 

$\underset{a}{\max} Q(s, a)$의 계산 비용 측면에서 두번째 구조가 첫번째 구조보다 유리하기 때문에 두번째 구조를 일반적으로 많이 사용한다.

목표 함수(손실 함수)

Q 러닝에서 Q 함수는 다음과 같이 갱신했다.

$$Q_\pi^\prime(S_t,A_t) = Q_\pi(S_t, A_t) + \alpha\{R_t + \gamma \underset{a}{\max} Q_\pi(S_{t+1}, a)- Q_\pi(S_t, A_t)\}$$

 

$Q_\pi(S_t,A_t)$은 TD의 목표인 $R_t + \gamma \underset{a}{\max} Q_\pi(S_{t+1}, a)$ 방향으로 갱신된다고 볼 수 있다.

이를 딥러닝 맥락에 대입해 표현하자면, $Q_\pi(S_t,A_t)$이 $R_t + \gamma \underset{a}{\max} Q_\pi(S_{t+1}, a)$가 되도록 학습시키고 있다는 뜻이다.

즉, $Q_\pi(S_t,A_t)$의 정답이 $R_t + \gamma \underset{a}{\max} Q_\pi(S_{t+1}, a)$인 회귀 문제로 볼 수 있다는 뜻이다.

그러므로, MSE를 활용해 다음과 같이 손실 함수를 표현할 수 있다.

$$\text{MSE} = (y - t)^2$$

$$(y = Q_\pi(S_t,A_t), t = R_t + \gamma \underset{a}{\max} Q_\pi(S_{t+1}, a))$$

DQN의 핵심 기술

Q 러닝(TD법)은 추정치로 추정치를 갱신하는 부트스트래핑 기법을 사용한다. 

아직 정확하지 않은 추정치로 추정치를 갱신하기 때문에 불안정해지기 쉽다는 성질을 가지고 있다.

더군다나, 표현력이 높은 DNN으로 함수를 근사화하면 더욱 불안정해진다.

DNN은 표현력이 높아 과대 적합(학습 데이터에 지나치게 맞춰진 경우)이 일어날 수 있기 때문이다.

 

이를 방지하기 위해 즉, 학습을 안정화하기 위해 "경험 재생"과 "목표 신경망"을 사용한다는 것이 DQN의 특징이다.

경험 재생(experience replay)

일반적인 지도 학습에서는 무작위로 데이터를 추출해 미니배치를 만들어 데이터 편향을 막는다.

예를 들어, 손글씨 숫자 이미지 모음인 MNIST에서 무작위로 데이터를 추출해 특정 숫자만 뽑히는 것을 방지해 데이터 편향을 막는다.

 

Q 러닝은 에이전트가 환경에서 실제로 행동을 취해 경험 데이터($E_t = [S_t, A_t, R_t, S_{t+1}]$)를 생성한다. 

이때, 경험 데이터 사이에는 강한 상관관계가 있다. ($E_t$와 $E_{t+1}$ 사이에는 강한 상관관계가 존재)

다르게 표현하면, 상관관계가 높은 데이터들로 미니배치를 구성한다.

이것이 바로 지도 학습과 Q 러닝의 차이점이다.

 

경험 재생(experience replay)는 이 차이를 메우는 기법이다.

경험 재생 기법은 경험 데이터를 버퍼에 저장하고, Q 함수를 갱신할 때 버퍼에서 무작위로 경험 데이터를 꺼내 미니배치를 구성한다. 이는 경험 데이터 사이의 상관관계를 악화시켜 편향이 막아주는 역할을 한다.

 

참고로, 경험 재생은 오프-정책 알고리즘에만 사용 가능하다. 온-정책 알고리즘은 현재 정책에서 얻은 데이터만 사용 가능하기 때문이다.

온-정책은 $A_{t+1}$을 미리 뽑고, 오프-정책은 $A_{t+1}$을 갱신할 때 뽑는다. 즉, 뽑을 시점의 정책으로 $A_{t+1}$을 뽑기 때문에 오프-정책에서만 사용 가능하다.

목표 신경망(target network)

지도 학습의 정답 레이블은 변하지 않지만, Q 러닝에서 정답 레이블인 TD의 목표는 Q 함수가 갱신될 때마다 달라진다.

 

목표 신경망(target network)는 이 차이를 메우기 위해 TD 목표의 값을 일시적으로 고정시켜주는 기법이다.

 

목표 신경망(T-net)은 Q 함수 신경망과 동일한 구조를 갖고 있으며, 주기적으로(e.g., 에피소드가 끝날 때마다) Q-net의 매개변수와 동기화시킨다. 물론, 그 외에는 매개변수를 고정시킨다.

이는 TD 목표가 바뀌는 것을 억제해 학습의 안정화를 기대할 수 있다.

 

가타 아이디어

1. $\epsilon$값 조정: 에피소드 수에 비례해 탐색의 비율을 줄이는 편이 합리적이다. (당연한 말이지만, 실제로 행동할 때는 $\epsilon$-탐욕 정책을 사용한다.)

2. reward clipping: 보상의 범위를 -1.0 ~ 1.0 사이로 조정 및 제한하는 기법이다. 이로 안정성 및 학습 속도 향상을 기대할 수 있다.

DQN 확장

1. Double DQN

Q 함수 신경망과 목표 신경망의 매개변수가 각각 $\theta$, $\theta^\prime$이라 할 때, DQN의 target은 $R_t + \gamma \underset{a}{\max}Q_{\theta^\prime}(S_{t+1}, a)$이다.

이때, $\underset{a}{\max}Q_{\theta^\prime}(S_{t+1}, a)$가 over-estimate되는 문제가 발생한다.

 

이 문제에 대해 자세히 알아보자.

현재 목표 신경망의 탐욕 정책은 $\theta^\prime$에 의해 결정되기에 이를 $\mu_{\theta^\prime}$로 표기하자.

그리고, $\mu_{\theta^\prime}$의 실제 Q 함수를 $q_{\theta^\prime}$라 하고, 목표 신경망으로 추정한 $\mu_{\theta^\prime}$의 Q 함수를 $Q_{\theta^\prime}$라고 하자. 

이때, 오차가 포함된 추정치 $Q_{\theta^\prime}$에 $\max$ 연산을 수행하면 실제 Q 함수 $q_{\theta^\prime}$를 사용해 계산할 때보다 값이 커지는 문제가 발생한다. ($\underset{a}{\max}Q_{\theta^\prime}(S_{t+1}, a) > \underset{a}{\max}q_{\theta^\prime}(S_{t+1}, a)$)

 

이유를 직관적으로 설명하자면, 오차가 있는 추정치에 대한 $\max$ 연산은 과소 평가(음의 방향 오차)된 값보다 괴대 평가(양의 방향 오차)된 값을 선호하는 경향을 보이기 때문이다.

 

이를 방지하기 위해 Double DQN은 action의 선택과 평가를 분리한다.

행동을 선택할 때는 Q 함수 신경망을 사용하고, 평가할 때는 목표 신경망을 사용해 over-estimate 문제를 억제한다. 

$$Q_{\theta^\prime}(S_{t+1}, \text{argmax } Q_{\theta^\prime}(S_{t+1}, a)) \rightarrow Q_{\theta^\prime}(S_{t+1}, \text{argmax } Q_\theta(S_{t+1}, a))$$

행동을 선택할 때는 Q 함수 신경망을 사용하면 값이 최대가 아닌 action 즉, $A_{t+1} \neq \underset{a}{\text{argmax }} Q_{\theta^\prime}(S_{t+1}, a)$을 선택할 수 있기 때문이다.

 

결론, Double DQN의 target은 $R_t + \gamma Q_{\theta^\prime}(S_{t+1}, \underset{a}{\text{argmax }} Q_\theta(S_{t+1}, a))$다.

 

2. 우선순위 경험 재생(PER)

갱험 재성 기법을 더욱 발전시킨 것이 우선순위 경험 재생(prioritized experience replay)이다.

경험 데이터를 무작위로 선택하는 대신 우선순위에 따라 선택하도록 하는 기법이다.

 

우선순위를 정하는 방식은 다음과 같다.

우선순위는 TD법의 목표인 $R_t + \gamma \underset{a}{\max} Q_{\theta^\prime}(S_{t+1}, a)$와 와 예측값인 $Q_\theta(S_t, A_t)$의 차이에 절댓값을 씌워 정하며 이를 $\delta_t$로 표기한다.

 

$\delta_t$는 클수록 수정할 것이 많다. 즉, 배울게 많다. 반대로, $\delta_t$가 작을수록 배울 것이 적다.

즉, 클수록 우선순위가 높기 때문에, $\delta_t$로 경험 데이터 $E_t$가 선택될 확률을 $p_i = {\delta_i \over \sum_{k=0}^N \delta_k}$로 구한다.

 

3. Dueling DQN

Dueling DQN은 DQN의 신경망 구조를 개선한 기법이다.

이 기법의 핵심은 advantage function이다. advantage function은 Q 함수와 상태 가치 함수의 차이이며 수식으로 표현하면 다음과 같다.

$$A_\pi(s, a) = Q_\pi(s, a) - V_\pi(s)$$

 

advantage function은 a라는 행동이 $\pi$에 따라 행동할 때보다 얼마나 좋은지 혹은 얼마나 나쁜지를 나타내는 함수다.

다시 말해, a라는 행동이 정책 $\pi$에 따라 선택되는 행동보다 얼마나 이로운지 혹은 얼마나 해로운지를 나타내는 지표다.

 

advantage function을 다음과 같이 변형하면 $Q_\pi(s, a) = A_\pi(s, a) + V_\pi(s)$로 Q 함수를 구할 수 있다.

이와 같이, Dueling DQN도 advantage function와 상태 가치 함수로 Q 함수를 구하는 구조를 채택했다.

 

기존 DQN은 $s$ 상태에서 실제로 한 행동 $a$에 대해서만 학습이 이뤄졌다.

하지만, Dueling DQN은 $V(s)$를 경유하기 때문에 $s$ 상태에서 다른 행동 $a^\prime$을 해도 $V(s)$가 학습되어 $Q(s, a)$의 근사 성능이 향상된다.

이러한 특성 덕분에 학습이 빨라지리라 기대할 수 있다.

 

이는 어떤 행동을 해도 결과가 달라지지 않은 상황(동일한 결과를 내보이는 상황=결과가 확정된 상황)에서 빛을 더 발한다.