검수요청.png검수요청.png

DQN

위키원
leod0904 (토론 | 기여)님의 2020년 7월 29일 (수) 10:44 판
이동: 둘러보기, 검색

DQN(Deep Q-Networks)은 구글 딥마인드(DeepMind)에서 발표한 논문 Playing Atari with Deep Reinforcement LearningHuman-level control through deep reinforcement learning에서 제시된 강화학습 알고리즘으로, 기존 큐러닝(Q-learning) 알고리즘의 Q(action-value) 함수를 딥러닝으로 근사하는 알고리즘이다.

개요

DQN은 큐러닝과 딥러닝을 합친 것을 말한다. 큐테이블(Q-table) 대신 신경망(neural net)을 사용해서, 뉴럴넷이 Q 가치를 근사해낼 수 있도록 학습시키는 것이다. 이러한 이유로 DQN은 근사기(approximator) 또는 근사 함수(approximating functioin)이라고 부르기도 한다.[1] 아타리 2600 게임을 인간 수준으로 플레이할 수 있는 인공지능이며, 2015년 2월 네이쳐에 게재되었다. 이 인공지능의 놀라운 부분은, 인공지능에 화면을 입력하고 패드를 움직이도록 하여 '고득점을 내는 것이 목표이다' 이외에 아무 것도 알려주지 않고 마음대로 플레이하게 두었더니, 스스로 게임을 이해하고 공략법을 알아내었다는 것에 있다.[2] 이 알고리즘이 중요한 이유는 딥러닝을 강화학습에 적용하는 것을 어렵게 하는 문제를 해결했기 때문이다. 어려운 점의 대표적인 예시로는 성공적인 딥러닝을 위해선 잘 가공된 대규모의 데이터 셋이 필요한데, 강화학습은 인풋에 대응되는 정답을 명확히 알 수 없을 뿐더러 지연(delay)가 있고 노이즈가 섞인 스칼라 리워드(scalar reward)만으로 네트워크를 학습해야한다. 또한, 대부분의 딥러닝 알고리즘은 학습 데이터가 서로 독립적임을 가정하는데, 강화학습에 쓰이는 환경에서 제공하는 데이터는 연속된 행동에 대한 결과이지 때문에 서로 연관되어 있다. 심지어 에이전트가 학습함에 따라 정책(policy) 또한 달라지면서, 학습 데이터의 분산(distrubution) 자체도 시간에 따라 변화한다. 딥러닝은 데이터에 대해 고정된 기본 분산(fixed underlying distribution)을 가정하기 때문에 학습이 제대로 진행되지 않을 수 있다. DQN은 첫 번째 문제에 대해서는 특별한 해법을 제시하지 않았고, 두 번째 문제는 exprience replay라는 개념을 통해 어느 정도 해결했다. 이 개념은 들어로는 입력을 순서대로 사용하면 데이터 간 연관성이 너무 커지므로 최근 x개의 데이터를 계속해서 저장하고, 네트워크를 학습할 땐 저장한 데이터 중 몇 개를 무작위로 샘플하여 사용하는 방법이다.[3][4]

