본문 바로가기
강화학습

예제로 쉽게 알아보는 강화학습 기초(Q-learning, Reinforcement Learning)

by 미스터탁 2018. 4. 7.

이번 포스트에서는 강화학습(Reinforcement Learning)의 기초에 대해서 이야기 하고자 합니다. 예제를 통해 쉽게 강화학습에 대해 접근 해 보도록 하겠습니다. 강화학습에 대한 개념은 오래전부터 있었던 개념입니다만, 알파고가 등장하면서 급부상하기 시작했죠. 이쪽 분야를 공부하는 사람들 중에서는 강화학습을 들어보지는 못하는 사람은 거의 없을 것입니다. 하지만, 내용이 비교적 어렵고 강화학습을 당장 적용할 수 있는 분야가 많지 않다 보니 아직까지는 많이 어려워하는 것 같습니다. 이번포스트에서는 강화학습에 대한 개념과 Q-learning에 대한 기본적인 내용만 서술하도록 하겠습니다.

 

다음 그림에서 start지점에서 goal지점까지 간다고 가정해봅시다. 인간에게 물어본다면 아래 그림의 화살표 처럼 간다고 이야기 하겠죠. 왜? 냐고 물어본다면 당연히 "최단거리로 장애물을 피해서 갈 수 있으니까!" 라고 대답할 것입니다. 그럼 이제 아래 그림의 문제를 3차원 상황으로 인식해서 인간이 start지점에 있다고 가정해 봅시다. 즉, 현재 인간은 map의 지도를 보지 못하고 그 상황안에 있는 것이죠. 여기서 goal로 가고 싶다면 어떻게 해야할까요? "일단 움직여 봐야 할 것이다". 일단 움직여서 장애물이 있는지 없는지, 목표지점이 보이는지 아닌지를 판단해야하는 거죠. 컴퓨터도 마찬가지 입니다. 컴퓨터에게 start지점에서 goal로 최단거리로 가게끔  하고 싶다면, 일단 컴퓨터에게 움직여보라고 해야할 것입니다.

 

 

 

컴퓨터가 start지점(1,1)에서 취할수 있는 행동은 위, 아래, 왼쪽, 오른쪽으로 이동하는것 네가지 입니다. 이때의 행동을 action이라고 이야기하고, 현재의 위치(1, 1)을 state(상태)라고 정의합니다. 그런데, (1, 1)에서 왼쪽으로 위로 가는 action은 좋은 행동이 아닐 것입니다. 이동하더라도 그 자리인 상황이기 때문이죠. 각 action이 좋은 행동인지 아닌지 판단 할 수 있는 근거(feedback)가 필요하고, 이때의 feedback을 reward(보상)라고 정의합니다. 강화학습은 reward를 통해 현재 state에서 어떤 action을 취하는게 좋은지 학습하는 과정으로 이해 할 수가 있습니다. 이때 어떤 action을 취하는게 좋은지에 대한 의문이 생긱게 되는데, 각 action마다  그 action이 취했을 때 얼마나 좋은지를 측정하는 값(Q-value) 이 학습됩니다. 이 Q-value가 높으면 그 action을 선택했을 때 더 좋은 reward를 받는다고 이해할 수 있죠. 즉, 선택은 action에 Q-value 중 가장 높은 Q-value를 가지는 action을 취하는 것입니다. 

 

 

 

 

이제 reward를 설정 해 봅시다. 이동했을때 제자리이면(벽에 부딪혀서) -2, 그게 아니면 -1이라고 가정해 봅시다. 이동했는데 장애물이 있다면 -10이라고 가정해보죠. 이 상황에서 강화학습을 진행하면 start 지점에서 아래, 오른쪽으로 가는것이 좋다고 학습이 될것이고, (1,2)에서는 위로 가는것을 제외한 나머지 action이 좋다고 학습이 될 것입니다. (2, 3), (2, 4)에서는 아래로 가는 것을 제외한 나머지 action이 좋다고 학습이 되겠죠. 즉 어떤 optimal한 action을 구하는 것이 아니라, 각 상태마다 최악의 action을 제외한 나머지 action을 선택해라! 라고 학습이 되는 거죠. 하지만 우리의 목적은 goal에 갈 수 있게끔 가장 좋은 action을 취하는 것입니다. 즉, 지금 당장 좋은것도 좋은거지만, 궁극적으로는 먼 미래의 목표를 달성할 수 있는 action을 선택해야 하는거죠. (1, 1)에서 아래쪽과 오른쪽으로 가는것은 동일한 reward를 받고 동일한 Q-value를 가지게 된다면, 합리적인 결과라고 볼수 없습니다. 우측으로 간다면 장애물에 도달할 확률이 더 높아지기 때문이죠.

 

 

 

