이번에 읽을 것은 rainbow dqn이다. 앞에 읽었던 IMPALA와 마찬가지로 이것도 Muzero논문을 읽을 때 성능 비교를 위해 나왔던 알고리즘이다. 지금 와서 보니까 다들 DeepMind의 논문이라 서로 이용해서 비교를 해본 것 같다. 오늘도 어김없이 실버 교수님이 계신다.
그리고 rainbow dqn은 관심있는 연구실의 논문을 찾아볼 때 거기서도 사용했던 논문이라 이름은 알고 있었지만 자세한 방법을 알기 위해 논문을 찾아보는 것은 지금이 처음이다.
DQN
DQN은 experience replay와 target-Q, 그리고 convolution을 통한 데이터 입력을 통해 고차원의 학습을 가능하게 한 알고리즘이다. Q-learning과 CNN을 결합했다고 볼 수 있으며 Atari 게임에서 좋은 성능을 보였다.
아래부터는 DQN이 확장된 알고리즘들이 등장한다.
Double Q-learning
기존 Q-learning에서는 과대평가 편향(overestimation bias)가 발생할 수 있기 때문에 이를 해결하기 위해 Double Q-learning이 등장했다. Double Q-learning은 행동 선택과 평가를 분리하여 작동하며 DQN과 결합도 가능하다. 손실 함수는 아래와 같다.
Prioritized replay
DQN은 리플레이 버퍼를 저장해두고 균일하게 샘플링한다. 그러나 학습할 여지가 많은 것을 더 자주 샘플링하는 것이 좋을 것이다. 그래서 TD error(Temporal Difference Error)에 기반하여 확률로 샘플링한다. 아래는 정의되는 확률이다.
Dueling networks
듀얼링 네트워크는 강화 학습에서 상태의 가치와 행동의 이점을 별도로 계산하는 구조다. 각 상태가 얼마나 좋은지와 특정 행동이 다른 행동들에 비해 얼마나 나은지를 분리해 계산한다. Q 값은 두 가지의 값이 더해져서 계산된다. 그래서 특정행동을 하지 않아도 상태가 얼마나 좋은지 판단할 수 있는 장점이 있다.
Multi-step Learning
Q-learning은 다음 단계에서 greedy하게 움직인다. 그러나 다른 방법으로 조금 더 앞을 보는 n-step 방식을 사용할 수도 있다. 적절하게 설정된 n-step은 학습 속도를 더 빠르게 하는 경우가 많다.
distributional RL
기대되는 보상값이 아니라 보상의 분포를 근사하여 학습한다. 각 행동의 보상 분포를 여러 지점(atom)으로 나누어 각 지점에 확률을 할당함으로써 보다 정확한 보상 예측이 가능하고 이는 Q 값의 안정성을 높이고 학습 효율을 향상시키는 데 기여한다.
Noisy Nets
단순히 greedy하게 움직이면 여러가지 행동을 수행해야 보상을 얻는 구조에서 좋은 성능을 보이기 힘들다. 그래서 랜덤한 노이즈가 더해진 가중치를 도입하여 무작정 높은 Q를 따라가는 것이 아닌 최대한 다양한 행동을 하도록 유도한다.
rainbow에서는 앞의 배경에서 나왔던 방법들을 전부 섞어서 사용한다.
Multi-Step 학습: 손실 함수 계산 시 n-step 리턴을 사용하여 미래 보상 정보를 더 멀리 반영해 학습 속도를 높인다.
Double Q-learning: greedy한 액션을 선택할 때 target Q 네트워크로 평가하여 과대평가 문제를 줄인다.
Prioritized Experience Replay: 학습이 필요한 전이를 우선시하여 중요도가 높은 경험을 더 자주 학습할 수 있다.
Dueling Network 구조: Value와 Advantage 스트림을 분리해 주어진 상태에서 각 액션의 상대적 우위를 더 정확히 학습한다.
Noisy Linear Layers: 가우시안 노이즈가 추가된 선형 계층을 사용, 탐색 성능을 향상시키고 환경에 적응적인 행동을 선택한다.
Distributional Value: 보상 기대값이 아닌 보상의 전체 분포를 예측하여 더 정교한 Q 값을 추정, 불확실성이 높은 상황에서도 학습의 안정성을 가진다.
Atari 2600에서 57개의 게임을 진행하였고 DQN, DDQN, Prioritized DQN, Dueling DDQN, A3C, Distributional DQN, Noisy Dqn, rainbow를 비교하였다.
에이전트가 인간 수준의 20%, 50%, 100%, 200%, 500%의 수준을 달성한 것을 나눠서 그래프로 그렸보았으며 모두 rainbow가 다른 알고리즘보다 좋은 성능을 보였다. 특히 500%로 갈수록 나머지 알고리즘과 rainbow의 격차가 심하게 나타났다.
어느 알고리즘이 영향을 크게 미치는지 알아보기 위해 적용했던 것들을 하나씩 빼보면서 결과를 측정했다.
priorized replay와 multi-step learning이 제거되었을 때 학습 초기 성능이 떨어졌고 최종성능에도 부정적인 영향을 주어 제일 중요한 것으로 판단된다.
distributional value의 경우 초기에는 rainbow와 비슷했지만 인간 수준을 초과한 부분에서는 점점 격차가 벌어졌다.
Noisy nets를 제거했을 때는 전반적으로 성능이 조금 감소하였지만 몇몇 게임에서는 성능이 상승한 경우도 있었다.
Dueling Network는 제거 시 전반적인 성능 차이는 크지 않았고 게임마다 영향을 미치는 정도가 다르다. 특정 게임에서는 개선 효과가 있었고 일부 게임에서는 성능이 감소했다.
Double Q-learning: 전반적인 성능 차이는 크지 않았고 게임별로 다르게 작용했다.
Rainbow는 단일 GPU에서의 성능을 최적화해서 병렬 처리를 통한 확장성이나 대규모 학습 환경에 대한 검증은 진행되지 않았다. 향후 병렬 연산을 적용해 Rainbow의 성능을 더욱 개선할 가능성이 있다.
Noisy Nets를 통해 조건부 탐색을 도입했지만 다른 최적의 탐색 전략이 존재할 것이다. 향후 연구에서는 더욱 효율적인 탐색 방식을 도입하여 학습이 더 좋아질 수 있다.
Rainbow는 주로 단일 게임에서의 학습 성능을 개선하는 데 중점을 두고 있어서 멀티태스크 학습에 대한 성능 검토는 부족하다. 향후 연구에서는 다양한 게임을 다루는 멀티태스크 학습에서의 성능 검증도 필요하다.
Rainbow는 보상 분포의 학습을 통해 더 정교한 예측을 가능하게 했지만 이 방법이 모든 환경에서 최적의 결과를 내는지에 대한 확증이 없다. 앞으로 더 많은 실험을 통해 일반화된 결과를 얻는 것이 좋을 것 같다.
단순히 좋았던 알고리즘을 전부 사용하는 방법인데 좋은 성능을 보인다는 것이 신기하다. 그러나 역시 최적화는 조금 덜 된 느낌이고 앞으로 더 좋은 알고리즘이 나온다면 거기에 끼워맞추면 더 발전할 수 있을 것 같은 알고리즘이라는 생각이 든다.