특징

  • 전처리(Preprocessing) : 딥마인드에서는 딥신경망에 인풋으로 집어너히 전에 이미지 전처리 과정을 거쳤다. 한마디로 네트워크에 쓰기 알맞게 데이터를 가공한 것이다. 벽돌깨기 게임에서, 만약 이미지가 한 장만 있다면 정지된 것처럼 보이므로 공이 어디로 튈지 모르게 된다. 딥마인드는 연속된 m개의 이미지를 쌓아올려 Q 함수에 쓸 인풋을 준비했다. 즉, 연속된 이미지를 넣는다는 것은 공이 움직이는 상태를 넣겠다는 것이다.[5]
  • 합성곱 신경망(CNN) : 딥신경망의 종류중 하나로 CNN이 있다. CNN은 사람이 시신경 구조를 모방한 구조이다. 기존의 방식은 데이터에서 지식을 추출하여 학습이 이루어졌지만 CNN CNN은 데이터를 특징, 차원으로 추출하여 특징들의 패턴을 파악하는 구조이다. 이 CNN 알고리즘은 합성곱(Convolution) 과정과 풀링(Pooling) 과정을 통해 진행된다. 이 CNN의 활용용도는 보통 정보추출(Information Extraction), 문장분류(Sentence Classification), 얼굴인식(Face Recognition)에 사용된다.[6]
  • Q 최적화(Optimizer) : 딥신경망에도 가중치라는 것이 존재한다. 따라서 업데이트 역시 할 수 있다. 딥마인드에서는 Q 최적화로 RMSProp을 사용했다. RMSProp을 작동시키려면 각 데이터 셋마다 비용이 필요하다.[5]
  • 탐험률(Exploration Rate) : 학습과는 전혀 연관성이 없는 운의 가능성을 염두에 둔 것을 탐험률이라고 한다. 인공지능으로 하여금 가끔씩 이상한 선택을 하게 하여 운을 노리는 것이다. 기호로는 앱실론(ε)으로 표현된다.[5]
  • 익스피리언스 리플레이(Experience Replay) : 이 방법은 기존의 정책 학습에서도 비슷하게 사용했던 방법이다. 첫 번째 아이디어는 스텝에 따른 결과로 바로 학습을 하는 것이 아니라 버퍼에 담아 두는 것이다. 두 번째 아이디어는 이 버퍼에 담긴 값들을 전부 사용하는 것이 아니라 랜덤하게 뽑아 학습에 사용한다. 이렇게 랜덤하게 선택을 하여 학습을 하는 이유는 일반적인 환경에서는 에이전트가 연속적으로 움직이기 때문에 연속적으로 쌓인 결과가 매우 근접하고 비슷하여 특정 상황에서 쌓인 결과일 가능성이 높다. 하지만 이렇게 랜덤하게 뽑아 학습을 한다면 전체적인 다양한 경험을 통해 올바를 학습을 할 수 있다.[4]
  • 목표 네트워크 분리(Separate Target Network) : 기존 큐네트워크의 문제점 중 행동(predit Y)과 타켓(target(lable) Y)를 산출하는 중간에 모델이 계속 훈련된다는 문제가 있었다. 이 것이 문제가 되는 이유는 행동이 타켓을 향해 가까이 가도록 점점 훈련을 하는 것이 이 학습의 목적인데 타켓이 계속 바뀜으로써 행동이 어디로 갈지 갈길을 잃는 경우가 생긴다. 이 문제를 해결하기 위해 DQN에서는 간단하게 두 개의 모덴 메인, 타켓을 사용하는 방법을 이용했다. 모델을 두 개로 분리하여 메인 신경망에서는 행동을 계산하고 타켓 신경망에서는 타켓(lable Y)를 산출하여 Q값을 계산한다. 그리고 이 타켓 신경망은 일정 배치(batch)에 한 번씩 학습된 메인 모델을 타켓 모델로 복사를 하여 학습을 하게 된다.[7] 즉, 하나의 네트워크를 사용하지 않고 분리된 목표 네트워크를 둔다는 것은 업데이트 하는 동안 목표를 계산하는 식에서, 계산에 사용되는 파라미터를 고정한다는 것이다.
  • 비용 함수(Loss Function) : DQN에서는 2개의 똑같은 CNN을 사용한다. 각각 Q와 를 저장하기 위함이다. 딥마인드에서는 10000 스탭 정도 지날 때마다 가중치에 Q의 가중치를 덮어 씌움으로써 계속 경험을 쌓아 나간다. 비용을 구하기 위해서는 실제 값에다가 예상한 값(기대값)을 빼서 제곱을 하는 방식을 많이 사용한다. 이 때 실제 값을 구하기 위해 을 이용하고, 기대값을 구하기 위해 Q를 사용한다. 여기서 구한 비용으로 Q를 업데이트 한다.[5]

알고리즘

2013 NIPS

Playing Atari with Deep Reinforcement Learning 버전의 알고리즘이다. 기존의 큐러닝 알고리즘과 다른 부분은 크게 두 가지 이다.

DQN 2013 NIPS.png
  • Q 함수를 배열(array)이나 딕셔너리(dictionary)가 아닌 신경망으로 구현했다. 이는 'Q 함수를 딥러닝을 통해 근사했다' 정도로만 생각할 수도 있지만, 그것보단 더 의미 있는 일이다. 먼저 Q 함수를 뉴럴넷으로 근사한 덕분에 사람이 직접 특징을 정해주는 Hand-crafted feature가 아닌 이미지 픽셀 정보를 상태로 사용할 수 있게 되었다. 만약 Q 함수를 배열로 구현했다면 비슷한 상태, 예를 들어 공의 위치가 1픽셀 정도 다른 두 상태에 대해서 서로 연관성 있는 결과를 얻어내기 힘들 것이다. 하지만 딥신경망(Deep Neural Network)의 종류 중 하나인 CNN을 통해 중요한 정보를 자동으로 뽑아낸 다음 그 특징들을 기반으로 다시 각각의 Q 값을 계산하기 때문에 특징도 자동으로 뽑아내며 작은 상태 변화에 대해 로버스트한 계산을 기대할 수 있다.
  • 기존 큐러닝에서는 목표값(target value)를 정확하게 학습할 수 있었는데, 그냥 배열이나 다른 자료구조에 그 값을 대입해버리게 되기 때문이다. 하지만 Q함수를 뉴럴넷으로 구현하면 목표값을 정확하게 나타내려면 여러번의 경사 하강법(gradient descent)을 시행해야 하고, 무엇보다 기존에 학습한 결과가 바뀔수 있다. 또한 동시에 학습 데이터의 분포가 바뀌기 때문에 안정적인 학습이 이루어지기 힘들다. 이러한 문제점을 해결해 주는 것이 익스피리언스 리플레이이다.[3]

