
Python으로 ○× 게임 AI를 처음부터 만들기 그 237: 강화학습 (RL)의 개요와 용어 설명 및 gui_play 수정
요약
Python을 사용하여 ○× 게임 AI를 만드는 시리즈 중 강화학습(RL)의 개념과 용어를 설명하는 튜토리얼입니다. 머신러닝의 정의와 지도 학습, 비지도 학습, 강화학습의 차이점을 인간의 학습 방식과 비교하여 쉽게 풀어냅니다.
핵심 포인트
- 강화학습(RL)의 기본 개념 및 주요 용어 정리
- 머신러닝과 인간 학습 방식의 유사성 설명
- 지도 학습, 비지도 학습, 강화학습의 분류 및 특징 비교
- Python 3.13 및 numpy 2.3.5 환경 기반 구현
본 기사의 프로그램은 Python 버전 3.13에서 실행하고 있습니다. 또한, numpy 버전은 2.3.5입니다.
| 링크 | 설명 |
|---|---|
| marubatsu.py | Marubatsu, Marubatsu_GUI 클래스 정의 |
| ... | AI 목록과 지금까지 작성한 데이터 파일에 대해서는 아래 기사를 참조해 주세요. |
이전 기사에서는 강화학습 (RL)을 "프로그램이 주변 환경을 관찰함으로써 어떻게 행동해야 하는지를 학습하는 알고리즘"과 같이 설명하였고, 강화학습 (RL)의 구체적인 예시로 원시 몬테카를로법 (Primitive Monte Carlo method)에 대해 설명했습니다.
지난 기사에서 검증한 것처럼, 원시 몬테카를로법에는 큰 결점이 있기 때문에 그리 강력한 AI를 만들 수 없습니다. 더 강력한 AI를 만들기 위한 강화학습 (RL) 기법에 대해 설명하기 위해서는 강화학습 (RL) 개념의 이해와 용어 지식이 필요하므로, 이번 기사에서는 그것들에 대해 설명하겠습니다. 또한, 구체적인 강화학습 (RL) 알고리즘에 대해서는 다음 기사 이후에서 설명하겠습니다.
또한, 위의 설명 후에 gui_play에서 ai_pmc를 선택할 수 있도록 수정합니다.
Weblio 사전(디지털 대사전)에서는 학습을 다음과 같이 설명하고 있습니다1.
"인간을 포함하여 동물이, 출생 후 경험을 통해 지식이나 환경에 적응하는 태도·행동 등을 익혀 나가는 것"
위의 설명에서는 주어가 "인간이나 동물"로 되어 있지만, 머신러닝 (Machine Learning)의 정의는 이 주어를 "컴퓨터의 알고리즘이나 프로그램"으로 대체한 것과 거의 같습니다. 예를 들어 Wikipedia의 머신러닝 (Machine Learning) 항목에서는 머신러닝 (Machine Learning)에 대해 다음과 같이 설명하고 있으며, 위와 아래 모두 "경험"에 의해 "자기 자신을 개선한다"는 취지의 설명이 되고 있습니다.
"머신러닝 (Machine Learning)이란, 경험으로부터의 학습을 통해 자동으로 개선되는 컴퓨터 알고리즘 혹은 그 연구 영역으로, 인공지능 (AI)의 일종으로 간주된다"
이로부터 알 수 있듯이, 머신러닝 (Machine Learning)에서 수행하는 일은 인간이 수행하는 학습과 유사한 점이 많습니다. 그래서 아래의 설명에서는 인간의 학습과 대비시키면서 머신러닝 (Machine Learning)에 대해 설명하도록 하겠습니다.
인간이나 동물이 수행하는 학습에는 다양한 종류가 있습니다. 예를 들어 학교 공부처럼 교과서나 선생님의 수업 등을 통해 타인으로부터 주어진 지식을 배우는 방법과, 공략법을 누구에게도 배우지 않고 자신의 힘만으로 게임을 공략하는 방법은 학습 방식이 다릅니다. 그 외에도 스스로 목표를 세워 수행하는 자발적인 학습과, 일상생활의 다양한 사건의 체험으로부터 배우는 것과 같은 자발적이지 않은 학습도 학습 방식이 다릅니다.
마찬가지로 머신러닝 (Machine Learning)에도 몇 가지 종류가 있으며, 크게 "지도 학습 (Supervised Learning)", "비지도 학습 (Unsupervised Learning)", "강화학습 (Reinforcement Learning)"의 3가지 종류로 분류되며, 다루는 학습의 테마나 기법이 크게 다르기 때문에 각각에 대해 설명하겠습니다. 또한, 본 기사가 다루는 것은 "강화학습 (Reinforcement Learning)"이므로, 그 외의 것에 대해서는 간단한 설명에 그칩니다. 관심이 있는 분은 각자 조사해 보시기 바랍니다.
지도 학습 (Supervised Learning)이란, 특정 테마에 대해 타인인 교사로부터 주어진 "교사 데이터 (Teacher Data)"라고 불리는 데이터를 학습함으로써, 그 테마에 관한 미지의 문제에 대한 해답을 추론할 수 있도록 하는 학습입니다. 교사 데이터 (Teacher Data)는 현실 세계로 치면 연습 문제와 그 해답 같은 것으로, 현실 세계에서는 그 테마에 정통한 교사가 그러한 데이터를 작성하여 학생에게 주기 때문에 이 분류의 머신러닝 (Machine Learning)을 지도 학습 (Supervised Learning)이라고 부릅니다.
지도 학습 (Supervised Learning)은 학습에 사용할 교사 데이터 (Teacher Data)를 준비할 필요가 있습니다. 역으로 말하면 그러한 데이터를 준비할 수 없는 경우에는 지도 학습 (Supervised Learning)을 수행할 수 없습니다.
또한, 교사라는 용어가 사용되고 있기 때문에 학교 수업처럼 문제 풀이 방법을 배우는 학습을 상상하는 사람도 있을지 모르지만, 일반적인 지도 학습 (Supervised Learning)에서는 연습 문제와 그 해답만이 기재된 교사 데이터 (Teacher Data)가 주어질 뿐, 문제 풀이 방법은 주어지지 않습니다. 예를 들어 "직사각형의 넓이 계산"이라는 테마의 경우, 초등학교 수업에서는 직사각형의 넓이를 어떻게 계산하는지에 대한 설명이 이루어지고, 그 설명을 바탕으로 "밑변 × 높이"라는 직사각형의 넓이 공식이 가르쳐집니다. 또한, 그 공식을 사용하면 밑변과 높이가 주어졌을 때 어떤 직사각형의 넓이라도 100% 올바르게 계산할 수 있습니다.
한편, 지도 학습 (Supervised Learning)으로 「직사각형의 넓이 계산」을 학습하는 경우에는, 다양한 밑변과 높이가 기재된 직사각형 계산 문제와 각각의 문제에 대한 정답이 기재된 교사 데이터 (Teacher Data)만이 주어집니다. 이때 어떻게 이 문제를 푸는지에 대한 설명뿐만 아니라, 「직사각형」, 「밑변」, 「높이」, 「넓이」가 무엇인지에 대한 설명조차 이루어지지 않을 수도 있습니다. 지도 학습 (Supervised Learning)에서는 주어진 교사 데이터로부터 스스로의 힘만으로 「밑변과 높이」라는 문제와 「직사각형의 넓이」라는 해답 사이의 관계를 발견하는 학습을 수행합니다2.
지도 학습 (Supervised Learning)의 목적은 교사 데이터를 학습함으로써, 그 테마에 관한 (교사 데이터에는 존재하지 않는) 미지의 문제를 가능한 한 정확하게 풀 수 있도록 하는 것입니다. 「직사각형의 넓이」에 대한 지도 학습 (Supervised Learning)의 경우, 학습을 수행한 결과 임의의 「밑변」과 「높이」를 가진 직사각형의 넓이를 높은 정밀도로 답할 수 있다면 학습이 성공한 것이 됩니다. 참고로, 여기서 100%가 아니라 「높은 정밀도로」라고 표현한 이유는, 일반적으로 머신러닝 (Machine Learning)에 의한 학습은 확률적인 예측·추론을 수행하기 때문에 100%의 정밀도로 추측하는 것이 어려운 경우가 많기 때문입니다.
지도 학습 (Supervised Learning)이 다루는 테마로는, 주어진 데이터로부터 어떠한 데이터를 예측하는 「회귀 (Regression)」와, 주어진 데이터가 어떤 분류에 속하는지를 예측하는 「분류 (Classification)」 등이 있습니다.
위에서 언급한 「직사각형의 넓이」 학습의 경우는 「밑변」과 「높이」로부터 「넓이」를 추측하므로 「회귀 (Regression)」로 분류됩니다. 다른 회귀 (Regression)의 예로는 다음과 같은 것들이 있습니다.
- 「일기예보도와 기온 등의 기상 정보」를 모은 교사 데이터를 학습함으로써, 일기예보도로부터 내일의 기온이나 강수량을 예측한다
- 「기온과 아이스크림 매출」을 모은 교사 데이터를 학습함으로써, 일기예보로부터 얻은 내일의 기온 데이터를 바탕으로 내일의 아이스크림 매출을 예측한다
지도 학습 (Supervised Learning)에 의한 분류의 구체적인 예로 이미지 분류를 들 수 있습니다. 예를 들어 「0 ~ 9까지의 숫자가 적힌 이미지」와 「그 이미지에 어떤 숫자가 적혀 있는지」라는 교사 데이터를 학습함으로써, 임의의 숫자가 적힌 이미지에 어떤 숫자가 적혀 있는지를 올바르게 추측할 수 있도록 하는 것이 있습니다. 이 「MNIST (엠니스트)」라고 불리는 교사 데이터는 머신러닝 (Machine Learning) 입문용 교재로 공개되어 있으며, 다양한 서적이나 웹페이지에서 다루어지고 있으므로 관심이 있는 분은 찾아보시면 좋을 것입니다. 그 외에도 이미지 속에 찍혀 있는 동물의 종류 추측, 일기예보도로부터의 날씨 추측, CT 이미지로부터의 질병 유무 추측 등이 분류의 예로 들 수 있을 것입니다. 이미지뿐만 아니라 어떤 말을 하고 있는지를 식별한다는 음성 분류도 머신러닝 (Machine Learning)에 의한 분류의 한 예입니다.
참고로 아래에 Wikipedia의 지도 학습 항목 링크를 제시합니다.
비지도 학습 (Unsupervised Learning)은 정답이 포함된 교사 데이터와 같은 학습용 데이터를 사용하지 않고, 정답이 포함되지 않은 데이터만을 통해 학습을 수행함으로써 그 데이터의 특성을 추측하는 것입니다.
비지도 학습 (Unsupervised Learning)이 다루는 테마 중 하나로 주어진 데이터를 몇 개의 그룹으로 나누는 「클러스터링 (Clustering)」이 있습니다. 예를 들어 곤충 채집으로 얻은 곤충에 대해, 도감 등의 외부 정보를 일절 사용하지 않고 얻은 곤충만을 관찰함으로써 그 특징을 학습하여, 예를 들어 「다리 개수」, 「크기」, 「색상」 등의 공통점을 찾아내어 그룹 분류를 수행하는 방식입니다.
참고로 아래에 Wikipedia의 비지도 학습 항목 링크를 제시합니다.
강화학습 (Reinforcement Learning)은 한마디로 말하면 「경험으로부터 배우는」 학습이며, 대략 다음과 같은 순서로 학습을 수행합니다. 지도 학습 (Supervised Learning)이나 비지도 학습 (Unsupervised Learning)은 모두 「외부에서 주어진 데이터」에 대해 학습을 수행하지만, 강화학습 (Reinforcement Learning)은 아래의 순서 2와 같이 「자신이 행동을 일으킴으로써 얻은 경험 (데이터)」을 사용하여 학습을 수행한다는 점이 다릅니다. 즉, 학습의 대상이 되는 데이터를 타인으로부터 수동적으로 얻느냐, 스스로 능동적으로 얻느냐의 차이가 있습니다.
- 어떠한 목표를 세운다
- 목표를 달성하기 위한 행동을 취한다 (행동)
- 행동에 의해 일어난 일을 기록한다 (경험)
- 기록한 데이터로부터 행동이 결과에 미친 영향을 분석하고, 목표를 더 잘 달성하는 결과가 되도록 하는 행동 개선책을 검토한다 (학습)
- 충분한 학습이 이루어질 때까지 순서 2 ~ 4를 반복한다
위의 과정은 「행동을 수행한다」 → 「경험을 얻는다」 → 「행동 방침을 개선한다」를 반복함으로써 최적의 행동을 선택할 수 있도록 하는 학습으로 볼 수 있는데, 이는 인간이 일상적으로 수행하는 「시행착오 (Trial and Error)」에 의한 학습과 거의 같습니다. 참고로 Weblio 사전 (디지털 대사전)의 「시행착오」 설명과 링크를 아래에 제시합니다.
「여러 가지 방법을 반복해서 시도하며 실패를 거듭하면서 해결 방법을 추구하는 것」
위의 절차에서는 처음에 「어떠한 목표를 세운다」라고 설명했지만, 인간은 목표를 세우지 않고도 일상생활 속에서 일어나는 사건에 대해 항상 어떠한 학습을 수행하고 있습니다. 예를 들어 새끼손가락을 벽 모서리에 부딪혔을 경우에는, 그때 얻은 '아프다'라는 경험으로부터 벽 모서리 근처를 걷지 않으려 하는 학습이 이루어집니다. 이는 인간의 뇌에도 「아픈 경험을 피하는 것」을 목표로 하는 강화학습 (RL)과 매우 흡사한 메커니즘이 본능으로서 갖춰져 있다고 생각할 수 있습니다.
또한, 컴퓨터가 수행하는 강화학습 (RL)은 그 성질상 반드시 어떠한 목표를 설정해야 합니다.
인간이 수행하는 강화학습 (RL)에 상당하는 학습과, 컴퓨터가 수행하는 강화학습 (RL)을 몇 가지 예를 들어 비교하며 설명하겠습니다.
예를 들어, 목표를 「A 지점에서 B 지점까지 도보로 이동하는 최단 경로를 찾는다」라고 설정한 경우에는 다음과 같은 학습을 수행합니다. 여기서 말하는 최단 경로는 거리가 아니라, 소요 시간이 가장 짧은 경로3을 의미하는 것으로 합니다. 또한, 사전에 해당 지역의 정보를 알지 못하며, 지도나 경로 검색 앱 등 다른 도움을 빌리지 않고 자신의 힘만으로 학습을 수행한다고 가정합니다4. 사전 지식이 없다고 가정하는 조건은 이후에 소개할 다른 예시에서도 마찬가지입니다.
- 목표를 「A 지점에서 B 지점까지 도보로 이동하는 최단 경로를 찾는다」로 설정한다
- A 지점에서 B 지점까지 실제로 걷는다 (행동)
- 걸은 경로의 정보와 소요 시간을 기록한다 (경험)
- 걸은 경로와 소요 시간을 검증하여, 더 좋은 경로가 없는지 검토한다 (학습)
- 최단이라고 생각되는 경로가 발견될 때까지 2 ~ 4의 절차를 반복한다
이후에는 위의 예를 「최단 경로 학습」이라고 표기하겠습니다.
위의 절차로 학습을 수행하면, 처음에는 모르는 지역이므로 소요 시간이 긴 경로를 걷게 될 가능성이 높지만, 몇 번이고 위의 절차 2 ~ 4를 반복함으로써 어느 길로 가야 효율적인지를 학습하게 되므로 소요 시간이 점차 짧아질 것입니다. 다만, 진정한 최단 경로는 모든 경로를 시도해 보지 않으면 찾을 수 없지만, 경로의 수가 매우 많은 경우 모든 경로를 샅샅이 시도하는 것은 현실적으로 어렵기 때문에, 절차 2 ~ 4를 반복한다고 해서 반드시 진정한 최단 경로를 찾을 수 있다고는 할 수 없습니다. 이처럼 강화학습 (RL)은 운이 좋으면 최선인 최적해 (Optimal Solution)를 얻도록 학습할 수 있지만, 많은 경우에는 최적해에 가까운 근사해 (Approximate Solution)를 얻는 기법입니다.
또한, 같은 장소라 하더라도 목표 설정을 바꾸면 학습 결과가 달라집니다. 예를 들어 목표를 「최단 거리」로 설정했을 경우에는 다른 학습이 이루어질 것입니다.
목표를 「점수가 있는 액션 게임에서 고득점을 얻는다」라고 설정한 경우에는 다음과 같은 학습을 수행합니다. 이후에는 이 예를 「고득점 학습」이라고 표기하겠습니다.
- 목표를 「게임에서 고득점을 얻는다」로 설정한다
- 게임 오버가 될 때까지 게임을 플레이한다 (행동)
- 게임을 플레이하는 모습을 녹화한다 (경험)
- 게임 녹화 영상을 검증하여, 더 높은 점수로 이어질 행동이 없는지 검토한다 (학습)
- 얻은 점수에 만족할 때까지 2 ~ 4의 절차를 반복한다
위의 절차로 학습을 수행함으로써, 적을 쓰러뜨리거나 아이템을 줍는 등의 행동이 고득점으로 이어지는 패턴으로 축적된 결과, 게임에서 고득점을 얻을 수 있는 행동이 학습되어 점차 고득점을 얻을 수 있게 됩니다.
같은 게임이라 하더라도 목표 설정을 바꾸면 학습 결과가 달라집니다. 예를 들어 위의 게임에 대해 목표를 「가능한 한 오랫동안 게임을 플레이한다」라고 설정했을 경우에는, 고득점은 얻지 못하지만 게임 오버가 될 때까지의 시간이 길어지는 방향으로 학습이 이루어질 것입니다.
목표를 「○× 게임에서 좋은 결과를 얻는다」라고 설정한 경우에는 다음과 같은 학습을 수행합니다. 이 학습을 인간이 아닌 컴퓨터 프로그램이 수행하는 경우에는 강화학습 (RL) 그 자체가 됩니다. 대국을 할 수 있다면 경험을 얻을 수 있으므로, 대국의 상대는 인간과 AI 중 어느 쪽이라도 상관없습니다. 이후에는 이 예를 「○× 게임 학습」이라고 표기하겠습니다.
- 목표를 「○× 게임에서 좋은 결과를 얻는다」로 설정한다
- 대국을 1회 수행한다 (행동)
- 기보 (수행한 착수의 목록)와 결과를 기록한다 (경험)
- 기보와 결과를 검증하여, 더 좋은 결과로 이어질 행동이 없는지 검토한다 (학습)
- 얻은 결과에 만족할 때까지 2 ~ 4의 절차를 반복한다
상대와 대전을 수행하는 게임을 학습할 경우에는 대전 상대의 강도에 따라 학습 결과가 달라지게 됩니다. 예를 들어, 랜덤하게 착수를 수행하는 ai2s와 대전했을 때 얻을 수 있는 경험과, 약한 수준의 AI인 ai14s...
와 대전했을 때 얻을 수 있는 경험은 크게 다릅니다. 일반적으로 더 강한 상대와 대국을 진행하는 것이 더 좋은 경험을 얻을 수 있어 좋은 학습 결과로 이어집니다. 이는 현실 세계에서 자신보다 훨씬 약한 상대와 연습 경기를 해도 좋은 경험을 얻을 수 없기 때문에 거의 강해질 수 없는 것과 매우 비슷합니다.
현실 세계에서는 너무 강한 상대와 대전하면 상대가 수행하는 행동의 의미를 전혀 알 수 없기 때문에 좋은 경험을 얻지 못하는 경우가 자주 발생합니다. 따라서 실제로는 실력이 균형을 이루고 있거나, 자신보다 조금 더 실력이 있는 상대와의 대전이 좋은 경험과 학습으로 이어지는 경우가 많을 것입니다.
강화학습 (RL)의 일종인 원시 몬테카를로법 (Primitive Monte Carlo method)은 랜덤하게 착수를 계속했을 경우의 대전 결과를 경험으로서 학습하기 때문에, ai2s와 대전했을 때의 경험을 바탕으로 학습을 진행합니다. 따라서 ai2s에 대해서는 가장 좋은 결과를 얻을 수 있는 학습이 이루어지지만, ai14s와 같이 ai2s보다 훨씬 강한 상대와 대전하면 좋은 결과를 얻을 수 없게 됩니다.
Wikipedia에서는 강화학습에 대해 다음과 같은 설명을 하고 있습니다.
"강화학습은 어떤 환경 (environment) 내에서의 지적 에이전트 (agent)가 현재의 상태 (state)를 관측 (observation)하고, 얻을 수 있는 수익 (reward, 누적 보상)을 최대화하기 위해 어떤 행동 (action)을 취해야 하는지를 결정하는 머신러닝 (machine learning)의 한 분야이다."
위의 설명에서는 「환경」, 「에이전트」, 「상태」, 「관측」, 「수익」, 「누적 보상」과 같은 전문 용어가 사용되고 있어, 이러한 용어를 처음 접하는 분들은 의미를 이해하기 어려울 수도 있습니다. 하지만 강화학습을 올바르게 이해하기 위해서는 이러한 전문 용어들을 이해하는 것이 중요합니다. 이에 앞서 언급한 세 가지 구체적인 예시(최단 경로, 고득점, ○× 게임)를 바탕으로 각각의 전문 용어가 무엇을 의미하는지 하나씩 알기 쉽게 해설해 나가겠습니다.
에이전트 (agent)는 강화학습에서 학습을 수행하는 프로그램을 나타내며, 환경 (environment)은 에이전트가 다양한 행동을 시행착오하며 경험을 얻는 대상을 나타냅니다. 인간의 학습에 대입하면, 에이전트는 학습을 수행하는 인간 그 자체를, 환경은 인간이 학습을 수행하는 현실 세계의 대상에 해당합니다. 아래는 앞서 든 예시의 환경을 나타내는 표입니다.
| 예 | 환경 |
|---|---|
| 최단 경로 학습 | A 지점에서 B 지점까지를 잇는 모든 경로 |
| ... |
에이전트는 앞서 소개한 「행동 → 경험 → 학습」의 사이클을 자동으로 반복하는 처리를 수행하는 컴퓨터 프로그램입니다.
컴퓨터 프로그램인 에이전트가 현실 세계 그 자체에 대해 직접 행동을 일으키는 것은 어려운 경우가 많으므로, 강화학습에서의 환경 또한 컴퓨터 프로그램에 의해 표현됩니다. 예를 들어 「최단 경로 학습」을 강화학습으로 수행하는 경우의 환경은 다음과 같은 기능을 가진 프로그램으로, 현실 세계의 환경을 시뮬레이션 (simulation, 모방하여 재현)한 프로그램이라고 생각할 수 있습니다.
- A 지점에서 B 지점까지의 모든 경로가 어떻게 구성되어 있는지에 대한 정보를 관리한다
- 에이전트가 현재 어디에 있는지를 관리하고, 그 위치를 에이전트에게 보고한다
- 에이전트의 행동에 따라 이동 시간을 계산하여 에이전트에게 보고한다
「고득점 학습」의 경우에는 대상이 컴퓨터 게임이므로 환경은 그 컴퓨터 게임 프로그램 자체입니다.
「○× 게임 학습」을 강화학습으로 수행하는 경우의 환경은 ○× 게임을 관리하는 프로그램과 대전 상대인 AI의 프로그램이며, 구체적으로는 본 기사에서 구현한 Marubatsu 클래스와 ai2s, ai14s 등의 AI 프로그램을 환경으로 간주할 수 있습니다.
머신러닝에서는 에이전트가 환경에 대해 어떤 행동을 할지 선언하고, 환경은 그 행동의 결과를 에이전트에게 보고하는, 에이전트와 환경의 상호작용 (interaction)이 반복됩니다. 일반적으로 환경 측의 프로그램에는 에이전트가 수행하는 행동을 처리하여 그 결과를 반환값 (return value)으로 보고하는 함수 (method)나, 결과를 기록한 변수 (attribute)를 준비합니다.
「○× 게임 학습」의 예시의 경우, 에이전트 프로그램이 선택한 착수라는 행동을 Marubatsu 클래스의 move 메서드를 호출함으로써 환경에 보고하고 그 결과를 계산합니다. 그 결과, 게임판을 나타내는 board 속성과 게임의 상태를 나타내는 status 속성의 값이 업데이트되므로, 에이전트가 그 값을 참조함으로써 행동의 결과를 경험으로서 취득하게 됩니다.
환경을 프로그램으로 시뮬레이션하는 것의 장점 중 하나는, 현실 세계에서 여러 번 수행할 수 없는 일을 반복해서 수행할 수 있다는 점입니다. 예를 들어 건물을 폭파하는 일을 여러 번 반복하는 것은 어렵지만, 프로그램 시뮬레이션이라면 건물을 폭파하는 상황을 몇 번이고 재현할 수 있습니다.
그 외에도 자동차 운전이나 수술 연습 등, 실패했을 경우 교통사고 등으로 사람이 사망하는 것과 같이 돌이킬 수 없는 상황이라 하더라도 시뮬레이션이라면 안심하고 여러 번 연습할 수 있다는 점이나, 현실 세계에서는 오랜 시간이 걸리는 일을 시뮬레이션에서는 짧은 시간 안에 수행할 수 있다는 점 등이 있습니다.
행동 (action)이란 에이전트가 환경에 대해 수행하는 거동을 나타냅니다. 지금까지의 설명에서는 에이전트의 행동을 "목표를 달성하기 위한 행동을 취한다"와 같이 하나로 묶어서 표기했지만, 많은 경우 그 행동은 여러 개의 작은 거동들의 집합으로 구성됩니다. 강화학습 (RL)에서는 그러한 작은 개별 거동을 "행동"이라고 부릅니다.
예를 들어 "최단 경로 학습"의 경우에는 "교차로마다 길을 선택한다"라는 행동을 B 지점에 도착할 때까지 반복합니다. "○× 게임 학습"의 경우에는 게임의 승패가 결정될 때까지 "합법적인 수를 선택한다"라는 행동을 반복합니다.
행동은 얼마든지 작게 분할할 수 있는 경우가 있습니다. 예를 들어, "동쪽으로 1m 걷기"라는 행동은 100개의 "동쪽으로 1cm 걷기"라는 행동으로 분할할 수 있습니다. 또한, 걷는 거리를 짧게 함으로써 "동쪽으로 1m 걷기"라는 행동을 얼마든지 더 많은 작은 행동으로 분할할 수 있게 됩니다.
행동을 작게 분할함으로써 수행한 행동을 엄밀하게 기록할 수 있다는 장점을 얻을 수 있지만, 그만큼 기록해야 하는 데이터의 양이 늘어난다는 단점이 발생합니다. 기록하는 데이터의 양이 늘어나면 데이터 분석이 복잡해지고 시간이 걸린다는 단점이 생기기 때문에, "그 이상 분할해도 분석 결과에 큰 영향을 미치지 않는다", "분석에 시간이 너무 오래 걸리지 않는다" 등의 조건을 만족하는 크기로 행동을 분할하는 것이 일반적입니다.
예를 들어 "최단 경로 학습"의 경우에는 "A 지점에서 B 지점까지 걷기"라는 행동을 "도중에 무엇을 보았는지", "피곤해서 걷는 속도를 바꾸었는지", "가게에 들어가 화장실을 빌렸는지" 등의 작은 행동으로 분할하여 기록할 수도 있지만, 그러한 행동들을 기록하더라도 최단 경로 분석에 영향을 미치는 일은 거의 없을 것입니다. 분석에 필요한 정보가 "교차로에서 어느 길을 선택했는가"와 "교차로에서 교차로까지의 소요 시간"임을 고려하면, 행동을 "교차로에서 다음 길을 선택하기"로 한정하는 것이 합리적이라고 할 수 있습니다.
"고득점 학습"의 경우에는 게임 컨트롤러로 수행한 조작을 행동으로 기록하면 된다고 생각할 수도 있지만 그렇지 않습니다. 예를 들어 액션 게임에서는 적이 다가오는 것을 기다리는 경우처럼, 아무것도 하지 않는 것이 고득점으로 이어지는 경우가 있습니다. 따라서 "고득점 학습"의 경우에는 "컨트롤러 조작을 하지 않음"도 하나의 행동이 됩니다. 또한, 액션 게임은 일반적으로 1 프레임 (= 1/60초)마다 컨트롤러 조작을 입력받는 경우가 많으므로, "고득점 학습"에서의 행동은 "프레임별 게임기 컨트롤러 조작"이 됩니다.
"○× 게임 학습"의 경우 행동은 자신의 차례에서의 합법적인 수의 선택이 됩니다.
이와 같이 강화학습에서는 적절한 학습을 수행하기 위해 기록해야 할 "행동"이란 무엇이며, 어느 타이밍에 수행할 것인지에 대해 정의를 내릴 필요가 있습니다.
아래는 각각의 예시에서의 행동과 그 타이밍을 정리한 표입니다.
| 예 | 행동 | 타이밍 |
|---|---|---|
| 최단 경로 학습 | 교차로에서의 길 선택 | 교차로에 도착했을 때 |
| ... |
강화학습에서 목적을 달성하기 위해 수행한 일련의 행동들의 집합을 에피소드 (episode)라고 부릅니다. "최단 경로 학습"의 경우에는 "A 지점에서 B 지점에 도달할 때까지의 행동", "고득점 학습"의 경우에는 "게임을 시작해서 게임 오버가 되거나 제한 시간이 오는 등 게임을 종료할 때까지의 행동", "○× 게임"의 경우에는 "게임 시작부터 종료 시까지 수행한 행동 (착수)\
위의 예에서 알 수 있듯이, 스텝(step)과 스텝 사이의 시간은 일정하지 않을 수도 있습니다. 예를 들어 「최단 경로 학습」의 경우에는 다음 스텝까지의 시간이 교차로에서 교차로까지의 소요 시간이 되므로 일정하지 않습니다. 「○× 게임 학습」의 경우에는 자신과 상대방이 차례를 생각한 시간의 합계가 다음 스텝까지의 시간이 되므로 일정하지 않습니다. 반면 「고득점 학습」의 경우에는 다음 스텝까지의 시간이 항상 1 프레임(frame)이므로 일정합니다.
에이전트(agent)가 행동을 선택하기 위해서는 환경 내에서 에이전트가 현재 처해 있는 상황을 알 필요가 있으며, 강화학습 (RL)에서는 환경의 상황을 「상태 (state)」라고 부릅니다. 아래는 앞서 언급한 각각의 예에서의 상태를 나타내는 표입니다.
| 예 | 상태 |
|---|---|
| 최단 경로 학습 | A 지점에서 B 지점 사이의 현재 위치 (어느 교차로에 있는가) |
| ... | |
| 에이전트는 함수 호출이나 변수 값의 참조 등을 통해 환경으로부터 현재 상태의 정보를 취득하며, 그 정보를 바탕으로 다음에 수행할 행동을 선택합니다. 에이전트가 환경으로부터 상태 정보를 얻는 것은 인간이 환경을 관찰하는 것에 해당하며, 강화학습에서도 이를 관측 (observation)이라고 부릅니다. |
일반적으로 상태는 에이전트의 행동 결과에 따라 변화합니다. 예를 들어 「최단 경로 학습」의 경우에는 행동에 의해 에이전트의 위치가 다음 교차로로 이동하기 때문에 상태가 변화합니다. 「○× 게임 학습」의 경우에는 행동에 의해 착수가 이루어지기 때문에 국면이나 차례의 상태가 변화합니다. 따라서 에이전트가 환경에 대해 행동을 수행하기 위한 함수 호출을 하면, 그 반환값(return value)으로서 변화된 상태의 정보를 얻을 수 있도록 구현되는 것이 일반적입니다6.
보상 (reward)은 에이전트의 행동 결과, 목표에 대해 어느 정도의 성과를 얻었는지를 나타내는 데이터로, 에이전트가 환경에 대해 행동을 수행하기 위한 함수 호출의 반환값 일부로서 변화된 상태와 함께 얻을 수 있도록 구현되는 것이 일반적입니다. 또한, 일반적으로 보상은 수치로 표현되며, 수치가 클수록 얻은 성과가 높음을 나타냅니다.
아래는 에이전트와 환경이 상호작용을 함으로써 행동, 상태, 보상을 주고받는 모습을 나타내는 도식입니다. 강화학습에서는 에피소드(episode)의 각 스텝에서 이 상호작용이 1회씩 이루어집니다.

