앎을 경계하기

Machine Learning/Reinforcement Learning

차근차근 Spinning Up 톺아보기 1 - Part 1: Key Concepts in RL

양갱맨 2019. 10. 28. 20:08

항상 RL 관련 논문을 찾을 때 Open AI의 Spinning Up을 이용했었는데 막상 제대로 살펴본 적이 없어서 Spinning Up에 대한 정리를 해보려고 한다. 사이트는 아래 참고하기

https://spinningup.openai.com

 

Welcome to Spinning Up in Deep RL! — Spinning Up documentation

© Copyright 2018, OpenAI. Revision 2e0eff9b.

spinningup.openai.com


INTRODUCTION TO RL

Part 1 : RL 핵심 개념

RL은 무엇을 할 수 있을까?

강화학습이 최근 들어 다양한 것들에서 좋은 결과를 내고 있다.
예를 들어, 시뮬레이션 환경에서 로봇을 컨트롤 하기 위한 학습 방법으로 RL을 사용한다던지..
실제 세상에서도 마찬가지고..

바둑, Dota(롤같은 AOS 게임같다), Atari 2600 같은 게임에서도 사용되고 로봇 학습에도 사용된다.

출처 : 나무위키 - 바둑

 

출처 : 위키백과 - Dota2
출처 : Google DeepMind - Atari 2600 breakout

핵심 개념과 용법(?)Terminology

출처 : https://spinningup.openai.com

강화학습의 주요 개념은 agent와 environment이다.


Environment는 agent와 상호작용을 하고 agent가 살고있는 세계라고 생각하면 된다.


매 step마다 에이전트는 환경과 상호작용을 하게되는데 이때 상호작용의 반응으로 환경이 에이전트에게 주는 것이 observation(관찰)이다.


observation은 환경의 상태에 대한 정보들이라고 생각하면 된다.


매 스텝마다 에이전트와 환경이 상호작용한다고 했는데, 스텝은 에이전트가 어떤 상태에서 액션을 했을 때 1 step을 진행하는 것이다.


에이전트가 어떤 상태에서 행동을 했을 때 그 행동이 좋은지 안 좋은지를 판단할 수 있어야 에이전트가 다음에 또 그 상태에 그 행동을 해도 되는지 마는지 학습하게 되는데 그럼 이 판단은 뭘로 할까?


바로 reward이다.

좋은 보상을 받으면 상을 받은거니까 그 행동이 좋다고 판단할 것이고 안 좋은 보상을 받으면 벌이니까 그 행동을 하면 안된다고 학습하게 된다.


reward는 환경이 에이전트에게 주는 것이다. 에이전트는 이 reward를 쭉 받았을 때 최종적으로 가장 크게 만들도록 학습하게 된다.


지뢰찾기를 예로 들면 에이전트가 어떤 칸을 눌렀는데 그 칸이 지뢰가 아니면 positive reward를 받을 것이다. 만약 지뢰를 누르게 되면 negative reward 받으면서 게임이 끝나버린다. 에이전트가 10번 정상 칸 누르고 1번 지뢰를 눌렀을 때의 reward의 총합보다 15번 정상 칸 누르고 1번 지뢰를 눌렀을 때의 reward 총합이 더 클 것이다.

이 reward의 총합을 return이라고 부르고 에이전트의 학습 목표는 return을 maximizing하는 것이다.

 

Spinning Up에서는 아래의 용어에 대한 설명을 한다.

  • states and observations,
  • action spaces,
  • policies,
  • trajectories,
  • different formulations of return,
  • the RL optimization problem,
  • and value functions.

states and observations

state는 주로 s로 표기하며 환경의 상태를 완벽하게 설명하는 것이다.

observation은 o로 표기하며 이 state의 부분적인 설명을 하는 정보이다.

예를 들어 시각적인 observation은 픽셀 값들의 RGB 행렬로 나타날 수도 있고 robotics에서는 joint 각도나 속도 같은게 observation이 될 것이다.

완전하게 환경의 상태에 대해 다 알고 있다면 fully observed라고 하고 부분적으로만 안다면 partially observed라고 한다.

action spaces

환경에서 할 수 있는 액션의 집합을 action space라고 한다.

