강화학습/파이썬과 케라스로 배우는 강화학습(스터디)

[강화학습] 01 - 강화학습 개요

고집호랑이 2022. 12. 12. 00:26

개요 

구글 딥마인드(DeepMind)의 알파고(AlphaGo)를 모르는 사람은 드물 것입니다.

 

알파고가 세계적인 프로 바둑 기사인 이세돌 9단과의 시합에서도 승리하고 2017년 5월에는 세계 랭킹 1위인 커제 바둑 기사와의 상대로도 이긴 것으로 세상을 놀라게 했기 때문입니다.

 

경우의 수가 $10^{360}$개나 되는 바둑을 알파고가 계산하고 문제를 풀어 승리를 했으니 놀랄 수 밖에 없었죠.

 

이 알파고가 엄청난 경우의 수를 학습할 때 사용된 기술이 바로 강화학습입니다.

알파고

알파고는 강화학습을 이용하면 엄청나게 경우의 수가 많은 문제도 풀 수 있다는 가능성을 열어 준 것입니다.

 

이 도약은 로봇분야에 있어서 더 큰 의미를 가져다 주는데, 로봇이 무한대의 경우의 수를 가졌다고 할 수 있는 현실세계에 대해서 강화학습을 통해서 학습한다면 여러 상황에서 로봇이 실제로 활용될 수 있기 때문입니다.

 

탁구공을 치면 주어지는 보상, 로봇이 물건을 집거나 건들면 주어지는 보상, 인간의 감정에 공감해주면 주어지는 보상 등 보상을 얻는 방법만 잘 설정해준다면 탁구로봇, 로봇 팔, 감정로봇이 만들어지고 더욱 발전될 수 있다는 것입니다.

 

로봇공학자를 꿈꾸는 제가 강화학습에 대해서 공부를 시작하게 된 계기라고도 할 수 있죠!! ㅎㅎ

  

이곳에는 "파이썬과 케라스로 배우는 강화학습"이라는 책을 읽고 정리한 내용과 읽다가 궁금한 부분을 공부한 내용을 적으려고 합니다~!!


강화학습의 개념

강화학습이라는 분야는 머신러닝 학문자들이 행동심리학에서 나온 "강화"라는 개념을 컴퓨터 학습에 도입하면서 시작되었습니다.

 

즉 강화학습은 행동심리학 + 머신러닝이 합쳐진 개념이라고 할 수 있겠죠. 

 

행동심리학에서의 강화

행동심리학에서의 강화는 동물이 시행착오를 통해 학습하는 방법 중에 하나로 스키너라는 행동심리학자에 의해서 제시되었습니다.

 

스키너는 상자 안에 굶주린 쥐를 넣고 쥐가 지렛대를 누를 때만 먹이가 나오게 상자를 만듭니다.

 

쥐는 우연히 돌아다니다가 지렛대를 눌러 먹이를 먹게 되고 이 상황이 반복되자 쥐는 먹이와 지렛대 사이의 관계를 알게 되고 지렛대를 더 자주 누르게 됩니다.

 

이때 우리는 쥐가 지렛대를 누르면 먹이를 먹을 수 있다는 것을 "학습"했다고 말합니다.  

 

스키너의 강화 연구

즉 강화란 이전에 배우지 않았지만 직접 시도하면서 행동과 결과로 나타나는 보상 사이의 상관관계를 학습하는 것입니다.

 

핵심은 쥐가 지렛대를 누를 때 왜 먹이가 나오는지는 이해하지 못했지만 점점 보상을 얻게 해주는 행동을 자주 한다는 것입니다. 

 

이러한 강화는 사람에게서도 쉽게 찾아볼 수 있는데, 아이가 첫걸음을 떼는 과정과 어린아이가 자전거 타는 법을 배울 경우를 그 예로 들 수 있습니다. 

 

처음에 어린 아이가 자전거를 탈 때도 다양한 행동을 시도하다가 넘어지기도 하면서, 자신의 행동과 자전거에서 넘어지지 않는다는 보상 사이의 연관관계를 학습해서 결국 자전거를 잘 타게 됩니다. 

 

이렇게 사람과 동물에게 학습의 기본이 되는 강화라는 개념이 강화학습의 모티프가 된 것입니다.

 

머신러닝과 강화학습

머신러닝은 인공지능의 한 범주로 컴퓨터가 주어진 데이터로 스스로 학습하여 성능을 높여가는 것입니다.

 

이러한 머신러닝은 크게 지도 학습, 비지도 학습, 강화학습으로 나뉘데 되는데요, 다음과 같은 특징이 있습니다.

머신러닝의 종류

 

