강화학습
고친 사람 github-actions[bot]
강화학습은 프로그램이 직접 해 보면서 행동을 익히게 합니다. 프로그램이 행동을 하면 잘했는지 못했는지를 점수로 돌려받습니다. 프로그램은 점수를 가장 많이 모으는 행동을 스스로 찾아냅니다. 게임을 하는 프로그램이 이렇게 실력을 쌓습니다.
쉽고 빠른 이해
강화학습은 프로그램이 시행착오로 잘 되는 행동을 찾게 합니다. 미로 속 로봇이 이리저리 움직이다 출구에 닿으면 점수를 받습니다. 이것을 수없이 되풀이하면 로봇은 출구로 가는 길을 익힙니다.
이런 방식이 필요한 문제가 있습니다. 바둑 한 판에서 매 수마다 정답을 달아 줄 사람은 없습니다. 이겼는지 졌는지는 판이 끝나야 압니다. 강화학습은 이 마지막 결과만으로도 배웁니다.
- 프로그램이 지금 상황을 봅니다
- 행동을 하나 고릅니다
- 점수와 바뀐 상황을 돌려받습니다. 점수가 높았던 행동은 다음에 더 자주 고릅니다
대가는 연습량입니다. 쓸 만해지기까지 아주 많이 해 봐야 합니다. 점수를 주는 규칙을 잘못 짜면 엉뚱한 행동을 익히기도 합니다.
상세
강아지에게 「앉아」를 가르치는 장면을 떠올려 봅시다. 말로 동작을 설명해 줄 수는 없습니다. 강아지가 우연히 앉았을 때 간식을 줍니다. 몇 번 되풀이하면 강아지는 「앉아」를 들으면 앉습니다.
강화학습(reinforcement learning)은 행동의 결과로 받는 점수, 곧 보상을 보고 더 나은 행동을 익히는 머신러닝 방식입니다. 머신러닝은 판정 규칙을 사람이 적어 넣는 대신 데이터에서 뽑아내는 방식을 말합니다. 미로를 빠져나가는 프로그램을 만든다면 길을 알려 주지 않습니다. 출구에 닿을 때 점수를 주기만 합니다.
보상은 행동 하나가 얼마나 좋았는지를 알려 주는 수입니다. 앞 장면의 간식에 해당합니다. 출구에 닿으면 +10, 벽에 부딪히면 -1 처럼 사람이 규칙을 정해 줍니다. 강화학습은 보상의 합이 가장 커지는 행동을 찾습니다.
이름의 「강화」는 심리학에서 왔습니다. 바라던 결과가 따른 행동은 더 자주 하게 된다는 뜻입니다. 보상을 받은 행동이 점점 자주 골라지는 모습이 이 이름에 담겨 있습니다.
에이전트와 환경
강화학습에는 두 주인공이 나옵니다. 배우는 쪽을 에이전트라고 부릅니다. 에이전트가 행동을 하는 바깥 세계는 환경입니다. 미로 문제라면 로봇이 에이전트이고 미로가 환경입니다.
에이전트와 환경은 세 가지를 주고받습니다. 미로와 벽돌 깨기 게임에 대어 보면 이렇습니다.
| 주고받는 것 | 무엇인가 | 미로 | 벽돌 깨기 게임 |
|---|---|---|---|
| 상태 | 환경이 지금 어떤지 | 로봇이 서 있는 칸 | 지금 화면 한 장 |
| 행동 | 에이전트가 고를 수 있는 움직임 | 위·아래·왼쪽·오른쪽 | 받침대를 왼쪽·오른쪽으로 |
| 보상 | 행동이 얼마나 좋았는지 나타내는 수 | 출구 +10 · 벽 -1 | 깬 벽돌마다 점수 |
표의 첫 줄인 상태는 에이전트가 행동을 고르기 전에 보는 정보입니다. 같은 행동이라도 상태에 따라 결과가 갈립니다. 어느 칸에서는 오른쪽이 출구로 가는 길입니다. 다른 칸에서는 오른쪽이 벽입니다.
두 주인공은 한 걸음씩 번갈아 움직입니다. 환경이 상태를 보여 주면 에이전트가 행동을 고릅니다. 환경은 그 행동에 맞춰 보상과 다음 상태를 돌려줍니다. 이 주고받기가 출구에 닿거나 게임이 끝날 때까지 되풀이됩니다.
sequenceDiagram
participant 에이전트
participant 환경
환경->>에이전트: 지금 상태
loop 끝날 때까지
에이전트->>환경: 행동
환경->>에이전트: 보상과 다음 상태
end
시작부터 끝까지의 한 바퀴를 에피소드라고 부릅니다. 미로를 한 번 빠져나가는 것, 게임 한 판이 각각 에피소드 하나입니다. 에이전트는 에피소드를 수없이 되풀이하며 배웁니다. 이 되풀이가 강화학습의 훈련입니다.
이 주고받기를 수식으로 적어 다루는 틀이 마르코프 결정 과정입니다. 이 틀은 다음 상태와 보상이 지금 상태와 행동만으로 정해진다고 봅니다. 미로라면 로봇이 어느 길로 이 칸에 왔는지는 상관없습니다. 지금 칸과 고른 방향만 알면 다음 칸이 정해지니, 에이전트도 행동을 고를 때 지금 상태만 보면 됩니다.
지도학습·비지도학습과 가르는 기준
강화학습은 흔히 지도학습·비지도학습과 나란히 놓입니다. 지도학습은 예시마다 사람이 정답을 달아 두고 그 정답으로 배웁니다. 이 정답이 레이블입니다. 스팸 메일 판별이라면 메일마다 붙은 「스팸」·「정상」 표시가 레이블입니다.
비지도학습은 레이블 없이 배웁니다. 데이터끼리 닮은 것을 묶어 무리를 찾습니다. 손님의 구매 기록만 보고 비슷한 손님끼리 나누는 식입니다.
세 방식은 받는 신호와 데이터를 얻는 길이 다릅니다.
| 지도학습 | 비지도학습 | 강화학습 | |
|---|---|---|---|
| 받는 신호 | 예시마다 달린 레이블 | 없음 | 행동 뒤에 오는 보상 |
| 데이터를 얻는 길 | 미리 모아 둔다 | 미리 모아 둔다 | 에이전트가 행동하며 만든다 |
| 배운 결과 | 새 입력에 대한 답 | 데이터 속 무리 | 상태마다 고를 행동 |
첫 줄의 차이부터 봅시다. 레이블은 무엇이 정답인지 알려 줍니다. 보상은 방금 한 행동이 얼마나 좋았는지만 알려 줍니다. 미로에서 -1 을 받으면 그 방향이 막혔다는 것은 압니다. 어느 방향이 맞았는지는 다른 방향을 직접 해 봐야 압니다.
둘째 줄의 차이도 큽니다. 지도학습의 데이터는 학습 전에 이미 쌓여 있습니다. 강화학습의 데이터는 에이전트가 고른 행동에 따라 달라집니다. 늘 오른쪽만 가는 에이전트는 왼쪽에 무엇이 있는지 볼 기회가 없습니다. 이 문제는 아래 「탐험과 활용」에서 다시 다룹니다.
늦게 오는 보상
보상은 행동 바로 뒤에 오지 않을 때가 많습니다. 바둑은 수백 수를 둔 끝에 이기거나 집니다. 중간의 수에는 보상이 0 입니다.
그러면 승리가 어느 수 덕분인지 가려내야 합니다. 이것을 신용 할당 문제라고 부릅니다. 마지막 수만 칭찬하면 앞쪽에서 승부를 가른 수는 배우지 못합니다.
그래서 강화학습은 당장의 보상이 아니라 앞으로 받을 보상의 합을 봅니다. 이 합을 누적 보상이라고 부릅니다. 지금 행동을 따질 때도 바로 받은 보상만이 아니라 뒤따를 보상까지 더합니다.
먼 미래의 보상은 조금 깎아서 더합니다. 한 걸음 멀어질 때마다 곱하는 수가 할인율입니다. 흔히 γ(감마)로 적고, 값은 1 보다 작게 둡니다.
할인율이 1 보다 작으면 같은 보상이라도 빨리 받을수록 누적 보상이 커집니다. 그래서 에이전트가 목표를 미루지 않고 지름길을 찾게 됩니다.
아래 코드는 보상 목록을 받아 할인한 합을 계산합니다. 보기 쉽게 γ 를 0.5 로 두었습니다. 같은 보상 8 을 마지막에 받을 때와 처음에 받을 때를 견줍니다.
def discounted(rewards, gamma):
total = 0
for r in reversed(rewards):
total = r + gamma * total
return total
discounted([0, 0, 0, 8], 0.5) # 1.0
discounted([8, 0, 0, 0], 0.5) # 8.0
세 걸음 뒤에 받는 8 은 1 로 줄었습니다. 한 걸음마다 절반씩 깎였기 때문입니다. 첫 걸음에 받은 8 은 깎이지 않고 8 로 남습니다.
정책과 가치
강화학습이 끝나면 정책이 남습니다. 정책은 상태를 보고 행동을 고르는 규칙입니다. 「출구 바로 왼쪽 칸이면 오른쪽으로」 같은 규칙을 모든 칸에 대해 모아 둔 것이 미로의 정책입니다. 강화학습의 목표는 누적 보상이 가장 큰 정책을 찾는 것입니다.
정책을 찾으려면 상태마다 얼마나 유리한지 알면 편합니다. 어떤 상태에서 출발해 앞으로 받을 누적 보상을 예상한 값이 그 상태의 가치입니다. 상태를 넣으면 가치를 돌려주는 함수가 가치 함수입니다. 출구에 가까운 칸일수록 가치가 큽니다.
가치는 행동에도 붙일 수 있습니다. 어떤 상태에서 한 행동을 하고 그 뒤로 받을 누적 보상을 예상한 값이 그 행동의 가치입니다. 상태의 가치가 「이 칸에서 앞으로 몇 점을 모을까」라면, 행동의 가치는 「이 칸에서 오른쪽으로 가면 앞으로 몇 점을 모을까」입니다. 상태와 행동을 넣으면 행동의 가치를 돌려주는 함수가 Q-함수입니다.
배우는 방법은 무엇을 배우느냐로 크게 갈립니다.
| 무엇을 배우나 | 행동을 고르는 법 | 대표 방법 |
|---|---|---|
| 가치 | 상태마다 행동의 가치를 매겨 가장 큰 행동을 고른다 | Q-러닝 |
| 정책 | 정책 자체를 조금씩 고쳐 나간다 | 정책 경사 |
| 둘 다 | 정책이 고르고 가치가 그 선택을 채점한다 | 액터-크리틱 |
위 세 방법은 가장 단순하게는 칸(상태)마다 가치나 고를 행동을 한 줄씩 적은 표를 만들어 두고 고쳐 나갑니다. 미로처럼 상태가 몇십 개면 그래도 됩니다. 바둑판은 상태의 수가 표에 다 적을 수 없을 만큼 많습니다.
그럴 때는 신경망에게 표 대신 답을 맡깁니다. 신경망은 예시를 보고 입력에서 답을 내는 법을 익히는 모델입니다. 상태를 넣으면 가치나 고를 행동을 내도록 신경망을 훈련합니다. 이 조합을 심층 강화학습이라고 부릅니다.
탐험과 활용
점심 식당을 고르는 장면을 떠올려 봅시다. 단골 식당에 가면 실패가 없습니다. 새 식당에 가 보지 않으면 더 맛있는 곳이 있어도 영영 모릅니다.
에이전트도 같은 고민을 합니다. 지금까지 가장 좋았던 행동을 고르는 쪽을 활용이라고 부릅니다. 안 해 본 행동을 시험하는 쪽은 탐험입니다. 둘 사이에서 비율을 정하는 일을 탐험과 활용 문제라고 합니다.
활용만 하면 처음 우연히 찾은 길에 갇힙니다. 더 짧은 길이 있어도 가 보지 않았으니 모릅니다. 탐험만 하면 배운 것을 써먹지 못해 보상이 늘지 않습니다.
가장 흔한 해법은 가끔 무작위로 고르는 것입니다. 대부분은 지금까지 보상이 가장 컸던 행동을 고르고, 정해 둔 작은 확률로만 아무 행동이나 고릅니다.
이 방식이 ε-탐욕(epsilon-greedy)입니다. 눈앞에서 가장 좋아 보이는 것만 고르는 방식을 탐욕적이라고 합니다. 여기에 작은 확률 ε(엡실론)만큼 무작위를 섞었다는 뜻의 이름입니다.
보상을 잘못 짰을 때
에이전트는 보상만 봅니다. 사람이 무엇을 바랐는지는 모릅니다. 보상 규칙에 빈틈이 있으면 에이전트는 그 빈틈을 파고듭니다.
청소 로봇에게 쓰레기를 주울 때마다 1점을 준다고 해 봅시다. 로봇은 쓰레기를 쏟았다가 다시 주우면 점수가 더 오른다는 것을 찾아낼 수 있습니다. 보상은 늘었지만 방은 깨끗해지지 않습니다. 이런 일을 보상 해킹이라고 부릅니다.
그래서 보상을 짜는 일이 강화학습에서 큰 몫을 차지합니다. 바라는 결과 자체에 보상을 걸어야 합니다. 「쓰레기를 주웠나」가 아니라 「방이 깨끗한가」에 거는 식입니다.
강화학습을 쓰는 때
강화학습은 행동이 여러 번 이어지고 결과가 나중에 나오는 문제에 맞습니다. 게임, 로봇 팔 제어, 엘리베이터 배차가 그렇습니다. 한 번의 선택이 다음 상황을 바꿉니다. 순간마다의 정답은 몰라도 끝의 결과는 잴 수 있습니다.
시행착오를 싸게 할 수 있어야 합니다. 에이전트는 수없이 실패하며 배웁니다. 실제 로봇이 그만큼 넘어지면 비용이 너무 큽니다. 그래서 컴퓨터 속 시뮬레이션에서 먼저 연습시키는 경우가 많습니다.
언어 모델을 다듬는 데도 씁니다. 언어 모델은 앞의 글을 보고 뒤의 글을 이어 쓰도록 훈련한 모델입니다. 질문을 넣으면 답을 이어 써 냅니다.
먼저 보상 모델을 만듭니다. 질문과 답을 넣으면 그 답에 점수를 매겨 내는 모델입니다. 사람이 두 답 가운데 더 나은 쪽을 고른 기록으로 훈련합니다. 그다음 언어 모델이 이 점수를 키우도록 강화학습으로 고칩니다.
이 방식을 RLHF(Reinforcement Learning from Human Feedback, 사람 피드백 강화학습)라고 부릅니다. 언어 모델이 에이전트이고 보상 모델의 점수가 보상인 셈입니다.
백엔드에서 만나기 쉬운 친척은 멀티 암드 밴딧입니다. 상태 없이 여러 선택지 가운데 보상이 큰 것을 찾는 단순한 형태입니다. 광고 문구 여럿을 번갈아 보여 주다가 클릭이 많은 쪽으로 노출을 몰아 주는 데 씁니다. 탐험과 활용의 고민은 여기서도 똑같습니다.
강화학습을 쓰지 않는 때
정답 레이블이 이미 있으면 지도학습이 먼저입니다. 정답을 바로 알려 주면 보상으로 에둘러 배우는 것보다 적은 데이터로 배웁니다. 스팸 메일 판별처럼 한 번 판정하고 끝나는 문제에는 이어지는 행동이 없습니다. 강화학습이 더해 줄 것이 없습니다.
시뮬레이터 없이 실패가 비싼 문제도 어렵습니다. 의료나 금융처럼 실험 한 번이 비싼 곳에서는 에이전트가 마음껏 탐험할 수 없습니다. 이미 쌓인 기록만으로 배우는 오프라인 강화학습이 이 문제를 다룹니다.
관련 항목
강화학습이 속하는 상위 분류
받는 신호로 맞세워지는 학습 방식
지도학습 · 비지도학습 · 준지도학습 · 자기지도학습 · 모방 학습 · 능동 학습
강화학습 문제를 이루는 구성 요소
강화학습 에이전트 · 상태 공간 · 행동 공간 · 보상 함수 · 에피소드 · 누적 보상 · 할인율 · 가치 함수 · Q-함수
강화학습 문제를 적는 수학 틀
마르코프 결정 과정 · 마르코프 성질 · 벨만 방정식 · 동적 계획법
강화학습에 쓰는 알고리즘
Q-러닝 · SARSA · 시간차 학습 · 몬테카를로 방법 · 정책 경사 · 액터-크리틱 · PPO · DQN
강화학습의 하위 종류
심층 강화학습 · 오프라인 강화학습 · 모델 기반 강화학습 · 다중 에이전트 강화학습 · 역강화학습
탐험의 비율을 정하는 전략
탐험과 활용 · ε-탐욕 · UCB · 톰슨 샘플링 · 멀티 암드 밴딧
강화학습이 빌려 쓰는 머신러닝 구성 요소
모델 · 훈련 · 신경망 · 손실 함수 · 경사 하강법 · 레이블 · 시뮬레이션
강화학습에서 터지는 문제
보상 해킹 · 신용 할당 문제 · 희소 보상 · 샘플 효율 · 과적합
강화학습을 쓰는 실무 작업
게임 AI · 로봇 제어 · 추천 시스템 · RLHF · 자율 주행 · 대형 언어 모델
다른 이름: reinforcement learning · 강화 학습 · RL