본문 바로가기

> Reinforcement Learning/> Basic

[강화학습 기초지식] Part 1: Key Concepts in RL (1)

본 포스트는 OpenAI에서 공개한 강화학습 교육자료인 Spinning Up의 도움을 받아, 강화학습(Reinforcement Learning, RL)에 대한 기초개념을 정리해보고자 제작한 시리즈의 일환입니다.

1)기초 지식 2)주요 논문, 3)최신 논문 의 순서로 시리즈를 정리하고자 합니다.

아래 링크에서 더 상세한 내용을 찾아볼 수 있습니다.

Part 1: Key Concepts in RL - Spinning Up documentation
Welcome to our introduction to reinforcement learning! Here, we aim to acquaint you with the language and notation used to discuss the subject, a high-level explanation of what RL algorithms do (although we mostly avoid the question of how they do it), and a little bit of the core math that underlies the algorithms. In a nutshell, RL is the study of agents and how they learn by trial and error.
https://spinningup.openai.com/en/latest/spinningup/rl_intro.html

What Can RL Do?

머신러닝의 한 갈래인 강화학습은 최근들어 크게 각광받고 있습니다. 세기의 대결이었던 이세돌기사와 알파고의 대국부터 시작해서 Atari game, 테트리스, Dota, 슈퍼마리오 등과 같은 다양한 게임에도 사용됩니다. 더 나아가 로봇의 제어, 넷플릭스나 유튜브의 컨텐츠 추천시스템, 고층빌딩의 온도관리 자동화시스템 등 수많은 분야에서 널리 활용받고 있습니다.

Boston Dynamics의 4족보행로봇. 보행 알고리즘에 강화학습이 활용되었으며, 산업용으로 널리 쓰이고 있다.

Key Concepts and Terminology

강화학습의 기본 개념은 Markov decision process(MDP)에서 출발합니다. MDP는 state transition과정에 Markov property를 따르는 process를 지칭합니다. MDP역시 하나의 큰 학문이고, 그 넓고 방대한 개념에 대해선 하나하나 설명하지 않겠으나, 본 포스트에선 강화학습을 이해하는데 있어 꼭 필요한 용어들만 모아서 짚고 넘어가보도록 하겠습니다.

States and Observations

MDP는 행동의 주체 agent와 그에 영향을 주는 주변 환경 environment와의 상호작용을 통해 이루어집니다. 매 time step tt마다 이루어지는 둘의 상호작용에 따라, agent는 행동을 의미하는 action ata_t를 수행합니다.

Action이 수행된 뒤, agent는 environment에게서 현재 본인의 상태를 의미하는 state sts_t와 수행된 action이 얼마나 좋았는지를 나타낸 척도 reward rtr_t를 받게 됩니다. 전체 시간구간동안 누적된 reward의 합을 return이라 부르며, agent의 학습 목표는 전체 MDP과정에서 획득한 return을 최대화시키는 것입니다. 그리고 이렇게 시간에 따라 결정되는 의사결정을 sequential decision making이라 합니다.

Agent가 state를 파악하는 과정을 observation이라 합니다. 시각적인 정보값의 경우 observation은 각 pixel의 RGB행렬이 되고, robot manipulator의 움직임제어의 경우 각속도나 각가속도 등이 observation이 되겠습니다. 전체 정보를 완벽하게 수집할 수 있다면 fully observed라 하며, 부분적으로 수집한 있다면 partially observed라 합니다.

Action Spaces

수행될 수 있는 action의 집합을 action space라고 합니다. 미로찾기나 게임처럼 action의 가짓수가 유한한 환경은 discrete action space를 가집니다. 예를 들어 슈퍼마리오 게임의 경우 오른쪽으로 걷기, 왼쪽으로 걷기, 오른쪽으로 뛰기, 왼쪽으로 뛰기, 오른쪽으로 점프, 왼쪽으로 점프 정도의 6가지의 action이 존재하겠네요. Robot제어의 모터 각도처럼 action의 가짓수가 연속적으로 무한하다면, continuous action space를 가진다고 표현합니다. 이 때 action들은 real-valued vector가 되겠습니다.

Policies

Policy는 agent가 현 time step tt에서 action을 고르는 규칙 혹은 기준이라 보면 되겠습니다. 현명한 policy를 갖고 있는 agent가 똑똑한 agent라고 할 수 있겠죠. sts_t가 주어졌을 때, 무조건 하나의 정해진 ata_t만을 선택하는 deterministic policy의 경우 아래와 같이 함수꼴로 나타낼 수 있습니다.

at=μ(st)a_t=\mu(s_t)

반면, 확률에 따라 어떤 action을 선택할지 불분명한 stochastic policy의 경우 아래와 같이 확률식으로 표현합니다.

atπ(st)a_t\sim\pi(\cdot| s_t)

Deep RL에서 stochastic policy를 학습할 때 제일 중요한 것은 아래의 두 가지입니다. 1. Sampling: Agent가 현재의 policy로부터 어떤 action을 취할 지 선택(추출)하는 과정입니다. 2. Log-likelihood: Sampling된 action으로부터 log-likelihood를 계산하기

