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

딥큐러닝

위키원
이동: 둘러보기, 검색

딥큐러닝(Deep Q-learning)은 모델을 특정하지 않는 강화학습 알고리즘이다. 소규모 데모 데이터 세트를 활용하여 비교적 적은 양의 데모 데이터에서도 학습 프로세스를 대폭 가속화하고, 우선 순위가 지정된 재생 메커니즘 덕분에 학습하는 동안 데모 데이터의 필요한 비율을 자동으로 평가할 수 있다.

개요[편집]

딥큐러닝은 일반적인 큐-러닝(Q-learning)과 다르게 매 스탭마다 경험(experience)을 리플레이 메모리에 저장하고 학습시 균등 분포(uniform distribution)에 따라 샘플링하여 사용한다. 이 방식은 경험이 여러 번 사용될 수 있게 만들기 때문에 데이터의 효율성을 높여 준다. 또한, 연속적인 샘플 사이에는 높은 상관관계를 가지는데 샘플들을 랜덤으로 뽑아서 사용하기 때문에 분산을 줄일 수 있다.[1] 딥마인드 시스템은 수용적 장의 효과를 모방하기 위해 타일 방식의 합성곱 필터 층을 가진 심층합성곱신경망를 사용했다. 신경망과 같은 비선형 함수 근사치를 사용하여 를 나타낼 때 보강학습이 불안정하거나 다양하다. 이러한 불안정성은 관찰 순서에 존재하는 상관관계, 에 대한 소규모 업데이트로 인해 정책과 데이터 배포, Q와 목표값 간의 상관관계에서 비롯된다. 딥큐러닝의 알고리즘대로 하면 관측 순서의 상관관계가 제거되고 데이터 분포의 변화가 원활해진다. 반복 업데이트는 를 주기적으로만 업데이트되는 목표값으로 조정하여 목표값과의 상관관계를 더욱 감소시킨다.[2] 또한 소규모 데이터를 활용하여 비교적 적은 양의 데모 데이터에서도 학습 프로세스를 대폭 가속화하는 알고리즘으로, 시간차 업데이트를 시연자의 큰 마진 분류와 결합하여 작동한다. 데모 데이터가 좋지 않은 경우에도 딥큐러닝이 DQN보다 빠르게 학습한다는 장점이 있다.[3]

역사[편집]

큐-러닝은 간단하지만 꽤 강력한 알고리즘으로 에이전트의 커닝 시트를 만든다. 이는 에이전트가 정확히 어떤 조치를 수행해야 하는지 파악하는 데 도움이 된다. 하지만 시간이 흘러 연구원들은 큐-러닝의 수표지가 너무 길다는 문제에 맞닥뜨리게 된다. 상태(state) 당 10,000개의 상태와 1,000개의 상태별 행동(action)이 있는 환경을 상상해 보자. 이것은 천만 개의 세포로 이루어진 표를 만들게 되어 일을 걷잡을 수 없게 될 것이다. 이미 탐사된 상태에서 새로운 상태의 Q-값을 추론할 수 없다는 것은 분명하다. 이것은 두 가지 문제를 제시한다. 첫째, 상태 수가 증가함에 따라 해당 테이블을 저장하고 업데이트하는 데 필요한 메모리 양이 증가할 것이다. 둘째, 필요한 Q-테이블을 만들기 위해 각 상태를 탐색하는 데 필요한 시간은 비현실적일 것이다. 이 문제를 보완하기 위해 신경망과 같은 머신러닝 모델과 이 Q-값을 근사하게 비교한다는 아이디어가 나오게 되었다. 이는 딥마인드의 알고리즘 이면에 있는 아이디어로, 구글이 5억 달러에 인수하게 된 딥큐러닝이다.[4]

특징[편집]

타겟 네트워크

