2016년 3월, 전 세계가 주목한 세기의 대결이 펼쳐졌습니다. 구글의 딥마인드(DeepMind)에서 만든 인공지능 바둑 프로그램 알파고(AlphaGo)가 바둑 세계 챔피언 이세돌에게 도전장을 내민 것인데요. 바둑은 경우의 수가 약 2×10,170으로 우주 전체 원자 수보다 많은 보드게임입니다. 따라서 당연히 사람들은 이세돌이 승리할 것으로 생각했지만 결과는 놀라웠습니다.
알파고가 이세돌을 4:1로 제압한 것인데요. 컴퓨터가 인간을 이길 수 없는 마지막 보류라고 여겨졌던 바둑마저 컴퓨터에 챔피언의 자리를 내어준 것입니다. 그리고 1년 후 알파고 마스터라는 이름으로 커제와 대결했고 커제는 단 1승도 거두지 못했습니다. 이 대국을 마지막으로 알파고는 공식적으로 은퇴를 선언했고 이세돌은 알파고에 1승을 거둔 유일한 인간으로 남게 되었습니다.
알파고를 계기로 인공지능에 관한 관심은 폭발적으로 증가하게 되었고 특히 알파고의 핵심 기술인 강화학습에 사람들이 많은 관심을 끌게 되었습니다.
알파고의 등장이 강화학습에 관심을 끌게 된 계기는 맞지만 사실 딥마인드는 구글에 인수되기 전인 2013년 12월 강화학습을 그리드 월드(Grid World, 테이블 형식의 작은 세상)에서 현실 세계(Real World)로 나오게 한 유명한 논문인 ‘Playing Atari with Deep Reinforcement Learning’을 발표했습니다.
이 논문에서는 Atari 2000 비디오 게임을 강화학습을 이용해 학습해서 사람에 필적하는 점수를 내거나 일부 게임은 사람을 능가하는 결과를 보여줬는데요. 더욱 놀라운 사실은 단지 게임 화면만 보여주고 스스로 시행착오를 겪으면서 학습했다는 것입니다. 이를 계기로 구글은 딥마인드의 가능성을 보고 인수를 했고 결국 알파고가 탄생하게 되었습니다.
강화학습의 정의와 등장 배경
강화학습은 흥미로운 분야이지만 지금까지 주로 게임에 적용되었고 실제 생활에 가치를 창조할 만한 직접적인 사례는 찾기가 어렵습니다. 최근에는 지능형 로봇이나 자율주행차에 적용되어 실험하는 단계에 있고 금융 분야에서도 시도가 이루어지고 있는데요.
하지만 발전 속도가 상당히 빠르며 기존에 주로 지도학습으로 이루어졌던 컴퓨터 비전이나 자연어 처리의 영역도 넘보고 있습니다. 따라서 이제는 흥미로운 기술로만 보기보다는 강화학습에 대한 이해와 적용 분야에 관한 연구가 필요한 상황입니다.
머신러닝(Machine Learning)은 크게 3개의 분야로 나눌 수 있는데요. 지도학습(Supervised Learning), 비지도학습(Unsupervised Learning), 강화학습(Reinforcement Learning)입니다. 이번 시간에는 머신러닝 분야의 하나인 강화학습에 대해 알아보겠습니다.
위키피디아에 따르면 강화학습은 다음과 같이 정의합니다.
‘강화 학습은 기계 학습의 한 영역이다. 행동심리학에서 영감을 받았으며, 어떤 환경(Environment) 안에서 정의된 에이전트(Agent)가 현재의 상태(State)를 인식하여, 선택 가능한 행동(action) 중 보상(Reword)을 최대화하는 행동 혹은 행동 순서를 선택하는 방법이다.’
벽돌 깨기를 예로 들면, 이 게임은 화면 아래에 있는 바를 움직여서 공을 튕겨낸 후에 화면 상단의 벽돌을 전부 없애는 게임입니다. 벽돌을 하나씩 깰 때마다 벽돌은 사라지고 점수는 올라가는 보상을 얻는 게임인데요.
에이전트에게 이 게임을 하도록 가르친다고 가정해보겠습니다. 에이전트는 입력으로 화면 이미지를 받고 출력으로 왼쪽, 오른쪽 또는 발사의 세 가지 행동을 내보냅니다. 만약 지도학습의 분류(Classification) 문제로 해결하려면 모든 입력 이미지에 대해 어떤 행동(왼쪽, 오른쪽, 발사)을 해야 하는지 에이전트에게 알려줘야 합니다. 간단해 보이지만 에이전트를 학습시키려면 학습 예제(Example)가 정말 많이 필요하고 이것은 진짜로 학습하는 방법이 아닙니다.
우리는 단지 에이전트가 올바로 행동하고 있는지 가끔 피드백을 받는 것만으로 게임을 잘할 수 있기를 원하며, 이것이 강화학습이 풀어야 할 문제입니다.
강화학습은 이전부터 존재했지만, 최근에 관심을 받기 시작했습니다. 그 이유는 고전적인 강화학습 알고리즘은 실생활에 적용할 만큼 좋은 결과를 내지 못했고 주로 그리드 월드와 같이 작은 환경에서만 적용할 수 있었기 때문입니다.
하지만 딥러닝의 등장 이후 강화학습에 신경망을 적용하면서부터 바둑이나 자율주행차와 같은 복잡한 문제에 적용할 수 있게 되었습니다. 좀 더 자세히 설명하면 고전적인 강화학습 알고리즘은 앞으로 나올 상태에 대한 보상을 모두 계산해야 하는데 실제 세상과 같이 상태 공간이 크면 현실적으로 계산을 할 수 없습니다. 최근에는 계산하는 대신 신경망을 통해 근삿값을 구함으로써 복잡한 문제를 해결할 수 있게 되었습니다.
강화학습이 관심을 받게 된 또 다른 요인은 환경과 행동에 따른 보상만 주어지면 별도의 데이터를 제공하지 않아도 된다는 점입니다. 딥러닝의 발전을 저해하는 요소 중 하나가 필요한 데이터의 양인데요. 지도학습의 경우 만족할만한 수준의 성능을 내려면 엄청나게 많은 데이터와 그에 해당하는 라벨이 필요합니다.
이런 데이터를 만드는 일은 숙련된 전문가가 많은 시간을 투자해야 하는 일이며 라벨을 만드는 도중에 실수가 일어날 수도 있지만, 강화학습은 이런 데이터가 필요하지 않기 때문에 기존의 지도학습 알고리즘을 보완하려는 연구가 진행되고 있습니다.
기존 강화학습 알고리즘의 한계에 대한 이해를 돕기 위해 대표적인 강화학습 알고리즘인 큐러닝(Q-Learning)을 소개하겠습니다. 하지만 큐러닝을 이해하기 위해서는 마르코프 결정 과정과 차감된 미래의 보상에 대한 개념을 먼저 이해할 필요가 있습니다.
● 마르코프 결정 과정(Markov Decision Process)
강화학습 문제를 수학적으로 공식화하는 가장 일반적인 방법은 마르코프 결정 과정(Markov Decision Process)으로 표현하는 것인데요. 환경에 놓여있는 에이전트(예: 벽돌 깨기 게임)를 가정해 보면, 환경은 특정 상태(예: 바의 위치, 공의 위치 및 방향, 벽돌의 존재 여부 등)에 있습니다.
에이전트는 환경에서 특정 행동을 취할 수 있는데요(예: 바를 왼쪽 또는 오른쪽으로 이동). 이러한 행동은 때로 보상(예: 점수 획득)으로 이어집니다. 행동은 환경을 변화시키고 에이전트가 다른 행동을 취할 수 있는 새로운 상태로 만드는데요. 이러한 행동을 선택하는 방법에 대한 규칙을 정책(Policy)이라고 합니다.
마르코프 결정 과정은 상태와 행동의 집합, 한 상태에서 다른 상태로 전이하는 규칙과 보상으로 구성됩니다. 그리고 다음 상태의 확률은 오직 현재의 상태와 현재의 행동에만 영향을 받고, 이전의 상태와 행동에는 영향을 받지 않는 마르코프 가정을 기반으로 합니다.
● 차감된 미래의 보상(Discounted Future Reward)
에이전트가 오랫동안 잘 동작하게 하려면 즉각적인 보상뿐만 아니라 미래의 보상도 고려해야 합니다. 여기서 고려해야 할 사항이 에이전트가 확률적인 환경에 있으면 같은 행동을 해도 같은 보상을 받을지 확신할 수 없다는 점인데요. 따라서 현재 받는 보상과 미래에 받을 보상은 가치가 다릅니다.
이런 이유로 보통 현재의 보상에 가중치를 높게 주고 미래의 보상에 가중치를 낮게 주는데 이것이 차감된 미래의 보상입니다. 에이전트에게 좋은 전략은 항상 차감된 미래의 보상을 최대화하도록 행동을 선택하는 것입니다.
● 큐러닝(Q-learning)
먼저 주어진 상태에서 동작을 수행할 때 차감된 미래의 보상을 나타내는 큐함수(Q-function)를 정의합니다. 큐함수는 ‘주어진 상태에서 행동을 수행한 후 게임이 끝날 때 가능한 최상의 점수’를 의미하는데요. 큐함수가 있으면 최적의 정책을 찾기 위해 단지 큐함수가 가지는 큐값(Q-value)이 가장 큰 행동을 선택하면 됩니다.
큐함수를 구하기 위해서는 하나의 상태 전이를 고려해 볼 수 있는데, 현재의 상태와 행동의 큐값을 다음 상태와 행동의 큐값으로 표현할 수 있습니다.
이 식을 벨만 방정식(Bellman Equation)이라고 부릅니다. 현재 상태와 행동에 대한 미래의 최대 보상은 즉각적인 보상과 다음 상태에서 얻을 수 있는 미래의 최대 보상의 합입니다.
큐러닝의 핵심은 벨만 방정식을 반복적으로 사용하여 큐함수를 계산할 수 있다는 점입니다. 가장 간단한 방법은 테이블 형태를 사용하는 것으로, 각 행은 상태에 해당하며, 각 열은 행동에 대응하며, 테이블 요소의 값은 큐함수가 가지는 값입니다. 다음 상태의 큐값이 추정치이기 때문에 학습 초기 단계에서는 잘못된 방향으로 갈 수 있는데요. 하지만 반복하면 할수록 추정치가 점점 더 정확해지고 업데이트를 충분히 수행한다면 큐함수가 수렴하여 진짜 큐값을 나타내게 될 것입니다.
큐러닝은 간단한 강화학습 문제를 해결하기에는 좋은 방법이지만 환경의 크기가 크면 적용하기 어렵습니다. 벽돌 깨를 다시 예로 들어보겠습니다. 딥마인드의 논문에 의하면 84×84 크기의 게임 화면 4개를 입력으로 받는데 가능한 상태를 계산해 보면 25,684x84x4 ≈ 1,067,970이 됩니다. 큐러닝을 적용하려면 상태를 행으로 가지는 테이블을 만들어야 하는데 1067970은 너무 큰 숫자여서 사실상 계산이 불가능합니다.
강화학습 기술 소개
강화학습에 딥러닝을 성공적으로 적용한 대표적 알고리즘으로는 DQN과 A3C가 있는데요. 두 알고리즘 모두 딥마인드에서 발표했으며 다른 강화학습 알고리즘의 베이스라인이 되었습니다.
● Deep Q Network (DQN)
2013년 딥마인드가 ‘Playing Atari with Deep Reinforcement Learning’이라는 논문에서 소개한 강화학습 알고리즘입니다. DQN 이전에도 강화학습에 신경망을 적용하려는 시도가 있었지만 좋은 결과를 내지 못했는데요. 딥마인드는 아래 3가지 방법을 적용하여 학습에 성공했습니다.
① Convolution Neural Network (CNN)
DQN의 장점 중 하나가 게임 화면을 전처리(Preprocessing)하지 않고 바로 입력으로 사용할 수 있다는 점인데요. 벽돌 깨기를 다시 예로 들어보면 행동을 결정하기 위해 바의 위치, 공의 위치 및 속도, 남은 벽돌, 점수 등의 정보가 필요합니다. 만약 이러한 정보를 게임 화면에서 추출하려면 상당히 복잡한 전처리를 거쳐야 하며 추출한 결과도 만족스럽지 못합니다.
딥마인드는 이런 한계를 극복하기 위해 CNN을 사용했는데요. CNN은 영상에서 최적의 특징을 추출하는 능력이 뛰어나기 때문에 별도의 전처리를 통해서 행동에 필요한 특징을 추출하는 것보다 좋은 결과를 낼 수 있었습니다.
CNN의 또 다른 역할은 큐함수를 근사하여 큐값을 추정하는 것입니다. 위에서 언급했듯이 실제 세계의 상태 공간은 너무나 방대하므로 큐러닝으로 계산할 수 없습니다. 네트워크에서 추정한 값이 벨만 방정식의 결과와 같아지도록 학습하면 된다는 것인데요. 그런데 큐러닝과 마찬가지로 목표로 삼아야 할 벨만 방정식의 결과가 네트워크의 추정값입니다. 식으로 표현해보면 다음과 같습니다.
현재 상태에서 추정된 큐값 = 보상 + 다음 상태에서 추정된 큐값
추정값을 목표로 하면 학습이 되지 않을 것 같지만 보상이 계속해서 더해지기 때문에 결국 올바른 목푯값에 수렴하게 됩니다.
② 경험 리플레이(Experience Replay)
머신러닝에서 학습 데이터가 그림 3과 같다고 가정해 보겠습니다. 전체 데이터의 분포를 보면 a가 정답에 근접한 직선이지만 만약 b근처의 데이터만 보면 b가 정답에 가까운 직선이 되는데요. 이 그림에서 알 수 있듯이 학습하는 데이터가 뭉쳐있지 않고 고르게 분포해야 정답에 근접한 직선을 찾을 수 있습니다. 강화학습은 이 문제와 밀접한 관련이 있으며 DQN 이전의 시도가 실패한 원인이기도 합니다.
지도학습의 경우 이미 데이터와 라벨이 존재하기 때문에 랜덤하게 데이터를 추출하여 학습함으로써 데이터의 상관관계를 줄일 수 있습니다. 하지만 강화학습은 환경과 상호작용하면서 차례로 데이터가 들어오기 때문에 b 직선처럼 이웃하는 데이터가 학습됩니다. 딥마인드는 이 문제를 해결하기 위해 경험 리플레이라는 방법을 사용했습니다.
경험 리플레이는 리플레이 메모리라고 하는 큰 메모리 공간을 만들어 데이터(경험)를 저장한 후 랜덤하게 뽑아서 학습하는 것이다. 이렇게 하면 상관관계가 적고 고르게 분포된 데이터로 학습할 수 있으므로 목표에 수렴이 잘 된다.
③ 목표 네트워크 분리
CNN을 설명하는 부분에서 언급했듯이 목푯값도 추정값이기 때문에 학습을 한 번씩 진행할 때마다(매 스텝마다) 목푯값이 변합니다. 올바른 보상이 계속 주어지기 때문에 결국에는 수렴하지만 학습이 오래 걸리는 문제가 있는데요. 학습이 되어 있지 않은 초기에는 목푯값이 스텝마다 너무 큰 폭으로 변하기 때문입니다. 딥마인드는 논문이 나온 2년 후인 2015년, 네이쳐에 이 문제를 개선하기 위한 방법을 소개했습니다.
목푯값이 바뀌는 기간을 매 스텝이 아닌 일정 크기의 스텝(예를 들어 10000 스텝)으로 늘린 것입니다. 다시 말해서 일정 스텝마다 기본 네트워크에서 학습된 파라미터를 목표 네트워크로 업데이트하는 것인데요.
여기서 주목할 점은 2013년에 소개된 DQN은 네트워크를 하나만 사용하지만 개선된 DQN은 목표 네트워크가 필요하기 때문에 네트워크가 2개입니다. 이 방법을 사용한다고 해서 목푯값이 변하지 않는 것은 아니지만 매 스텝마다 변하는 폭보다는 훨씬 작기 때문에 학습 속도가 빠릅니다.
● Asynchronous Advantage Actor-Critic (A3C)
DQN으로 강화학습의 전환점을 제공해 주었던 딥마인드는 2016년 2월 DQN의 단점을 개선한 A3C를 발표했습니다. DQN은 리플레이 메모리를 사용하기 때문에 큰 메모리 공간이 필요하고 오래된 데이터를 학습에 이용한다는 단점이 있는데요. A3C는 리플레이 메모리를 사용하지 않고 데이터의 상관관계를 줄이기 위해 비동기(Asynchronous) 방법을 사용했습니다.
비동기 방법은 쉽게 말해서 에이전트(그림 6의 worker)를 여러 개 만드는 것인데요(여러 개의 에이전트가 각자 게임을 한다). 각각의 에이전트는 독립되어 있고 서로 다른 경험을 하기 때문에 데이터의 상관관계가 적습니다. 그뿐만 아니라 오래된 데이터가 아닌 각각의 에이전트가 얻은 최신의 데이터(경험)를 이용하기 때문에 학습이 잘됩니다.
목표 네트워크를 업데이트하는 방법은 DQN과 약간 다른데요. A3C는 에이전트가 서로 독립적이기 때문에 각각 네트워크를 가지고 있고 개별적으로 학습을 하지만 각각의 에이전트가 하나의 목푯값으로 수렴해야 하기 때문에 목푯값을 추정하는 글로벌 네트워크를 하나 만들고 에이전트는 주기적으로 글로벌 네트워크에 학습된 파라미터를 업데이트합니다.
A3C가 발표되기 이전에는 DQN이 다른 강화학습 알고리즘의 베이스라인이었지만 최근에는 A3C를 베이스라인으로 많이 사용하고 있습니다.
다음 시간에는 머신러닝 강화학습의 적용 사례에 대해 알아보겠습니다.
글 l LG CNS 정보기술연구소