2015 NATURE

Human-level control through deep reinforcement learning 버전 알고리즘이다. 2013년 버전과 비교하여 가장 눈에 띄는 변화는 목표값의 계산 방식이다. 2013년 버전의 경우 목표값 를 계산할 때 Q 함수를 그대로 사용한 반면 2015년 버전의 경우 일정 스텝 동안 weight를 고정한 네트워크인 을 사용한다. 이를 통해 학습의 불안정성을 개선했다고 한다. 그 외의 변경사항은 3가지가 있다.

DQN 2015 NATURE.png
  • 이미지를 전처리 할 때 110*84로 줄인 뒤 중앙을 잘라내는 방식이 아닌 처음부터 84*84로 재설계(rescale)했다.
  • 네트워크의 구조가 더 깊어졌다.
  1. 84*84*4 크기의 입력 레이어
  2. 보폭(stride) 4, 8*8 크기의 필터 32개를 적용한 뒤 ReLU 적용
  3. 보폭 4, 4*4 크기의 필터 64개를 적용한 뒤 ReLU 적용
  4. 보폭 4, 3*3 크기의 필터 64개를 적용한 뒤 ReLU 적용
  5. 512개의 노드를 가지는 출력 레이어(fully-connected)와 연결후 ReLU 적용
  6. "가능한 행동의 개수" 크기의 출력 레이어와 연결
  • 각 프레임을 그대로 쓰지 않고, 바로 이전 프레임과 픽셀 단위로 최대(max) 연산을 취한 프레임으로 사용했다. 아타리 게임에서 사용되는 물체 중 홀수번째 프레임에만 등장하거나 짝수번째 프레임에만 등장하는 경우가 있기 때문이다. 프레임스킵핑(frame-skipping)까지도 고려하면 원래 게임의 번째 프레임 중 사용되는 프레임은 번째 프레임을 최대 연산으로 합친 프레임 하나이고, 이러한 프레임 4개를 쌓아서 하나의 상태로 쓰는 것이다. 아래는 하나의 상태를 나타낸 것이다.[3]

게임

DQN 알고리즘은 STG 게임, 권투 시합, 3D 자동차 레이스를 포함한 여러 게임에서 잘 동작했다. 이 알고리즘은 49개 게임 가운데 29개의 게임에서 사람이 획득한 점수의 75%가 넘는 기록을 세우기도 했다. 그러나 이 알고리즘은 수차례 게임 세션을 진행해야지만 전략을 학습할 수 있었다. 벽돌 깨기 게임 600회를 플레이하고 나서 플레이어가 파괴해야 하는 벽돌을 뚫는 승리 전략을 학습했다. 최소한의 입력값으로 비디오 게임을 학습한 사례가 이번이 처음은 아니며, DQN은 오랜 시간 플레이 전략을 세워야 하는 몬테주마의 복수(Montezuma's Revenge)와 같은 게임에서는 상당히 형편없었다. 그러나 연구자들은 단일 아키텍처가 여러 가지 게임 요소를 만났을 때 학습하고 적응한 의미 있는 사례라고 언급했다. 그들은 일반적인 목적의 인공지능 프로그램을 효과적으로 설계하기 위해 한 단계 더 나아간 것으로 내다봤다.[8]

각주

  1. Jeina, 〈강화학습 개념부터 Deep Q Networks까지, 10분만에 훑어보기〉, 《티스토리》, 2019-10-28
  2. DQN 나무위키 - https://namu.wiki/w/DQN
  3. 3.0 3.1 3.2 기리이이이인, 〈Deep Q Network〉, 《기리이이이인》, 2018-03-10
  4. 4.0 4.1 숨니야, 〈DQN(Deep Q-Networks)〉, 《숨니의무작정따라하기》, 2018-02-04
  5. 5.0 5.1 5.2 5.3 코드뭉치, 〈Deep Q Network〉, 《코드뭉치》, 20187-10-27
  6. JCKIM, 〈Deep learning (CNN, RNN)〉, 《주합루》, 2018-01-28
  7. Deep Q-Networks and Beyond〉, 《티스토리》, 2017-04-17
  8. Tim Hornyak , 〈구글 딥마인드, 게임법을 스스로 터득하는 'DQN' 개발〉, 《아이티월드》, 2015-02-27

참고자료

같이 보기


  검수요청.png검수요청.png 이 DQN 문서는 인공지능 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.