같은 네트워크가 예측값과 목표값을 계산하고 있기 때문에 이 둘 사이에는 많은 차이가 있을 수 있다. 그래서, 학습을 위해 1개의 신경망을 사용하는 대신에, 2개의 신경망을 사용할 수 있다. 또한 목표물을 추정하기 위해 별도의 네트워크를 사용할 수 있다. 이 타겟 네트워크(Target Network)는 함수 근사치와 동일한 아키텍처를 가지지만, 고정된 매개변수를 가지고 있다. 모든 하이퍼 파라미터의 C 반복에 대해 예측 네트워크의 파라미터는 대상 네트워크로 복사된다. 이는 목표 기능을 잠시 동안 고정하기 때문에 보다 안정적인 훈련으로 이어진다.[4]

대상 네트워크.png

타겟 네트워크는 신경망으로 기능을 나타내는 신경망의 느린 사이클로 업데이트된다. 고정 목표 네트워크를 활용해 목표치를 산출함으로써 학습과정 전체의 안정화를 기대할 수 있다. 일반적으로 타겟 네트워크의 업데이트 빈도가 낮으면 학습 과정이 보다 안정적일 수 있다. 예를 들어 에르난데스-가르시아(Hernandez-Garcia, 2019)와 에르난데스-가르시아·서튼(Hernandez-Garcia, 2019)은 업데이트 빈도를 2000에서 500으로 꾸준히 줄이면 알고리즘의 불안정성이 감소한다고 보고했다. 2016년, 판 하셀트(van Hasselt) 외 연구진은 조치값의 과대평가를 줄이기 위해 타겟 네트워크의 업데이트 주기를 1만에서 3만으로 늘렸다. 타겟 네트워크를 업데이트하지 않으면 가치가 전파되지 않아 온라인 강화 학습에 지장을 주고 학습 속도를 늦추는 것으로 알려져 있다.[5]

경험 반복

경험 반복(Experience replay)은 시계열 데이터를 재생 메모리라는 버퍼에 저장하는 기법이다. 체험 재생에서는 버퍼에서 무작위로 샘플링한 데이터를 사용하여 미니 배치 학습을 실시한다. 결과적으로 훈련 샘플 간의 상관관계가 감소하고, 따라서 학습이 안정화된다.[5] 경험 반복은 이를 수행하기 위해 에이전트 경험 을 저장한다. 위의 증명은 시뮬레이션이나 실제 경험 중에 발생하는 상태 혹은 행동 쌍에 대한 큐-러닝을 실행하는 대신, 시스템은 [상태, 행동, 보상, 다음 상태]에 대해 발견된 데이터를 큰 표에 저장한다. 예를 들어 우리가 게임의 각 프레임이 다른 상태를 나타내는 비디오 게임 봇을 만들려고 한다고 가정해 보자. 교육 기간 동안, 네트워크를 훈련시키기 위해 마지막 10만 프레임에서 무작위로 64 프레임의 배치를 샘플링할 수 있다. 이렇게 하면 샘플 간의 상관관계가 낮은 부분집합을 얻을 수 있을 것이고 또한 더 나은 샘플링 효율을 제공할 수 있을 것이다.[4]

목표 네트워크 분리

목푯값도 추정값이기 때문에 학습을 한 번씩 진행할 때마다 목푯값이 변한다. 올바른 보상이 계속 주어지기 때문에 결국에는 수렴하지만 학습이 너무 오래 걸리는 문제가 있다. 학습이 되어 있지 않은 초기에는 목푯값이 스텝마다 너무 큰 폭으로 변하기 때문이다. 딥망니드는 논문이 나온 2년 후인 2015년, 네이쳐에 이 문제를 개선하기 위한 방법을 소개했다. 목푯값이 바뀌는 기간을 매 스텝이 아닌 일정 크기의 스텝(예를 들어 10000 스텝)으로 늘린 것이다. 다시 말해서 일정 스텝마다 기본 네트워크에서 학습된 파라미터를 목표 네트워크로 업데이트하는 것이다. 여기에서 주목할 점은 2013년에 소개된 DQN은 네트워크를 하나만 사용하지만 개선된 DQN은 목표 네트워크가 필요하기 때문에 네트워크가 두 개이다. 이 방법을 사용한다고 해서 목푯값이 변하지 않는 것은 아니지만 매 스텝마다 변하는 폭보다는 훨씬 작기 때문에 학습 속도가 빠르다.[6]

시간적 일관성 손실