먼 미래에 더 좋은 상황을 가져와주는 action을 선택하게 끔하기 위해, 다시말해 이 action을 취하면 먼 미래에 더 좋다 라는 feedback을 주기 위해 Discount factor(할인율)를 도입합니다. 아래 그림처럼 현재 우측으로 갔을때 장애물에 도달할 확률이 있다는 것을 feedbackㅇ르 주는 것이죠. 이를 위해, 각 state가 받는 보상은 현재 action을 통해 받는 reward + 다음state에서 받을 reward * dicount factor + 그 다음 state에서 받을 reward * discount factor^2 ... 가 되게 됩니다. 즉 당장 받을 수 있는 reward + 미래 보상의 합이라고 보시면됩니다. 

 

 

 

 

 

 

 

 

다시 강화학습에 대해 정의하자면, 달성하고자 하는 목표에대해서 각 state에서 action에 대한 최적의 Q-value를 학습하는 것이라고 할수 있고, 이는 현재 state에서 미래 보상의 합을 최대로 하게끔 학습하면서 이루어 집니다. 어떤 State (st)에 대한 Value function은 아래와 같이 정의 할수 있습니다. (미래 보상의 누적합 이라고 보시면됩니다). 그리고 우리가 학습하고자 하는 정책 파이의 optimum은 모든 state에 대하여 각 Value function을 최대로 하는 action을 선택하는 것이죠. 

 

 

 

반응형

 

Notation에 대해 다시 적으면 아래처럼 적을 수 있고 Value function은 아래 처럼 다시 적을 수 있습니다.

State s, action a, reward r, r(s, a) 즉시 reward, γ discount factor, π 정책(학습하고자 하는 것)

 

 

즉, 각 state마다의 value function는 (미래 보상의 누적합) 현재 reward + 다음 state에서로부터 받을 reward의 합으로 볼 수 있고. 여기서 가장 큰 값을 선택하는 것이기 때문에 이를 Q-value로 정의 할 수 있습니다. 당연히 optimal 한 policy는 모든 state에 대하여 Q-value를 최대로 하는 action을 선택하는 것이죠. 이를 학습하게 끔 해주는 것이 Q-learning이고 Q-learning은 다음과 같은 수식으로 간단하게 학습을 할 수 있습니다. (Q-learning이 나오기 이전까지 base가 되는 많은 알고리즘 들이 있습니다. MDP, Salsa 등. 그러나 요즈음 나오는 대부분의 강화학습은 Q-learning 기반이기 때문에 앞의 부분을 생략하셔도 크게 상관은 없을 듯 합니다)

 

 

현재 State의 action에 대한 Q-value값은 현재 받는 reward와 다음 state에서의 maximum Q-value값 * discount factor로 update시키게 됩니다. 처음에는 random한 action을 취하게 되지만 이 과정을 무수히 반복하게 된다면, optimum policy를 얻을 수 있게 되는 것입니다.

 

전체 Q-learning의 알고리즘을 보시면 여러 실험(episode)을 반복하게 됩니다. 각 episode마다 최대로 진행 할 수 있는 step은 본인이 정하게 됩니다. 각 state마자 action을 취하게 되는데, 이때의 action을 취할 때 "가끔" random하게 선택을 합니다. 그 이유는 가보지 않을 곳을 탐험 하면서 새로운 좋은 경로를 찾을 수 있게끔 하는 것이죠. 우리가 항상 가던 음식점만 가는게 아니라 가끔 새로운 곳을 시도해보는 것과 같다고 보시면 됩니다. 이를 Exploration(탐험)이라고 정의하고, e-greedy방법을 통해 수행합니다. 즉 0~1사이로 random하게 난수를 추출해서 그게 특정 threshold (ex 0.1)보다 낮으면 random하게 action을 취합니다. 그리고 이 threshold는 episode가 반복되면서(학습이 진행되면서) 점점(greedy)하게 낮추게 됩니다. 학습이 수만번 진행되면 threshold값은 거의 0에 수렴하게 되겠죠. action을 취하고 reward를 받고 다음 state를 받고 그리고 현재 state와 action에 대한 Q-value를 update하는 과정을 무수히 반복 하면 됩니다.

 

 

 

 

 

딥러닝에 대한 기본적인 내용과 PyTorch 실습 내용을 결합하여 책으로 출판하였습니다.

 

m.yes24.com/Goods/Detail/93376077?ozsrank=10

 

 

파이썬 딥러닝 파이토치 (Python Deep Learning PyTorch)

파이썬은 선택이 아닌 필수! 파이토치로 딥러닝 입문하기!딥러닝 기술에 초점을 두고 딥러닝을 구현하기 위해 파이썬을 이용하는데, 머신러닝 라이브러리인 파이토치를 활용하여

m.yes24.com

mbook.interpark.com/shop/product/detail?prdNo=339742291&is1=book&is2=product

 

 

싸니까 믿으니까 인터파크도서

 

book.interpark.com

 

 

 

 

 

반응형

댓글