Deep Reinforcement Learning - Introduction
slide :
https://speakerdeck.com/wonseokjung/deep-reinforcement-learning-introduction
안녕하세요. 강화학습을 연구하는 정원석입니다.
Berkley 에서 업데이트 되고 있는 CS294- 2018 fall 강의를 기반으로한 “딥 강화학습”을
‘기초부터 최신 딥강화학습까지’ 알아보는 글을 작성하려고 합니다.
강의에서 다루고 있는 내용은
-
Supervised learning은 어떻게 의사결정을 하고 이러한 것들이 Imitation learning으로 어떻게 transform되는지
- Q-learning, actor-critic 등 강화학습 알고리즘
- Reinforcement Learning 을 기초로 한 Prediction (예측) 문제에 대해
- 더 좋은 Policy를 찾기위한 Exploration방법
- 선지식을 사용하여 다른 환경에 적용하는 Transfer learning, 새로운 Task가 들어왔을떄 더 빨리 배우는 Meta learning
- 현재 강화학습이 풀어야할 문제들과 최신 연구
에 대해서 다룰 예정입니다.
실습도 포함하고 있으며 실습은 위와 같습니다.
실습을 하기위해서는 딥러닝 프레임워크인 Tensorflow가 필요한데요.
Tensorflow가 익숙하지 않으신분은 아래의 텐서플로우 공식 홈페이지에서 연습하시면 좋습니다.
https://www.tensorflow.org/guide/low_level_intro
또한 Tensorflow 를 조금 더 쉽게 사용하기 위해 tensorflow eager를 연습하고 싶으시다면 제가 간단히 작성한 깃헙을 참고해주세요 :)
https://github.com/wonseokjung/hands_on_tf
그럼 지금부터 Reinforcement Learning이 무엇인지, 그리고 왜 우리가 이것을 배워야하는지에 대해서 알아보도록 하겠습니다.
로봇이 지능을 가지고 있다면, 여러가지 용도로 사용될 수 있을것 입니다.
예를 들어,
- 집안일을 하는 목적으로 만들어진 가정용 로봇은 집 안에서 여러가지 일을 할수 있도록 설계가 되어야 할 것입니다.
- 사람을 구조하는 구조로봇은, 여러가지 환경에서 위험하다고 생각하는 일에 구조하도록 설계가 되어야 할 것이며
- 명령을 내리는 휴머노이드는, 여러가지 환경에서 여러가지 복잡한 상황을 이해하고 결정을 옳바르게 내려야 할 것입니다.
이렇게 로봇이 지식을 가질수 있다면 많은 분야에서 유용하게 활용할수 있겠지만, 현재는 아직 연구되고 있는 분야며 현재 산업에 적용하기 힘듭니다.
그렇다면 로봇을 보기 전에 먼저 우리가 실생활에서 접할수 있으며 적용가능한 기계에 대해서 먼저 알아보겠습니다.
큰 오일탱크를 다른 나라로 수출할때 큰 배에 컨테이너로 실어서 바다로 운반합니다.
이 오일탱크를 옮기는 예는 machine learning을 따로 적용하지 않아도 알고리즘을 통해 안전히 운반하는 것이 가능합니다.
하지만 배에 특별한 이상이 생기거나 혹은 문제가 생길 경우를 대비하여 선원이 탑승하는데요.
배에 선원이 탑승하지 않아도 된다면 어떨까요? 선원들을 대신할수 있는 지능을 가진 로봇은 어떠한 지능이 있어야 할까요?
배에서 생기는 여러가지 문제를 해결하기 위해서는 예상되지 않은 위험을 예측하고 상황을 분석하여 최적의 해결방법을 내리는 지
능이 있는 기계가 있어야할 것 입니다. ( Flexibility and adaptability )
이렇게 실제 현장에서는 예상하지 못한, 다양한 문제들이 발생합니다. 이러한 문제를 풀기 위해 딥러닝을 적용했는데요.
딥러닝을 적용한 이유는 Unstructure environment를 Predict를 잘하기 때문입니다.
여기서 Unstructure의 의미는 정확하게 predict할수 없는 상황들입니다.
예를 들어 누군가가 배에 흘린 기름으로 인한 화재 발생과 같습니다.
Deeplearning은 Neural networt를 사용하여만든 수만개의 parameter를 통하여
Input으로 image의 Pixel 값을 읽을수 있습니다.
위는 Yolo v3를 이용한 Object detection 의 예 인데요, 기존에 학습된 모델을 사용하여 카메라에 학습된 물체가 잡혔을 경우 그 물체가 무엇인지 나타냅니다.
딥러닝은 이런 사진뿐 아닌 자연어처리, 음성처리등에서도 사용할수 있습니다.
Deep learning을 통하여 Unstrucuture input을 분석할 수 있지만 Decision making을 할수는 없습니다.
방금 본 지능을 가진 로봇의 예제처럼 가사를 도와주거나 메디컬 로봇처럼 의료에 사용되려면 각 로봇이 상황에 알맞은 결정을 내려야 하는데요.
이렇게 지능이 있는 기계가 Decision making을 하게 하기 위해서는 mathmatical formalism이 필요합니다.
Reinforcement learning은 이렇게 Decision making을 하는 mathmatical framework를 제공합니다.
이 mathmatical framework는 사실 굉장히 간단합니다.
Agent(배우는자)와 Environment(환경)가 interaction(상호작용)을 반복합니다.
Agent는 Decision making(의사결정)을 action을 형태로 하며 Environment는 action을 받고
그 action에 대한 response로 Observation과 reward 를 return 합니다.
Obeservation은 Agent의 의사결정을 한 뒤에 보는 것들이며, reward는 그 action으로 인한 outcome 입니다.
Reinforcement Learning이 큰 성과를 시작한것은 DeepLearning이 적용되고 나서부터입니다.
Deeplearning이 적용된 Reinforcement Learning 방법으로 Atari에서 사람의 퍼포먼스를 능가하였고,
AlphaGo는 바둑 프로기사인 이세돌을 이겼습니다.
여러 분야에서 성공적인 성과를 보인 딥 강화학습이 무엇인지 그리고 우리가 왜 딥강화학습을 알아야하는지 알아보겠습니다.
15년 전에 컴퓨터비전에서는 feature를 직접 디자인했으며 좋은 feature를 디자인하기 하기위해 박사과정을 전부를 feature
디자인하기 위해 사용하기도 했다고 합니다.
현재의 컴퓨어비전은 딥러닝을 사용하여 end-to-end training 을 하기때문에 모든 feature를 디자인하기위해 시간을 많이
소비하지 않아도 되며 어떠한 특정 테스크를 풀수 있도록 optimization이 가능합니다.
Sequential 하게 decision making을 할때에 end-to-end 는 어떠한 의미가 있을까요 ?
여러분이 정글을 걷다가 호랑이를 만났습니다.
의사 결정을 하지 않으면 아마 호랑이에게 잡아먹힐게 뻔합니다.
그래서 아마 여러분은 호랑이를 만났을때 도망가는 행동을 선택할 것 입니다.
기존의 robotics를 예로들면 이렇게 호랑이를 만났을때 시야에 잡히는것이 무엇인지 먼저 perception을 한 뒤에 tiger라고 판단되면, 또 다른 control sytem 을 통하여 “도망간다”를 선택합니다.
하지만, 이렇게 의사결정을 할때 이 호랑이가 어떤 호랑이인지, 작은 호랑인지 큰 호랑이인지 사진에 있는 호랑인지 혹은 비디오인지 진짜 호랑이인지 구분하기가 어렵습니다.
Perception 부분을 없애 간단하게 바꾼다면, 굳이 내 앞에 있는게 호랑이인지 사자인지 어떠한 종류의 호랑이인지 또는 나에게 위험한지 아닌지 판단할 필요없이.
잡아 먹히면 나쁜것, 잡아먹히지 않으면 좋은것 으로 의사결정에 따른 보상을 통하여 학습하는 것이 가능합니다.
Agent는 의사결정을 하며 이러한 의사결정을 actions라고 정의하였습니다.
또한 World는 agent의 action에 반응하여 obsevation과 rewards를 반환한다고 하였습니다.
방금 전 호랑이의 예제와 같이 perception부분을 사용하지 않고 학습하기 위해 의사결정을 하고(Decision) 의 의사결정에 따른 consequences ( observatios), rewards에 대해 몇 가지 예제를 사용하여 알아보도록 하겠습니다.
동물이 학습을 하는 예를 먼저 보도록 하겠습니다.
고양이게 공을 치는 것을 학습시키고 싶다면, 고양이가 공을 치는 행동을 했을때 보상으로 아주 맛있는 음식을 주면 될것입니다.
여기서의 고양이의 actions는 muscle constractions, 즉 근육의 수축작용이며
공이 앞에 있는 상태에서 고양이가 공을 치는 action을 했다면,
그 action으로 인해 고양의 시야 등이 변할 것 입니다.
그리고 그 action을 했을때 보상으로 음식을 준다면 고양이는 다음에도 공이 앞에 있는 상황에서 음식을 얻기 위해 근육 수축을 하여 공을 치려는 action을 선택할 것 입니다.
동물 말고 기계를 예로 든다면,
로봇의 action은 모터의 움직임이나 토크일 것이며,
Obesrvation은 로봇이 카메라로 찍는 이미지, Reward는 로봇에게 지정해준 테스크의 성공여부 일수 있습니다.
로봇에게 쓰레기통을 비우는 테스크를 주었을때 로봇은 모터를 움직여 쓰레기를 버리는 행동을 할것이고 쓰레기를 버렸을때 받는 Reward를 통해 쓰레기를 버리는 action 을 학습할 것 입니다.
동물이나 기계같이 physical한 에이전트 말고도, 시장에서도 적용할수 있습니다.
Inventory를 잘 관리하기 위해 강화학습을 적용할수 있죠.
기존 supervise learning에서 image를 classificatin 을 하기 위해서는 이미지를 labeling 하는 작업이 필요한데요. 이 작업은 수작업이고 시간이 매우 오래 걸립니다.
그 시간을 줄이기 위해 강화학습을 적용할 수 있습니다.
강화학습은 기본적으로 아주 복잡한 셋팅에서 일반적인 방법을 찾아 문제를 해결하며,
Deep model은 end to end로 강화학습 알고리즘이 복잡한 문제를 해결할수 있게 합니다.
딥러닝을 이용하여 고차원의 observation혹은 복잡한 action space를 가진 문제들을 강화학습의 학습 알고리즘에 적용하여 푸는것이 가능합니다.
Reinforcement learning에 deeplearning 을 적용한 DeepReinforcement Learning 의 예를 몇가지 살펴보겠습니다.
Learning Complex Dexterous Manipulation with Deep Reinforement Learning and Demostrations이란 논문은 다섯손가락을 가진 로봇 팔이 망치를 잡고 사용하는 등 정교한 Policy를 Deep reinforcemente learning을 이용하여 학습합니다.
논문은 대략적으로, 여러가지 손가락을 가진 로봇으로 할수 있는 테스크가 굉장히 많은데, 이 로봇팔을 제어하기 위해서는 기존의 강화학습으로는 한계가 있다는 것 입니다.
그래서 사람의 Demonstraion을 통해 복잡도를 줄여 시뮬레이터 안에서 로봇이 물체를 옮기고, 툴을 사용하고 문을 여는 등의 행동을 자연스럽게 하는 Policy 를 찾았다는 것 입니다.
그리고 다음으로는 2015년도에 나온 유명한 논문인 Convolutional neural network를 사용하여 아타리 게임을 학습시켰는데요.
그 중 브레이크아웃 게임에서 한쪽 벽을 뚫어 점수를 많이 받는 Policy를 학습하였습니다.
DQN의 구조는 위와 같으며, Agent는 여러가지 action을 해보며 목표를 달성하기 위해 상황에 따라 action을 선택합니다.
이 내용은 추후 더 다를 예정이며, 궁금하신분은 아래 링크의 글을 참고해주세요.
https://wonseokjung.github.io//reinforcementlearning/update/Supermario1/
딥러닝, 강화학습, 컴퓨테이션이 발전한 지금 우리가 Deep reinforcement learning을 배워야할 때이고 이 Deep reinforcement learning 을 사용하여 game, robot, 바둑 등에서 많은 성과를 보이고 있습니다. (DQN 논문에서 사용된 리플레이 메모리는 이미 고전 강화학습에서 1990년에 다뤘던 내용입니다. 이것이 Deeplearning과 만나면서 사람의 성능을 능가하게 되었습니다.)
Agent가 action을 하고, Obervation이 이 action을 받아 observation을 return하는 정보 말고도 실제 세상에서 sequential decision making 문제를 풀기 위해서 어떠한 것들이 추가로 필요할까요?
강화학습은 Policy를 배울때 task를 풀때 받은 Reward를 최대화 하는 action을 선택을 합니다.
하지만 실제로 이 방법을 사용할때는 더 심화방법이 있는데요.
task를 푼 다른 예에서 Reward fucntion을 가져와 학습하는 Inverse Reinforcement learning 방법,
이전에 이미 학습하였던 테스크와 비슷한 도메인의 새로운 테스크를 배울때 더 효율적으로 학습하는 transfer learning, meta-learning,
세상이 작용하는 매캐닉을 배우고 action을 선택할때 그 매캐닉을 사용하는 방법 등 최근 연구되고 있는 학습방법에 대해서 다루도록 하겠습니다
그렇다면 이 Reward는 어떻게 알수 있을까요?
예를 들어 Atari게임에서의 reward는 score가 될수 있습니다. Agent 는 이 score를 더 많이 받을수 있는 action을 선택할 것 입니다.
하지만 현실에서는 이러한 Score를 받을수 없습니다.
실제 현실에서 Reward 설정이 어려울뿐 아니라 sparse 하기때문에 Reward 설정을 하더라도 학습하기가 어려울 것 입니다. (치타가 사슴을 잡아서 먹기까지 과정이 너무 길다. -> 처음 reward를 받기가 너무 어렵다.)
그래서 아주 scratch 부터 배우는것이 아닌 supervised의 방법을 사용하여, Demonstraions, World , Tasks로부터 선학습을 하는 방법을 사용하기도 합니다.
사용된 예 중 하나는, 전문가가 운전한 영상을 사용하여 그 운전 영상과 agent가 운전하는 것의 차이를 로스로 두어서 그 로스를 줄이기 위해 weight를 업데이트 합니다.
강화학습에서 최근 야기되는 open problem는
- 사람과 달리 어떠한 테스크를 배우는데 시간이 너무 오래걸린다는 것
- 사람처럼 사전 지식을 잘 사용하여 새로운 테스크를 배우는 방법
- Reward function을 정하기 매우 어려운 테스크도 있다는것
- 예측의 역할을 정리하기가 어렵다는 점
입니다.
기존 고전강화학습에 추가하여 Deep Reinforcement learning을 다루는 이 강좌는 앞으로 위의 내용을 중점적을 다룰 예정이며 다음시간은 Imitatoin Learning에 대하여 더욱 자세히 알아보도록 하겠습니다.
감사합니다.