최근 학교에서 연구프로젝트 과목에 참여하여, Deep Reinforcement Learning 쪽으로 공부를 진행하고 있는데,
좀 신기한 사실들이나 어려운 것들을 공부하다보니 정리해두면 좋을 것 같아서
이 프로젝트에 대해 정보나, 프로젝트 진행 사항, 느낀 점 등 다양한 것들을 정리하고자 한다.
가장 먼저 다룰 주제는 Reinforcement Learning (RL) 강화학습과 Deep Reinforcement Learning(DRL) 심층 강화학습이다.
Reinforcement Learning (강화학습)
강화 학습은 MDP 조건과 Q value function 계산 방식,
Off-Policy or On-Policy 등에 따라 여러 가지 분류가 존재하지만 일단
이 글은 강화학습에 어떤 것들이 있는지 다루기 보단,
강화학습이 할 수 있는 것이 무엇이고 DRL은 무엇이 개선되었는지에 대해서 적고자 한다.
일단 강화학습은 Machine Learning의 한 가지 예이다.
Machine Learning은 위 그림과 같은 분야로 구분이 된다.
Supervised learning (지도 학습)
인간이 라벨링 된 데이터를 많이 제공하고, 이를 정답과 일치 시켜보며 학습한다.
그리고 학습이 끝나면 라벨이 없는 데이터를 넣어 정답을 예측한다.
쉽게 생각하면 이미지 분류 기술을 떠올리면 될 것 같다.
정답을 알고 있는 데이터를 다루기 때문에, 비교적 학습이 유리하다.
Unsupervised Learning (비지도 학습)
Supervised Learning 과 비슷하지만, 정답을 알려주지 않고 학습시킨다는 차이가 있다.
스스로 패턴을 Clustering해서 비슷한 성질이 있는 데이터끼리 모은다.
Reinforcement Learning (강화 학습)
인간이 제공하는 sample data가 없다는 것이 가장 큰 특징으로,
컴퓨터가 실제 환경에 대해서 여러 동작을 수행해보며
그 때마다 얻어지는 반응을 확인하여 학습을 한다.
여기서 여러가지 전문 용어가 나오는데
agent : 컴퓨터
state : 상태
action : 행동
reward : 행동에 따른 보상
policy : 어떤 state에 대한 action 메뉴얼
정도로 생각하면 된다.
강화학습은 샘플 데이터를 만들기 힘든 상황에서 굉장히 효과적인데,
실제 환경의 특정 state에서 수 많은 action을 해보고 reward를 확인하면서,
동일한 state가 다시 닥쳤을 때, 더 좋은 action을 수행하는(더 좋다는 말은 더 큰 reward를 가져오는)
Policy(정책)를 가지도록 만든다.
현재 State → Policy 기반 action → 다음 state → reward 확인, policy에 반영
이 과정을 반복하여 원하는 보상을 얻을 때 까지 반복하는 것이라고 보면 된다.
policy 가 우수해질 수록 얻는 reward가 커질 것이고,
궁극적으로 total reward가 maximize되도록 policy를 계산해나간다.
그렇다면 어떤 특정 state에서 어떤 action을 해야 좋은지를
기록하여 업데이트 할 수 있는 무언가가 필요할 것이라는 생각이 들 것이다.
그것이 RL에서는 Table형태로 만들어진다.
각 state에 대해서 취할 수 있는 모든 action에 대해 잠재적인 보상을 기록한다.
그리고 실제 얻게 되는 Reward를 반영하여 이 Table을 지속적으로 업데이트해서
최종적으로 최고의 보상을 얻을 수 있는 table을 완성시키는 것이다.
굉장히 추상적으로 설명했는데, 자세한 이론은 다른 글에서 다루고 일단은 넘어간다.
결론적으로 위에서 설명한 것이 Q Table인데,
이를 이용하여 현재 state에서 state-action value : Q(state, action) 값이 최대화 되는 action을 선택한다.
이를 Tabular updating method 라고 하며,
모든 state-action pair에 대해 Q값을 알고 있어야한다.
그리고 이 Q table을 업데이트하며 Optimal Policy를 찾아나간다.
그러나 state space, action space가 커지면 이 Table을 다루는데 문제가 생긴다.
예를들어 로보틱스에서 4족 보행 로봇에 12개의 관절이 있다면,
그리고 그 관절이 0~90도 각도를 가질 수 있다면,
91^12 개의 state 개수가 존재해버린다.
이를 차원의 저주라고 하며, 기존 RL의 Q table은 이를 감당할 수 없다.
따라서 기존의 로보틱스나 자율주행, 게임 등과 같은 분야의 문제를 RL로 해결하기에는
state와 action이 Q table로 감당할 수 없을 정도로 많다.
이를 극복하기 위해 등장한 개념이 DRL이다.
Deep Reinforcement Learning (심층 강화 학습)
위에서 설명한 Q Table을 저장하지 않고 State-Action pair에 대한 Q Value 값을 계산할 수 있다면?
즉, Q value 를 도출할 수 있는 함수가 존재하면 된다.
DRL은 Deep Learning 의 Deep Neural Network 를 이용해서 이 문제를 해결한다.
이 개념은 비교적 최근에 제시되었는데,
알파고 개발사인 Google Deepmind가 2013년
Playing atari with deep reinforcement learning 라는 논문을 내놓게 된다.
이 논문은 기존 RL에 이미지 처리 프로세싱인 CNN 의 Deep Neural Network(이하 DNN) 를 적용하여
Q value 를 계산하는 Q-Network (DQN)를 구현해낸다.
이것이 RL에 Deep Learning이 적용되는 DRL의 시작이다.
DRL은 state-action value function 또는 policy를 DNN을 이용해서 approximation하는 것으로,
일단 Policy는 제쳐두고 DQN 위주로 설명을 하면,
기존 Q table에서 Q 값을 찾는게 아니라,
어떤 State에 대해 취할 수 있는 action의 Q값을 Q-Network를 이용하여 얻는 것이다.
이러면 Q-Network를 잘 구성하는 것이 중요하다.
출력 값을 잘 도출할 수 있도록 Network를 만들어야한다.
이 DRL의 장점은 State와 Action의 수가 커지더라도
결국엔 네트워크에 input을 넣어 output을 얻기 때문에 상관이 없다는 것이다.
알파고가 가능했던 이유는, 효과적인 DNN 구성에 있다.
바둑의 경우의 수를 생각해보라
이를 Q table에 구현하는 것은 불가능할 뿐더러 이를 효과적으로 업데이트하는 것도 거의 불가하다.
무수히 많은 경우의 수에 따른 수많은 state와 action이 존재하기 때문이다.
그러나 DNN이 이 계산을 가능하게 한다.
DRL의 무서운 장점은 환경에 대한 Reward와 Penalty만 적절히 정의해주면
수많은 경우의 수를 Sampling 해서 DNN이 적절한 Policy, Value function을 구현해낸다는 것이다.
말도 안되지 않는가?
앞으로 이것이 어떻게 가능한지에 대해 천천히 게시물을 작성하기로 하고,
DRL의 시초가 된 DQN이 Atari 벽돌깨기 게임을 학습해나가는 동영상을 첨부하겠다.
정말 무서운 점은 이 Q-Network에 단순히 게임화면 input(reward는 게임 화면에 나타나는 점수)만을 제공하고,
게임에 대한 어떠한 룰도 제공하지 않지만 스스로 게임의 높은 점수를 얻는 방식을 학습하는 점(심지어 벽 쪽에 구멍을 뚫어 공이 벽돌 위쪽에서 맴돌게하는...) 이 매우 인상적이다.
이것이 파괴적인 기술 DRL이 10년 전 이 세상에 디딘 첫 발이다.
그리고 나도 이걸 조금 열심히 공부해서 프로젝트에 적용시켜 보려한다.