DQN
가로세로 19칸의 격자로 이루어진 바둑 공간에서 인공지능 알파고가 마주할 수 있는 상태의 수는 대략 \(10^{170}\)개로 무한의 가까운 수를 다뤄야 한다.
<바둑의 경우의 수가 361!인 이유>
처음에는 19X19=361개의 칸에 돌을 놓을 수 있고, 그 다음에는 360, 또 그 다음은 359... 이런 식으로 하나씩 경우의 수가 줄어든다고 가정하고 계산하면 361!이 나온다. 물론 그 중에 실제로 둘 수 있는 경우의 수는 1% 정도.
지금까지 살펴 보았던 격자 공간으로 문제를 해결하려고 한다면 계산량 측면에서 불가능에 직면하게 된다(차원의 저주). 따라서 인공 신경망 기법을 도입하여 이 문제를 해결하고자 한다.
이론
DQN이란 Deep-Q-Network의 줄임말로, Q-함수값을 구하는데 딥러닝 방식을 이용하는 아이디어이다. 원 논문은 "Playing atari with deep reinforcement learning).
앞선 방법들과 달리 모든 상태와 각 행동을 모두 기억할 필요 없이 인공 신경망이 상태에 관한 가치 함수인 Q-함수를 계산한다. Q-함수에 대해서 인공 신경망을 사용한 경우 파라미터 \(\theta\)를 명시하여 다음과 같이 표현한다
$$Q(s,a) \to Q_\theta(s,a)$$
이렇게 인공 신경망을 이용해 아주 많은 경우의 수를 가지는 (상태, 행동)의 조합에서도 그에 맞는 Q-함수값을 구할 수 있다. 위 수식 형태로 TD(0) 방식의 Q-learning의 업데이트 식을 다시 작성해보자
$$Q_\theta(s,a) \gets Q_\theta(s,a) + \alpha \{\gamma \text{max}_aQ_\hat{\theta}(s',a) - Q_\theta(s,a)\}$$
위 수식의 목적은 Q-함수값이 TD target에 맞도록 하는 부분이므로 목적 함수를 제곱 오차 형태로 손쉽게 작성 할 수 있다
$$Loss = \sum(R+\gamma \text{max}_aQ_\hat{\theta}(s',a)-Q_\theta(s,a))^2$$
위 목적함수를 최소화하는 방향으로 경사 하강법을 이용해 인공 신경망 파라미터 \(\theta\)를 업데이트하는 수식을 전개해보자.
$$\displaylines{\theta \gets \theta - \alpha \nabla_\theta \text{Loss} \\ \theta \gets \theta + \alpha( R+\gamma \text{max}_aQ_\hat{\theta}(s',a)-Q_\theta(s,a)) \nabla_\theta Q_\theta(s,a) }$$
전개된 수식을 살펴보면 벨만 방정식의 가치 함수, Q-함수를 업데이트 하는 식과 매우 유사한 형태를 지닌다. 주의할 점은 TD-target에 있는 신경망 파라미터 \(\hat{\theta}\)은 우리가 학습해야 할 인공 신경망의 파라미터가 아니다. 현재 우리의 논의 대상은 학습해야 할 인공 신경망 파라미터인 \(\theta\)이므로 \(\hat{\theta}\)는 상수로 봐도 무방하다. 여기까지만 생각하면 아직 에이전트가 원하는 목표에 다다를 수 없다.
인공 신경망을 이용한 Q-함수 학습의 문제점
우선 Q-함수가 업데이트는 TD target을 근사시키는 방향으로 학습하는데, 이 방식은 앞서 살펴본 TD 방식의 단점인 Low-variance, High-bias 문제에 직면하는 문제이다. 쉽게 말하면 현재 상태와 바로 다음 상태 사이의 최적 Q-함수값을 구했다고 해서 그 Q-함수 값이 전체 에피소드에서의 최적값은 아니라는 문제이다.
또한 업데이트를 진행하면서 Target에 해당하는 Q-함수값과 \(Q_\theta A(s',a)\)가 동시에 업데이트 됨에 따라 목표치 자체가 불분명(무빙 타겟 문제)해져서 학습이 올바르게 진행되지 않는다.
마지막으로 많은 상태와 행동에 대한 Q-함수값이 변화도가 매우 급해서 목적함수를 이용한 경사하강법을 적용하기에 적합하지 않다는 데 문제점이 있다.
이러한 문제점을 해결하기 위한 기법으로 리플레이 버퍼, 타깃 신경망, 보상 클리핑 등의 기법이 등장했다
경험 리플레이
시간차 학습 방식을 이용한 Q-함수 학습의 Low-variance, High-bias 문제의 해결법이다. 연속된 시간의 흐름에서 지속해서 학습하면 에이전트는 인접된 시간에서만 최적의 Q-함수를 찾는 학습을 진행한다. 하지만 이런 Q-함수는 전체 에피소드 환경에 대한 최적값이 아닌 경우가 많으므로 최대한 다양한 시점의 환경 정보를 학습하게 유도한다.
질문) 강화학습 자체가 원래 Markov 속성에 의해 현재와 바로 이전 시점만 보고 학습이 진행되는거 아닌가..? 즉 짧은 시간차이지만 계속 해답을 찾아나가다보면 globally하게도 잘 동작하는 에이전트를 학습 시킬수 있는거 아닌가 하는 궁금증. 따라서 인접된 시간에서만 최적의 Q-함수를 찾는 학습을 진행한다는 것이 단점이라고 설명해도 되는건가 싶다..
그 방법으로 컴퓨터의 메모리를 이용해 에이전트가 겪었던 기록을 저장하는 경험 리플레이 버퍼(Experience replay buffer)를 사용한다. 경험 리플레이 버퍼의 크기를 정의하고 학습을 진행하기 시작한 시점부터 "(상태, 행동, 보상, 다음 시점 상태)"를 리플레이 버퍼에 기록하고 임의 배치 크기로 샘플링하여 Q-함수를 학습한다. 임의로 샘플링하여 학습하면 연속된 시간에 대해서만 종속되는 것을 벗어나 다양한 시점에서 최적값을 찾아가는 에이전트 학습을 기대할 수 있다. "(s,a,r,s')"를 transition이라는 용어로 부른다.
DQN은 경험 리플레이 버퍼를 이용하므로 하나의 에피소드, 연속된 시간에서 순차적으로 학습하는 방식이 아니다. 그래서 Q-함수를 업데이트할 때 에이전트에 영향을 끼치는 요소는 인공신경망 자체의 행동을 결정짓는 정책이 아닌 경험 리플레이 버퍼의 배치에 영향을 받는다. 따라서 DQN 알고리즘은 Off-policy 방법의 대표적인 예시로 분류된다.
타깃 신경망
인공 신경망을 이용해서 Q-함수를 업데이트하는 과정에서 우리가 목표로 하는 TD target 값 자체가 불안정하게 바뀐다면 학습이 잘 이루어지지 않는다. 인공 신경망 학습의 큰 특징중 하나가 학습 목표를 바꾸고 학습을 진행하면 학습 이후의 인공 신경망이 학습 이전의 대상에 대한 기억을 급격하게 잊어버리는 성질이 있다. 이는 우리가 앞서 경험 리플레이로 다양한 시점에서 환경 정보를 학습할지라도 학습 대상 인공 신경망 자체가 변하면 학습이 불안정한 방향으로 진동하며 진행됨을 이야기 한다.
Catastrophic forgetting: 데이터 혹은 확률 분포를 미리 학습시킨 인공 신경망을 이용해 새로운 데이터 혹은 확률 분포를 학습시킨다면 기존의 학습시킨 성질을 잊어버리는 것을 의미. 이는 새롭게 학습시킬 데이터나 확률 분포가 기존의 것과 다를수록 본 특성은 더욱 강하게 나타난다.
따라서 DQN에서는 학습하는 훈련 에이전트 신경망(Train agent neural network, \(\theta\))과 학습의 대상이 되는 타깃 에이전트 신경망(Target agent neural network, \(\hat{\theta}\))를 분리해서 학습한다. 후에 살펴보겠지만 일정 주기 동안 학습이 완료되면 기존의 타깃 에이전트 신경망은 학습이 전혀되지 않은 부적절한 에이전트 신경망이므로, 타깃 에이전트 신경망을 훈련 에이전트 신경망의 파라미터로 업데이트해 준다.
train_agent = model()
target_gaent = model()
target_agent.load_state_dict(train_agent.state_dict())
criterion = nn.MSELoss()
Q_value = train_agent(state)
action = train_agent.get_action(Q_value)
next_state, reward, done, _ = env.step(action)
TD_target = reward + gamma * torch.max(target_agent(state), -1).values
loss = criterion(TD_target.detach(), Q_value)
보상 클리핑
인공 신경망을 이용하지 않았던 앞 장의 절벽 걷기 문제의 경우 절벽에 떨어지면 에이전트에 강력한 벌점을 부여함으로써 에이전트에 해당 행동이 올바르지 않은 것을 인지시켜 주었다. 하지만 인공 신경망을 이용해서 위와 같은 보상 혹은 벌점 부여 방식을 적용하면 목적 함수의 경사가 매우 불안정한 값을 가져 학습에 지장을 준다.
이러한 문제를 해결하고자 인위적으로 보상의 범위를 [-1, 1] 사이로 조정해 줍니다. 이 효과로 인해 목적 함수의 경사가 급격하게 변화하는 것을 방지하여 안정적인 학습을 기대할 수 있다. 마치 지도 학습에서 데이터와 레이블의 범위를 정규화 하여 [-1, 1] 사이의 수치로 바꾸는 개념과 동일하다.
파생 알고리즘
DDQN
Deep Reinforcement Learning with Double Q-learning의 약어로, DQN에서 발생하는 잘못된 가치 추정으로 인한 문제점을 제기하며 해법으로 훈련 신경망과 타깃 신경망을 이용하는 방법에 대해 논하는 이론이다.
DQN의 문제점-Overoptimism due to estimation errors
Q-함수를 이용한 학습 방식은 맨 처음부터 에이전트는 환경의 정보를 모른채 Q-함수를 추정하고 업데이트를 반복하는 전략을 취한다. 이 때문에 에이전트가 환경으로부터 발생하는 잡음을 완전히 알 수 없기에 애당초 학습 전략이 불완전하다.
직관적인 예시를 통해 알아보자. 학습 초기에 에이전트가 주어진 상태에서 최적이 아닌 다른 행동에 대해 Q-함수값을 가장 높게 추정했다고 가정해보자. 환경으로부터 다양한 보상에 대한 다양한 잡음이 쌓이고 초기에 잘못 추정한 Q-함수값이 계속해서 누적되어 결국엔 최적의 행동을 잘못 판단하게 되는 우를 범하게 된다. 이런 문제점은 에이전트가 택할 수 있는 행동의 개수가 많아질수록 오차가 크게 나타나는데 이론적으로 발생할 수 있는 가치 함수의 잘못된 값에 대한 하한을 다음과 같이 정의한다.
$$\text{max}_aQ(s,a) \geq V_*(s) + \sqrt{\frac{C}{m-1}}$$
위 수식의 왼쪽 항은 에이전트가 추정한, 다른 말로 오차를 포함한 가치 함수이며 오른쪽 항은 최적 가치 함수를 포함한 에이전트가 가치 함수를 잘못 추정할 오차의 하한을 의미한다. C는 0보다 큰 수로 Q-함수와 최적 가치 함수의 mse 목적 함수값이며, m은 에이전트가 취할 수 있는 행동의 수다.
해결책
환경의 잡음을 가지고 학습한 에이전트 이외의 다른 에이전트를 도입해 최적의 행동을 추정하고, 그 행동으로부터 Q-함수값을 이용해 학습의 타깃으로 이용한다. 이렇게 되면 학습 초기부터 잘못된 Q-함수값으로부터 얻은 행동만 고려하는 문제점을 피하여 학습을 객관적으로 수행하는 효과를 불러온다.
사실상 훈련하는 신경망, 타깃이 되는 신경망을 따로 이용했던 DQN과 거의 비슷한 양상으로 학습한다. 그러나 DDQN 알고리즘은 TD-target을 두 신경망을 교차해서 이용하는 점이 DQN과 가장 크게 구별된다. DDQN의 TD-target은 아래와 같다.
$$\text{TD_target}_{DDQN} = R_{t+1} + \gamma Q_{target}(S_{t+1}, \text{argmax}_aQ_{train}(S_{t+1},a))$$
책의 설명이 와닿지 않아서 다른 블로그 발췌
DQN은 TD-target를 계산할 때, Target Agent의 Q 함수값 중 무조건 max를 선택하기 때문에 Overoptimism 될 수 있다. 그러나 DDQN에서는 Train Agent가 최적이라고 판단한 action을 가지고 Target Agent가 가치를 판단하기 때문에 조금 더 객관적이라고 말할 수 있을 것 같다
PER
Prioritized Experience Replay의 약어로 해당 알고리즘은 DQN에서 경험 리플레이 버퍼에서부터 리플레이 transition을 추출하는 방법을 고찰하여 기존 연구보다 학습이 더 잘되는 개선점을 주장한다.
이론
Vanila DQN은 경험 리플레이 버퍼에서 임의의 trasition을 추출한다. 하지만 학습에 도움이 되는 transition 위주로 추출하면 성능이 개선 될 수 있을 것이다.
$$\displaylines{P(i) = \frac{p_i^a}{\sum_kp_k^a} \\ p_i = \begin{cases}|\delta_i| + \epsilon \\ \frac{1}{rank(i)}\end{cases}}$$
위 수식은 transition 선호도의 확률 분포이며, 이를 구성하는 \(p_i\)가 i번째 transition의 선호도이다. transition 선호도를 계산하는 방법은 두 가지로 나뉘는데, 1) TD-error값과 2) TD-error로 기준한 랭크의 역수이다.
추가로 메모리마다 단순한 학습률 이외에 가중치를 부여해 학습의 안정성을 부여하는 'Annealing the bias'라는 기법도 사용한다. 학습 초기에는 중요도에 큰 상관없이 메모리를 선택하지만, 학습을 진행해 나가면서 점차 중요한 메모리만 선택한다는 의미로 받아들이면 이해하기 쉽다.
$$\omega_i = (\frac{1}{N}\frac{1}{P(i)})^\beta$$
위 수식으로 만든 가중치를 선호도가 반영된 TD-error 원소에 각각 곱해 주어 각각의 TD-error가 과도하게 학습하는 것을 제한한다. 확률 분포 관점으로 보면 원래 기준으로 보고자 했던 확률 분포를 다른 확률 분포로 치환하여 기대값을 계산하는 중요도 샘플링(importance sampling)을 시행하는 것과 같다.
'인공지능 > [책] 강화학습 이론 & 실습' 카테고리의 다른 글
7장. 탐험의 전략-Model based learning (1) | 2025.01.01 |
---|---|
6장. 즉각적인 학습이 필요할 때 - Policy Gradient (0) | 2024.12.29 |
4장. 벨만 방정식부터 강화 학습까지 (1) | 2024.12.25 |
3장. 마르코프 의사 결정과 동적 계획법 풀이 전략 (1) | 2024.12.23 |