1. 지도 학습(supervised learning)

  • 인간인 관여자가 문제에 대한 답을 알고 있고, 인공지능(AI)이 그것을 알아낼 수 있도록 훈련시키고자 할 때 사용 
  • 컴퓨터 자신이 낸 답과 정답의 차이를 통해 지속해서 학습 

 

2. 비지도 학습(unsupervised learning)

  • 지도 학습과 다르게 정답이 있는 것이 아님
  • 주어진 데이터를 이용해서 비슷한 것끼리 묶어주는 식의 학습 ex) 페이스북에서 비슷한 성향을 가진 사람들끼리 묶는 군집화에 사용

 

3. 강화학습(reinforcement learning) 

  • 컴퓨터가 선택한 행동에 대한 환경의 반응인 "보상(reward)"을 통해 학습
  • 이 보상은 컴퓨터에게 간접적인 정답의 역할을 하며 보상을 얻게 하는 행동을 점점 많이 하도록 학습

당연히 우리는 이 중에서 강화학습에 주목해야 합니다. 

 

스스로 학습하는 컴퓨터, 에이전트

강화학습을 통해 스스로 학습하는 컴퓨터를 에이전트(agent)라고 칭합니다. 

 

이 에이전트는 환경에 대해 사전 지식이 없는 상태에서 학습을 하는데 이는 강화학습의 가장 큰 장점이자, 초반의 느린 학습의 원인이 되기도 합니다. 

 

에이전트는 자신의 행동에 대한 결과를 보상을 통해 학습하면서 어떤 행동을 해야 좋은 결과를 얻게 되는지 알게 됩니다.

 

에이전트는 점차 보상을 받는 행동을 자주 하게 되고 환경으로부터 더 많은 보상을 얻게 되는데 강화학습의 최종 목적은 에이전트가 얻는 보상들의 합을 최대화하는 "최적의 행동양식, 또는 정책"을 학습하는 것입니다.

에이전트와 환경의 상호작용

우리는 에이전트가 얻는 보상을 양수로 설정할 수도 있고 경우에 따라 처벌의 의미로 음수로 설정할 수 있습니다.

 

이렇게 상벌을 적절히 융합하여 보상을 설정하는 것이 효율적인 강화학습을 위한 중요한 문제입니다. 

 

보상과 처벌을 잘못 설정하면 의도한바와 다르게 에이전트가 학습하겠죠? 어쩌면 학습에 진전이 없을 수도 있고요! 


강화학습 문제

이런 강화학습은 결정을 순차적으로 내려야 하는 문제에 적용됩니다.

 

뒤에서 다룰 다이내믹 프로그래밍(dynamic programming)과 진화 알고리즘(evolutionary algorithm)도 적용될 수 있지만 이들은 각기 한계를 가지고 있으며 강화학습이 그 한계를 극복할 수 있습니다.

 

에이전트가 강화학습을 하기 위해서는 문제를 수학적으로 표현해야 하는데, 이때 사용하는 방법이 MDP(Markov Decision Process)입니다.

 

MDP는 순차적 행동 결정 문제를 수학적으로 정의해서 에이전트가 순차적 행동 결정 문제에 접근할 수 있게 해줍니다.

 

MDP는 다음과 같은 구성 요소를 가집니다. 

 

1. 상태(state) 

  • 에이전트의 정적인 요소뿐만 아니라 움직이는 속도와 같은 동적인 요소 모두 상태로 표현할 수 있습니다.
  • 에이전트가 상황을 판단해서 행동을 결정할 수 있는 충분한 상태 정보를 제공해야 합니다.

 

2. 행동(action)

  • 단순히 에이전트가 어떠한 상태에서 취할 수 있는 행동 ex) 상, 하, 좌, 우, 점프 등등
  • 학습이 되지 않은 에이전트는 초반에 무작위로 행동을 취하다가 학습하면서 특정 행동들을 할 확률을 높입니다. 
  • 에이전트가 행동을 취하면 환경은 에이전트에게 보상을 주고 다음 상태를 알려줍니다.

 

3. 보상(reward)

  • 강화학습을 다른 머신러닝 기법과 차별화시키는 가장 핵심적인 요소로 에이전트가 학습할 수 있는 유일한 정보
  • 강화학습의 최종 목표는 이 보상들의 합을 최대로 하는 것

 

4. 정책(policy)

  • 에이전트가 구해야 할 답으로 모든 상태에 대해 에이전트가 어떤 행동을 해야 하는지 정해놓은 것
  • 강화학습을 통해 에이전트가 구한 가장 좋은 정책, 즉 보상의 합을 최대로 받는 정책을 최적 정책(optimal plolicy)이라고 합니다. 

강화학습의 예시: 브레이크 아웃

알타리의 브레이크아웃

브레이크아웃이란 위의 그림과 같이 아래 움직이는 바를 이용해서 공으로 화면에 있는 모든 벽돌을 깨는 게임입니다.

 