각 환경마다 나타나는 액션의 형태가 다른데 주로 게임 같이 행동이 몇 개로 정의 되는 환경은 discrete action spaces를 가진다. 반대로 로봇 제어처럼 모터의 각도 같은 연속적인 값이 행동으로 정의되는 환경은 continuous action spaces를 가진다. continuous action spaces에서 행동은 real-valued vector이다.

policies

Policy는 에이전트가 처한 상태에서 할 수 있는 액션을 고르는 일종의 룰이다.

딱 어느 한 값으로 나타낼 수 있는 deterministic한 경우에는 mu를 사용하여 나타낼 수 있다.

어떤 값으로 정해지지 않고 확률로 나타나는 stochastic한 경우엔 pi를 사용한다.

policy는 에이전트가 어떤 상태에서 어떤 행동을 할지 매핑을 해주는 기능을 하기 때문에 이 policy를 최적으로 만드는 것이 reward를 maximizing 하는 것과 일맥상통하는 것이라고 볼 수 있다.

Deep RL에서는 policy를 파라미터화해서 뉴럴넷을 적용하여 사용하는 방법도 있다.

policy의 파라미터는 주로 소문자 theta나 소문자 phi로 표현한다.

stochastic policy의 경우에 주로 나타나는 형태는 categorical, diagonal gaussian이다.

stochastic policy를 사용하고 학습시키려면 두 가지 연산이 중요하다.

1. Policy로부터 action들을 샘플링한다.

2. 액션들의 log likelihood를 계산한다.

 

* log likelihood?

샘플링한 데이터가 나올 확률을 Likelihood라고 한다. Likelihood에 log를 취한 형태이다.

 

categorical policy는 discrete actions들의 분류기와 같다. 만약에 categorical policy에 대한 뉴럴넷을 설계하고 싶다면 classifier 설계하듯이 하면 된다.

input - observation 이 될 것 이고 hidden layer를 구성한다. (강화학습은 layer가 깊어질수록 결과가 별로 안좋다고함.)

마지막 layer에서 activation으로 softmax를 취해서 각 액션의 확률을 얻을 수 있다.

 

아까 위에서 두 가지 연산이 중요하다고 했는데 그럼 categorical policy에서는 어떨까

sampling : 각 액션에 대한 확률이 주어지면 딥러닝 프레임워크를 통해서 쉽게 sampling할 수 있다.
(tf.distributions.Categorical, tf.multinormial)

Log-Likelihood : 확률에 대한 맨 마지막 레이어에서 action을 벡터의 인덱스로 취급해서 각 action에 대한 log likelihood를 얻을 수 있다.

Diagonal Gaussian Policy는 항상 observations에서 actions들의 평균으로 매핑되는 신경망이 있다.
covariance matrix는 일반적으로 두가지 방법으로 표현된다.

첫번째 방법 : state의 함수가 아니라 log 표준편차의 단일 벡터가 있다.

두번째 방법 : states로부터 log 표준편차로 매핑되는 뉴럴 넷이 있다.

/* 이 두 방법 모두 표준 편차 대신에 log 표준편차를 출력한다. 왜냐하면 std가 만약에 음수면 안되기 때문이다.
이런 제약을 신경쓰지 않고 매개변수를 훈련시키는 것이 더 쉽다. 표준 편차는 지수화해서 log 표준 편차를 바로 얻을 수 있다. */ - 이건 좀 공부를 해서 이해를 해야겠다.

categorical은 discrete action spaces에서 사용하고 diagonal gaussian은 continuous action spaces에서 사용한다.

Trajectories

trajectory는 쉽게 말하면 에이전트가 경험한 기록이다.

일련의 시퀀스로 T = (s0,a0,s1,a1,...) 으로 나타낼 수 있다.

이 trajectory들이 에이전트가 경험한 하나의 에피소드를 나타내며 여러 개가 모이면 episodes/rollouts 라고 부른다.

s0는 환경 자체에서 딱 고정된게 아니면 아래처럼 rho_0으로 부터 샘플링된 s0이다.
반대로 말하면 rho_0는 첫 시작 상태에 대한 분포라는 것.

첫 상태에서 행동을 하고 나서 다음 상태로 넘어가는 것도 어떤 확률로부터 (현재 상태, 액션)을 줘서 다음 상태를 받게 된다. 이 어떤 확률이 transition probability이다. 

 

다음 포스팅에서는 reward와 return, value function에 대해 정리해야겠다.