보상에는 각 스텝의 행동에 대해 직접 얻을 수 있는 즉시 보상 (immediate reward)과, 에피소드의 모든 스텝에서 얻은 보상의 합계를 나타내는 누적 보상 (cumulative reward)이 있습니다.
「최단 경로 학습」의 경우에는 다음 교차로에 도착할 때까지의 소요 시간에 -1을 곱하여 음수 값으로 만든 것이 각 스텝에서의 즉시 보상이 됩니다. 음수로 만드는 이유는 앞서 설명했듯이 강화학습에서는 보상이 클수록 얻은 성과가 높음을 나타내므로, 소요 시간이 짧을수록 즉시 보상의 값이 높아지게 하기 위해서입니다.
「고득점 학습」의 경우에는 각 스텝에서 수행한 행동에 의해 얻은 점수가 즉시 보상이 됩니다. 「○× 게임 학습」의 경우에는 행동에 의해 게임의 승부가 나지 않은 경우의 보상은 0이 되며, 승부가 난 경우에는 승패 결과에 따른 값의 보상을 얻습니다.
누적 보상은 각 스텝에서 얻은 보상의 합계를 나타내며, 「최단 경로 학습」의 경우에는 소요 시간의 합계에 -1을 곱한 값, 「고득점 학습」의 경우에는 얻은 점수, 「○× 게임 학습」의 경우에는 승패 결과를 나타내는 값이 됩니다.
앞서 소개한 아래 Wikipedia의 강화학습 설명에 나와 있듯이, 강화학습의 목적은 「누적 보상이 가장 높아지는 것과 같은 행동을 취할 수 있는」 학습을 하는 것입니다. 또한, 아래 설명에서 「수익 (return)」이라고 기재되어 있듯이, 누적 보상을 즉시 보상과 명확히 구분하고 싶을 때는 누적 보상을 수익 (return)이라고 부릅니다.
"강화학습은 어떤 환경 내에서의 지적 에이전트가 현재의 상태를 관측하고, 얻을 수 있는 수익 (누적 보상)을 최대화하기 위해 어떤 행동을 취해야 하는지를 결정하는 머신러닝 (machine learning)의 한 분야이다."
위에서는 수익과 누적 보상이 동일한 것으로 설명하였으나, 실제 강화학습에서는 장래에 얻을 보상을 할인한 누적 할인 보상 (discount return)을 수익으로 하여 학습을 진행합니다. 누적 할인 보상에 대해서는 다음 이후의 기사에서 소개할 예정입니다.
강화학습의 목적이 즉시 보상을 가장 높게 만드는 행동을 학습하는 것이 아닌 이유에 대해 의문을 갖는 분이 계실지도 모르므로 그 이유를 설명하겠습니다.
즉시 보상은 에피소드 내에서 이루어진 하나의 행동에 의해 얻어지는 보상을 나타내지만, 하나의 행동으로 얻은 보상이 높아졌다고 해서 전체적으로 얻을 수 있는 누적 보상이 높아진다고는 할 수 없기 때문입니다. 구체적인 예로 마라톤의 예를 들어보겠습니다.
마라톤에서 출발 지점에서 갑자기 전력 질주를 하면, 처음 몇 분 동안은 가장 좋은 기록을 얻을 수 있게 됩니다. 이를 강화학습 (RL)의 용어로 표현하면, 첫 번째 스텝 (step)에서 전속력으로 달림으로써 가장 높은 즉시 보상 (immediate reward)을 얻을 수 있는 것에 해당합니다. 하지만 그러한 방식으로 달리면 금방 숨이 차고 지쳐버려서, 거의 확실하게 결승점에 도착했을 때의 기록은 평소 자신의 페이스를 유지하며 달렸을 경우와 비교했을 때 매우 나빠질 것입니다. 이를 강화학습 (RL)의 용어로 표현하면, 누적 보상 (cumulative reward)이 낮아지는 것에 해당합니다. 이로부터 특정 스텝 (step)의 즉시 보상 (immediate reward)을 최대화하는 것이 전체의 누적 보상 (cumulative reward) 최대화로 반드시 이어진다는 보장은 없다는 것을 알 수 있습니다.
위와 같은 성질 때문에, 많은 강화학습 (RL)에서는 에피소드 (episode)의 각 스텝 (step)에 의해 얻어진 경험 (상태 (state)와 즉시 보상 (immediate reward))을 바탕으로 학습을 진행하지 않고, 에피소드 (episode)가 종료된 후에 해당 에피소드에서 얻은 경험 (각 스텝 (step)의 상태 (state)와 즉시 보상 (immediate reward))을 바탕으로 누적 보상 (cumulative reward)이 높아지는 방향의 행동을 학습합니다.
또한, 학습의 효율을 높이기 위해 하나하나의 에피소드 (episode)에서의 경험에 대해 학습을 진행하는 것이 아니라, 여러 에피소드 (episode)에서 얻은 경험을 모아서 학습하기도 합니다.
강화학습 (RL)의 종류에 따라서는 에피소드 (episode)의 종료를 기다리지 않고 스텝 (step)마다 학습을 진행하는 것도 있습니다. 필요하다면 향후의 기사에서 소개하도록 하겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기