아타리의 고전게임인 브레이크아웃에 강화학습을 적용할 때 에이전트가 학습하는 과정에 대해서 알아봅시다. 

 

MDP

  • 상태:  환경으로부터 받아들이는 상태는 게임 화면
  • 행동:  제자리, 왼쪽, 오른쪽, 발사가 가능, 게임을 시작할 때만 사용하는 발사를 제외하고 에이전트는 항상 3가지 행동이 가능
  • 보상:  벽돌이 하나씩 깨질 때마다 보상을 (+1)씩 받고 더 위쪽을 깰수록 더 큰 보상을 받으며, 아무것도 깨지 않을 경우 보상으로 (0)을, 공을 놓쳐 목숨을 잃을 경우에 보상으로 (-1)을 받습니다.

 

학습 방법

  1. 처음에 에이전트는 게임이나 상황에 대해 전혀 모르기 때문에 무작위로 제자리, 왼쪽, 오른쪽으로 움직입니다.
  2. 에이전트가 우연히 공을 쳐 벽돌을 깨면 환경으로부터 +1의 보상을 받고 공을 놓치면 -1의 보상(처벌)을 받습니다.
  3. 1, 2 과정이 반복되면서 어떻게 해야 공을 떨어뜨리지 않고 벽을 깰 수 있는지 학습하게 됩니다.

위 과정을 통해서 에이전트는 공을 떨어뜨리지 않고 벽을 깰 수 있게 학습했을 것입니다. 

 

하지만 강화학습의 목표는 단순히 보상을 얻는 것이 아니라 누적되는 보상의 합을 최대화하는 최적 정책을 구하는 것입니다. 

 

현재의 정책이 최적임을 알 수 없는 에이전트는 초반에 많은 탐험을 계속하다가 한쪽 벽을 뚫게 되면서 더 큰 보상을 환경으로부터 받게 됩니다. 

 

이를 통해서 에이전트는 한쪽 벽을 뚫는 일종의 전략을 학습하게 되는 것이죠.

 

브레이크아웃의 에이전트가 강화학습을 통해 학습되는 것은 인공신경망(브레이크 다운에서는 DQN이라는 인공신경망을 사용)입니다.

 

인공신경망으로 게임 화면이 입력으로 들어오면 그 상태에서 에이전트가 할 수 있는 행동이 얼마나 좋은지 출력으로 내놓는데 이를 행동가치함수 즉 큐함수(Q Function)라고 합니다.

 

여기선 DQN은 입력으로 들어온 상태에 대해서 제자리, 왼쪽, 오른쪽 행동의 큐함수를 출력으로 내놓고 가장 큰 가치를 지니는 행동을 선택하게 되는 것이죠.

 

이 행동을 취하면 환경은 에이전트에게 보상과 다음 상태를 알려주면서 DQN 또한 더 많은 보상을 받도록 조금씩 조정합니다.

 

여기서 헷갈리면 안 되는 것이 인공신경망(DQN)은 행동에 대한 보상을 미리 아는 것이 아니라 각 행동에 따른 보상을 확률로 계산하여 보상의 기댓값을 큐함수의 형태로 출력합니다. (보상은 무조건 각 행동을 취한 후에 환경으로부터 받는 것입니다.) 

 

인공신경망의 입출력

사람은 하나를 학습하면 다른 곳에도 그 학습이 영향을 미칩니다.

 

예를 들어 어떤 학생이 파이썬을 배웠다면 C++을 배우기 더 수월할 것입니다! 응용이라는 것을 하는 것이죠.

 

하지만 강화학습 에이전트는 각 학습을 다 별개로 취급해서 항상 바닥부터 학습해야 합니다.

 

이 부분이 우리가 강화학습을 더욱 발전시키기 위해서 해결해야 할 과제입니다.


MDP, 큐함수, 최적정책, 인공신경망 등 새로운 용어들이 한 번에 많이 나와 헷갈리겠지만 이것들은 강화학습의 전반적인 흐름을 설명하기 위해 사용된 것 뿐입니다.

 

다음 포스팅부터 예시와 함께 하나하나 자세히 들여다 볼 예정입니다.

 

긴 글 읽어 주셔서 감사합니다. 다음에 MDP와 벨만 방정식으로 뵙겠습니다~! 

 

http://www.yes24.com/Product/Goods/44136413

 

파이썬과 케라스로 배우는 강화학습 - YES24

“강화학습을 쉽게 이해하고 코드로 구현하기”강화학습의 기초부터 최근 알고리즘까지 친절하게 설명한다!‘알파고’로부터 받은 신선한 충격으로 많은 사람들이 강화학습에 관심을 가지기

www.yes24.com

※ 이 글은 위의 책 내용을 바탕으로 작성한 글입니다.