폴렌(Pohlen) 외 연구진(2018)은 후속 비보상 상태 간의 일시적 차이가 ~0인 경향이 있기 때문에 할인율 가 1에 근접함에 따라 DQN이 여전히 불안정하다고 지적했다. 이것은 학습 과정을 불안정하게 만들며, 특히 오래 지속되는 마르코프 의사결정 과정에서는 일시적으로 인접한 목표 가치들 사이에서 불필요한 일반화가 일어나기 때문이다. 후지모토 외 연구진(2018년)들은 가 클 때 업데이트 때마다 목표값의 분산이 빠르게 커질 수 있다고 지적했다. 이러한 불안정성 문제를 해결하기 위해 폴렌과 연구진은 일 때, 시간적 일관성 손실(Temporary Consistency, TCP)이라고 하는 다음과 같은 보조 손실 기능을 추가했다.

 

당초 논문에서는 휴버 손실(Huber loss)이 채택되었지만, 본 논문에서는 L2 손실이 서로 다른 방법을 공평하게 비교하기 위해 사용된다. 시간적 일관성 손실이 있는 DQN의 업데이트 규칙은 다음 식에 의해 주어지며, 여기서 은 미리 정의된 양의 하이퍼 파라미터다.

 

참고로 폴렌은 시간적 일관성 손실을 변환된 벨먼 연산자와 함께 사용함으로써 보상 분포를 [-1, 1] 간격으로 클리핑하는 대신 대상의 규모와 분산을 감소시켰지만, 학습 알고리즘의 하이퍼 파라미터는 개별적으로 튜닝해야 하기 때문에 변환된 벨먼 연산자는 채택하지 않거나 각각 작업한다.[5]

알고리즘[편집]

 
 
 
 
     
         
         
     
     
     
 
     
     
         
         
     
 
     
 

위의 알고리즘을 풀이하면 다음과 같다.[7]

 Q[상태 갯수, 행동 갯수]를 임의적으로 초기화시킨다.
 초기 상태 s를 조사한다. 
 반복
   행동 a를 선택하고 수행한다. 
     무작위적인 행동 a를 선택하는 확률 ε를 사용한다. 
     다른 것들은 select a = argmaxa'Q(s,a')
   행동 a를 끄집어낸다.
   리워드 r를 관찰하고 새로운 상태 s'로 만든다.
   재현 매모리 D에 경험 <s, a, r, s'> 을 저장한다.
 
   무작위적인 샘플 <ss, aa, rr, ss'>를 재현 메모리 D로부터 끄집어낸다.
   각각의 미니 배치 계산을 위한 목표를 계산한다.
     만약 ss' 이 끝나는 상태이면 tt = rr
     그렇지 않으면 tt = rr + γmaxa’Q(ss', aa')
   게임에서 질 때까지 (tt - Q(ss, aa))^2 을 이용해서 Q 네트워크를 트레이닝 시킨다.
   s = s' (상태를 s'로 바꾼다)
 끝날 때까지 반복

각주[편집]

  1. choyi0521, 〈Deep Q-learning으로 뱀 게임 인공지능 만들기〉, 《삼성소프트웨어멤버십》, 2020-02-08
  2. Q-learning Wikipedia - https://en.wikipedia.org/wiki/Q-learning#Learning_Rate
  3. Bilal Piot 외 11인, 〈Learning from Demonstrations for Real World Reinforcement Learning〉, 《ResearchGate》
  4. 4.0 4.1 4.2 ANKIT CHOUDHARY, 〈A Hands-On Introduction to Deep Q-Learning using OpenAI Gym in Python〉, 《Analytics Vidhya》, 2018-04-18
  5. 5.0 5.1 5.2 Hong Qiao, 〈Constrained Deep Q-Learning Gradually Approaching Ordinary Q-Learning〉, 《Frontiers》, 2019-12-10
  6. LG CNS 정보기술연구소, 〈보상을 통해 학습하는 머신러닝 기술 1편〉, 《LG CNS》, 2018-04-16
  7. Ddanggle, 〈딥 강화학습 쉽게 이해하기〉, 《깃허브》, 2016-09-24

참고자료[편집]

같이 보기[편집]


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