이번 졸업 프로젝트에서 강화학습과 관련된 프로젝트를 진행하게 됐다. 그 과정에서 강화학습에 공부한 내용을 기록하고자 한다.
다음은 파이토치와 유니티 ML-Agents로 배우는 강화학습이라는 책을 읽고 공부한 내용을 작성한 것이다.
강화학습이란?
- 강화학습은 지도 학습처럼 정답이 있지도 않고, 비지도 학습처럼 데이터의 특징만을 기반으로 학습하지도 않는다.
- 강화학습은 에이전트가 환경과 상호작용하고, 이 환경에는 보상이라는 기준이 있어서 다양한 시행착오를 겪어가며 보상을 최대화하는 방향으로 학습한다.
- 이에 따라 강화학습은 다양한 시행착오를 통해 학습할 수 있으며 비교적 명확한 보상을 설정할 수 있는 문제 해결에 사용한다.
- 예를 들어, 벽돌 깨기 같은 게임을 강화학습 알고리즘이 푼다면 게임 내에서 다양한 행동들을 취하면서 보상과 패널티를 받은 후 점수를 최대로 얻을 수 있는 행동을 알아내도록 학습한다.
강화학습의 기초 용어
강화학습은 순차적으로 행동들을 선택하면서 보상을 최대화하는 의사 결정 전략인 순차적 결정 문제이다.
이런 순차적 결정 문제를 수학적으로 정의한 것이 마르코프 결정 프로세스(MDP)이다.
MDP는 상태(state), 행동(action), 보상 함수(reward functions), 감가율(discount factor), 상태 변환 확률(state transition probability)로 구성되어 있다.
기초 용어
- 에이전트(agent)
- 에이전트란 강화학습에서 의사결정을 하는 대상이다.
ex) 게임에서 제어의 대상이 되는 게임의 주인공
- 에이전트란 강화학습에서 의사결정을 하는 대상이다.
- 환경(environment)
- 에이전트의 의사 결정을 반영하고 에이전트에게 정보를 주는 역할을 한다.
ex) 게임을할 때 스텝마다 플레이어가 에이전트를 조작하는 대로 게임 화면, 점수, 목숨 정보와 같은 것을 바꿔주는 게임 시스템
- 에이전트의 의사 결정을 반영하고 에이전트에게 정보를 주는 역할을 한다.
- 관측(observation)
- 관측은 환경에서 제공해주는 정보이다. 통상적으로 현재 스텝의 관측은 $O_k$라고 표기한다. 유니티 ML-Agents에서는 관측을 시간적 관측(visual observation)과 벡터 관측(vector observation)으로 구분한다. 쉽게 말해서 시각적 관측은 현재 상태의 정보를 이미지로 표현한 것이고, 벡터 관측은 이미지 형태가 아닌 수치로 표현한 것을 의미한다.
- 상태(state)
- 에이전트는 상태를 기반으로 의사 결정을 한다. 상태는 에이전트가 의사 결정하는 데 사용하기 위해 관측, 행동 등을 가공한 정보이다. 이전 스텝의 관측값들을 저장했다가 이 히스토리를 상태로 넘겨줄 수도 있고, 이전 스텝의 관측값과 이전 스텝의 행동을 합쳐서 줄 수도 있고, 관측 정보 모두를 상태로 에이전트에 넘겨줄 수도 있고, 그 중에 내가 원하는 정보만 골라서 상태로 넘겨줄 수 있다. 일반적으로 현재 스텝의 상태는 $s_t$로 표기한다.
- 행동(action)
- 에이전트가 의사 결정을 통해 취할 수 있는 행동을 의미한다. 일반적으로 현재 상태에서 취하는 행동을 $a_t$로 표기한다. 행동에는 이산적인(discrete) 행동과 연속적인(continuous) 행동이 있다. 이러한 행동은 환경에 따라 정해진다.
- 스텝(step)
- 스텝은 에이전트가 특정 상태에서 한번 행동을 취하여 다음 상태가 되는 경우를 1 스텝이라고 표현한다.
- 에피소드(episode)
- 에피소드는 에이전트가 1 스텝씩 계속 행동을 취해서 게임 한판이 종료되는 경우 1 에피소드라도 표현한다.
- 보상 함수(reward function)
- 에이전트가 특정 상태에서 특정 행동을 했을 때 보상을 받게 되고, 에이전트는 이 보상 정보를 통해 학습을 진행한다.일반적으로 상태 $s$에서 특정 행동 $a$를 했을 때 얻는 보상의 기댓값을 $R_s^a$라고 표기한다. 보상 함수를 수식으로 표현하면 다음과 같다.수식에서 $t$는 현재 스텝을 의미한다. 따라서 $R^a_s$는 현재 상태 $s$에서 행동 $a$를 취해서 얻은 수 있는 보상 $R_{t+1}$의 기댓값을 의미한다.
$$
R_s^a = E[R_{t+1} | S_t = s, A_t = a]
$$
- 정책(policy)
- 정책은 특정 상태에서 취할 수 있는 행동을 선택할 확률 분포를 의미한다. 일반적으로 $\pi$로 표기한다.
감가율과 반환값
강화학습은 시행착오를 겪으면서 보상을 최대화하는 의사 결정 전략을 학습한다. 과연 어떻게 의사 결정 학습을 할 수 있을까? 강화학습은 에피소드가 끝나면 지나왔던 상태에서 했던 행동에 대해 정보를 기록한다. 그리고 이 정보를 이용하여 그다음 에피소드에 의사 결정을 한다. 또 에피소드가 끝나면 이 에피소드를 통해 정보로 기록을 업데이트하는 과정을 반복한다. 이때 $t$에서 받았던 보상 $R_{t+1}$부터 에피소드가 끝날 때까지 받았던 보상들을 더한 것을 정보로 이용한다.
에이전트는 초기 상태에서 어떻게 행동을 취할지 판단할 수 없다. 즉 현재 기록하는 정보로는 어느 경로가 더 효율적인지 알 수 없다. 이를 보완하기 위해 감가율(discount factor)이라는 개념을 도입한다.
감가율은 통상적으로 $\gamma$이라고 표기한다. 0부터 1사이의 값으로 설정하며, 1에 가까울수록 미래의 보상에 많은 가중치를 두는 것을 의미한다.
감가율이 반영된 보상 정보를 기록하기 위해 $t$ 스텝에서 받았던 보상 $R_{t+1}$부터 에피소드가 끝날 때가지 받은 보상에 감가율을 스텝 차이만큼 곱해서 더해준다. 이런 특정 상태에서 앞으로 받을 보상을 다음과 같이 표현할 수 있으며, 이 값을 반환값이라고 한다.
$$
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \ldots + \gamma^{T-t-1} R_{T+1}
$$
반환값을 기록할 때는 종료된 상태부터 처음 상태까지 거꾸로 계산하는 것이 쉽다. 아래 그림을 참고하면 에이전트가 초기 상태에서 왼쪽으로 이동하는 것보다는 위로 이동하는 것의 반환값이 더 높기 때문에 보다 효율적인 경로로 이동할 수 있다.
하지만 에이전트의 첫 에피소드에서 빨간색 루트를 찾고 반환값이 높은 상태로만 이동하게 되면 파란색 루트를 찾을 수 없다. 그래서 가끔은 무작위로 움직여 경로를 탐험해보는 것도 중요하다.
'강화학습' 카테고리의 다른 글
[강화학습] 자동 주차 시뮬레이션 구현을 위한 Unity 환경 설정 (0) | 2024.04.10 |
---|---|
[강화학습] 탐험(exploration)과 이용(exploitation) (0) | 2024.03.31 |