Stochastic policy의 경우, action space가 discrete일 때는 대개 categorical distribution을 통해 표현되며, continuous일 때는 diagonal Gaussian distribution을 통해 표현합니다. 간단하게 짚고 넘어가보겠습니다.

Categorical policy: 각 action은 agent에 의해 선택될 확률을 갖습니다. 여기서 action을 선택한다는 것은 마치 discrete action들 중 단 하나의 action을 분류하는 classifier의 행동과 같습니다. 이를 multilayer perceptron으로 나타낸다면, input layer의 dimension은 observation과 같을 것이며 convolutional이나 densely-connected와 같은 다양한 종류의 hidden layer를 사용할 수 있습니다. Output layer는 discrete action의 개수와 같은 dimension을 갖게될 것이며, 각각 해당 action을 선택할 확률값을 가져야 하므로 softmax 함수를 사용해야 할 것입니다. 1. Sampling: PyTorch나 Tensorflow같은 framework의 built-in tool들을 이용해 위 과정을 구현할 수 있습니다. 2. Log-likelihood: Output layer가 담고 있는 각 action에의 확률을 파라미터 θ\theta를 이용해 Pθ(s)P_\theta(s)로 나타낼 때, log-likelihood는 logπθ(as)=log[Pθ(s)]a\log \pi_\theta(a|s)=\log[P_\theta(s)]_a의 vector꼴로 나타낼 수 있습니다.

Diagonal Gaussian policy: 특정 state에서 선택할 수 있는 action의 분포가 연속적인 kk-variate Gaussian distribution을 따르므로, mean action μθ(s)Rk\mu_\theta(s)\in\mathbb{R}^k와 standard deviaton σθ(s)Rk\sigma_\theta(s)\in\mathbb{R}^k의 두 가지 파라미터로 구성됩니다. Mean action μθ(s)\mu_\theta(s)은 input으로 observation을 사용하는 neural network로 설계할 수 있습니다. Standard deviaton σθ(s)\sigma_\theta(s)은 input으로 observation을 사용하며, output으로 logσθ(s)\log\sigma_\theta(s)를 사용하는 neural network로 설계할 수 있습니다. 굳이 log값을 사용하는 이유는, 값의 범위를 (,)(-\infty,\infty)로 설정하여, 값의 제약을 없애기 위함입니다. log값을 사용하지 않고 σθ(s)\sigma_\theta(s)를 그대로 사용한다면 값의 범위는 [0,)[0,\infty)가 될테니까요. 또한 standard deviation이 state에 의존하지 않도록 logσ\log\sigma로 사용할 수 있습니다. 1. Sampling: a=μθ(s)+σθ(s)za=\mu_\theta(s)+\sigma_\theta(s)\odot z로 action을 sample해낼 수 있습니다. 이 때 noise zN(0,I)z\sim\mathcal{N}(0,I)는 spherical Gaussian을 따르고, \odot은 두 vector 사이의 element-wise product를 의미합니다. Noise는 torch.normal, tf.random_normal와 같은 built-in 함수들로 생성할 수 있습니다. 혹은 torch.distributions.Normal이나 tf.distributions.Normal를 이용해 distribution objects를 만들어 sampling할 수도 있습니다. 2. Log-likelihood: kk-dimensional action aa의 log-likelihood는 아래의 식으로 계산할 수 있습니다.

logπθ(as)=12(i=1k((aiμi)2σi2+2logσi)+klog2π)\log\pi_\theta(a|s)=-\frac{1}{2}\left( \sum_{i=1}^{k} \left( \frac{(a_i-\mu_i)^2}{\sigma_i^2} + 2\log\sigma_i \right)+k\log2\pi \right)

Trajectories

Trajectory τ\tau는 state와 action를 순서대로 나열한 시퀀스를 의미합니다.

τ=(s0,a0,s1,a1,)\tau=(s_0,a_0,s_1,a_1,\ldots)

첫 번째 state는 start-state distribution을 통해 random하게 sample됩니다.

s0ρ0()s_0\sim\rho_0(\cdot)

t+1t+1번째의 state는 tt번째의 state와 action에 의해 결정되며, 이는 environment에 영향받는 관계입니다. 아래와 같이 deterministic할 수도 있고,

st+1=f(st,at)s_{t+1}=f(s_t,a_t)

아래와 같이 stochastic할 수도 있습니다. 이 때 ata_t는 agent의 policy에 의해 결정된다는 점을 잊지 마세요.

st+1P(st,at)s_{t+1}\sim P(\cdot|s_t,a_t)

이때 P(st+1st,at)P(s_{t+1}|s_t,a_t)를 state transition probability라 일컫습니다.

남은 개념들은 다음 포스트에서 이어가도록 하겠습니다.

Reference

[1] R. S. Sutton, A. G. Barto, et al., Introduction to reinforcement learning, vol. 135. MIT press Cambridge, 1998.

[2] OpenAI. Spinning-Up, [Online]. Available: https://spinningup.openai.com/