ai theory
강화학습 기초 (1) - 정답 대신 보상을 따라 배우는 방법
Junyoung Park · 2024-03-15 · 9 min
들어가며...
예전에 RLHF에 대한 글을 적으면서 PPO나 Reward Model 같은 단어를 제법 열심히 설명한 적이 있다. 그런데 솔직히 말하면 당시의 본인은 강화학습을 제대로 이해한 상태라기보다, 여러 자료에 흩어진 설명을 어떻게든 이어 붙여서 학습 과정을 따라가고 있던 쪽에 가까웠다. 수식은 읽을 수 있었지만 왜 굳이 이런 모양이어야 하는지는 조금 흐릿했고, On-policy와 Off-policy를 물어보면 정의는 말할 수 있어도 머릿속에 바로 장면이 떠오르지는 않았다.
이 상태로 최신 논문만 계속 읽으면 언젠가 자연스럽게 이해되지 않을까 싶었는데, 역시 그런 요행은 없었다. 강화학습도 본인을 강화해주지는 않는다. 결국 기초부터 다시 보는 수밖에 없었다.
이번 시리즈는 David Silver의 UCL Reinforcement Learning 강의를 큰 뼈대로 삼고, 서울대학교 DSBA 연구실의 강화학습 소개 세미나와 Sutton & Barto의 Reinforcement Learning: An Introduction을 함께 참고해서 정리한다. 강의 내용을 그대로 번역하기보다, 본인이 수식을 보면서 실제로 막혔던 지점을 한 단계씩 풀어보는 것이 목표다.
글의 순서도 조금 느리게 가져가려고 한다. 일단 예시로 상황을 이해하고, 그다음 그림에서 기호를 확인하고, 마지막에 수식을 읽는 방식이다. 첫 번째 글에서는 강화학습의 가장 기본적인 등장인물만 소개한다.
- Agent와 Environment는 누구인가?
- State, Action, Reward는 무엇인가?
- 왜 눈앞의 Reward 하나가 아니라 미래의 Reward까지 더해야 하는가?
- Exploration과 Exploitation은 왜 동시에 필요한가?
Bellman Equation이나 Q-Learning은 아직 등장하지 않는다. 급한 마음에 이름부터 잔뜩 외우면 나중에 수식이 다 비슷해 보여서 오히려 더 헷갈리기 때문이다.
강화학습은 무엇이 다를까?
강화학습(Reinforcement Learning)도 결국 Machine Learning의 한 종류다. 다만 우리가 익숙하게 접한 Supervised Learning과는 문제를 주는 방식이 꽤 다르다.
고양이와 강아지를 구분하는 분류 문제를 생각해보자. Supervised Learning에서는 이미지와 함께 정답 Label이 주어진다. 모델이 고양이 사진을 강아지라고 예측하면 정답과 비교해 얼마나 틀렸는지 바로 계산할 수 있다. 문제집 뒤에 답지가 붙어 있는 셈이다.
반면 강화학습에서는 매 순간의 정답 행동을 알려주는 사람이 없다. 미로 한가운데 놓인 Agent에게 누군가가 매 칸마다 “지금은 오른쪽, 다음은 위쪽”이라고 알려주는 것이 아니라, 출구에 도착하면 점수를 주고 벽에 부딪히면 점수를 깎는 식이다. Agent는 그 점수를 바탕으로 방금 선택이 괜찮았는지 스스로 추측해야 한다.
David Silver의 첫 강의에서는 강화학습의 차이를 다음 네 가지로 정리한다.
- Supervisor가 없고 Reward signal만 존재한다.
- Feedback이 즉시 오지 않고 나중에 도착할 수 있다.
- 시간의 순서가 중요하다.
- Agent의 행동이 이후에 보게 될 Data까지 바꾼다.
마지막 문장이 특히 중요하다. 일반적인 이미지 분류에서 모델이 첫 번째 사진을 고양이라고 잘못 분류했다고 해서 두 번째 사진의 내용이 바뀌지는 않는다. 하지만 게임에서 왼쪽으로 한 번 움직이면 다음 화면 자체가 달라진다. 즉, 강화학습의 Data는 가만히 놓여 있는 Dataset이 아니라 Agent가 행동하면서 계속 만들어내는 경험이다.
Agent와 Environment
용어가 갑자기 많아 보이지만, 우선 강화학습을 “행동하는 쪽”과 “그 행동에 반응하는 나머지 세계”로 나누면 생각보다 단순하다.
Agent는 결정을 내리는 주체다. 게임이라면 Character를 조종하는 Algorithm이고, Robot이라면 Motor를 움직이는 Controller가 Agent가 된다. Environment는 Agent 바깥에 있는 나머지 모든 것이다. 게임의 Map과 규칙, Robot이 걷는 바닥, 중력, 장애물 등이 전부 Environment에 해당한다.
이 둘은 시간 마다 다음과 같은 순서로 상호작용한다.
수식을 보고 바로 넘기지 말고 문장으로 한 번 읽어보자.
Agent는 현재 상태 를 보고 행동 를 선택한다. Environment는 그 행동을 받은 뒤 보상 과 다음 상태 을 돌려준다.
아래처럼 정리할 수 있다.
| 기호 | 이름 | 의미 |
|---|---|---|
| State | 시간 에서 의사결정에 사용하는 현재 상황 | |
| Action | 현재 상황에서 Agent가 선택한 행동 | |
| Reward | 행동 이후 Environment가 돌려주는 하나의 숫자 | |
| Next State | 행동의 결과로 도착한 다음 상황 |
여기서 Reward와 Next State의 아래첨자가 인 이유는 행동을 먼저 한 뒤에 결과를 받기 때문이다. 물론 교재마다 Index를 조금 다르게 적는 경우가 있어서 처음에는 은근히 헷갈린다. 중요한 것은 숫자 자체보다 “현재 상태에서 행동하고, 그 결과로 다음 상태와 보상을 받는다”는 순서다.
점심 메뉴도 강화학습 문제가 될까?
연구실에서 점심 메뉴를 고르는 상황을 억지로 강화학습 문제처럼 만들어보자. 현재 비가 오고, 점심시간은 25분 남았고, 어제는 국밥을 먹었다고 하자.
- State: 날씨, 남은 시간, 현재 위치, 최근에 먹은 메뉴
- Action: 국밥집, 새로 생긴 식당, 편의점 중 하나를 선택
- Reward: 맛, 가격, 대기 시간 등을 합친 만족도
- Next State: 점심을 먹고 난 뒤의 시간, 위치, 포만감
여기서 “국밥집으로 가라”는 정답 Label은 없다. 비 오는 날에는 가까운 식당이 더 좋을 수도 있고, 줄이 예상보다 길어서 낮은 Reward를 받을 수도 있다. 같은 Action이라도 State에 따라 결과가 달라진다.
물론 실제 점심 선택을 이런 식으로 숫자화하면 밥 먹기 전에 퇴근 시간이 될 가능성이 높다. 아무튼 중요한 것은 강화학습이 정답 행동을 맞히는 문제가 아니라, 상호작용을 통해 좋은 행동의 기준을 배워가는 문제라는 점이다.
Reward는 정답지가 아니다
Reward는 Agent가 방금 얼마나 잘하고 있는지를 알려주는 Scalar feedback이다. Scalar라는 말이 괜히 거창해 보이지만, 여기서는 그냥 하나의 숫자라고 생각하면 된다.
예를 들어 미로에서는 다음처럼 Reward를 정할 수 있다.
- 출구에 도착하면
- 벽에 부딪히면
- 한 칸 움직일 때마다
이렇게 두면 Agent는 출구에 도착하는 것뿐만 아니라 가능한 한 적게 움직이는 경로도 선호하게 된다. 매 Step마다 을 내야 하므로 같은 을 받더라도 짧은 길의 최종 합계가 더 크기 때문이다.
그런데 Reward는 “이 행동이 정답이다”라고 직접 말해주지 않는다. 왼쪽으로 움직인 직후 을 받았다고 해서 왼쪽이 반드시 나쁜 행동인 것은 아니다. 그 한 칸이 출구로 가는 유일한 길일 수도 있기 때문이다.
바로 이 지점에서 강화학습이 어려워진다. 당장의 Reward가 작더라도 나중에 더 큰 Reward로 이어질 수 있고, 반대로 지금은 좋아 보여도 몇 Step 뒤에 막다른 길에 도착할 수 있다. 따라서 Agent의 목표는 매 순간 가장 큰 Reward를 받는 것이 아니라 미래에 받을 Reward의 합을 크게 만드는 것이다.
David Silver의 강의에서는 이를 Reward Hypothesis라는 문장으로 표현한다. 목표란 결국 Expected cumulative reward를 최대화하는 것으로 설명할 수 있다는 가정이다. 상당히 강한 주장이고 모든 인간의 목표를 숫자 하나로 정말 표현할 수 있는지는 별개의 철학적인 문제지만, 적어도 강화학습 문제를 수학으로 다루기 위해서는 이 가정에서 출발한다.
Return: 미래의 Reward를 한 번에 보기
시간 이후에 받을 Reward를 모두 더한 값을 Return이라고 하고 보통 로 적는다.
가장 단순하게는 다음과 같이 쓸 수 있다.
그런데 미래가 아주 길거나 끝나지 않는 환경에서는 Reward를 그대로 더했을 때 합이 무한히 커질 수 있다. 또한 아주 먼 미래의 보상은 그때까지 실제로 도달할지 불확실하다. 그래서 보통 Discount factor 를 사용한다.
여기서 각 기호를 하나씩 읽어보자.
- : 지금부터 미래에 받을 Discounted reward의 총합
- : 바로 다음 Step에서 받는 Reward
- : 미래 Reward를 현재 기준으로 얼마나 남겨둘지 정하는 값
- : 두 번 Discount된 세 번째 Reward
보통 는 과 사이의 값을 사용한다.
이면 바로 다음 Reward만 본다. 눈앞의 이득만 확인하는 상당히 급한 Agent가 된다. 반대로 가 에 가까우면 먼 미래의 Reward도 거의 비슷한 비중으로 고려한다.
숫자를 한 번 넣어보자. 앞으로 받을 Reward가 순서대로 , , 이고 라면,
세 번째에 있는 가 사라진 것은 아니다. 다만 현재로부터 두 Step 떨어져 있으므로 가 두 번 곱해져 만큼 반영되었다.
처음 수식을 보면 아래첨자와 제곱이 한꺼번에 등장해서 괜히 복잡해 보인다. 하지만 실제로 하는 일은 “한 칸 뒤 Reward는 그대로, 두 칸 뒤 Reward는 한 번, 세 칸 뒤 Reward는 두 번”이라고 시간 순서대로 영수증을 더하는 것뿐이다.
좋은 선택만 계속하면 되지 않을까?
이제 Agent가 여러 번 점심을 먹어본 결과, 단골 국밥집에서 평균적으로 높은 Reward를 받았다고 하자. 그러면 앞으로도 계속 그곳만 가면 될 것 같다.
문제는 새로 생긴 식당이 훨씬 맛있을 가능성도 있다는 것이다. 한 번도 가보지 않았으니 Reward를 모른다. 이미 괜찮다고 알고 있는 선택을 반복하는 것을 Exploitation, 정보를 얻기 위해 새로운 선택을 시도하는 것을 Exploration이라고 한다.
Exploitation만 하면 지금까지 찾은 가장 좋은 행동을 계속 사용할 수 있지만, 더 나은 행동을 영원히 발견하지 못할 수 있다. Exploration만 하면 정보는 많이 모이지만 매번 모험을 하느라 Reward를 제대로 얻지 못한다.
이 예시가 강의처럼 느껴지는 이유는 실제로 David Silver의 첫 강의에서도 Restaurant selection으로 같은 문제를 설명하기 때문이다. 단골집으로 가는 것은 Exploitation이고 새 식당을 시도하는 것은 Exploration이다. 강화학습에서는 이 사소한 점심 고민이 꽤 본질적인 문제가 된다. Agent는 학습을 위해 아직 모르는 행동을 해봐야 하지만, 동시에 학습하는 동안에도 Reward를 지나치게 잃어서는 안 된다.
구체적으로 어떻게 균형을 잡는지는 이후 Multi-armed Bandit과 -greedy를 다루는 글에서 다시 살펴볼 예정이다. 지금은 “가장 좋아 보이는 행동만 고르는 것이 항상 최선은 아니다” 정도만 기억하면 충분하다.
Policy는 Agent의 행동 습관이다
Agent가 State를 보고 Action을 고르는 규칙을 Policy라고 하고 로 표현한다.
결정적인 Policy는 State마다 하나의 Action을 바로 고른다.
확률적인 Policy는 현재 State에서 각 Action을 선택할 확률을 나타낸다.
두 번째 수식은 이렇게 읽으면 된다.
State가 일 때 Action 를 선택할 확률.
예를 들어 점심시간이 25분 남은 State에서 국밥집을 선택할 확률이 , 새 식당을 선택할 확률이 , 편의점을 선택할 확률이 이라면 이 세 숫자가 현재 Policy의 일부다.
강화학습의 목적은 결국 좋은 Policy를 찾는 것이다. 조금 더 정확히 말하면 Policy를 따라 행동했을 때 얻는 Expected Return이 최대가 되도록 만드는 것이다.
아직 나 Expectation이 익숙하지 않아도 괜찮다. 문장으로 바꾸면 “가능한 Policy 중에서 평균적으로 Return을 가장 크게 만드는 Policy 를 찾는다”는 뜻이다. 앞으로 등장할 Dynamic Programming, Q-Learning, Policy Gradient는 겉모습은 달라도 결국 이 목표를 향해 가는 서로 다른 방법이다.
Reward, Return, Value를 구분하기
강화학습 글을 읽다 보면 Reward, Return, Value가 비슷한 의미로 섞여 보일 때가 많다. 첫 글에서 셋을 완벽하게 정의할 필요는 없지만, 적어도 서로 같은 말은 아니라는 점은 잡고 넘어가는 편이 좋다.
| 용어 | 질문 | 간단한 비유 |
|---|---|---|
| Reward | 방금 얼마를 받았는가? | 이번 한 번의 결제 내역 |
| Return | 지금부터 실제로 받은 Reward를 모두 더하면 얼마인가? | 앞으로 쌓일 영수증의 합계 |
| Value | 이 State에서 앞으로 받을 Return을 평균적으로 얼마나 기대하는가? | 아직 받지 않은 영수증의 예상 금액 |
Reward는 Environment가 실제로 돌려준 한 Step의 숫자고, Return은 여러 Reward를 시간에 따라 합한 결과다. Value는 한발 더 나아가 아직 일어나지 않은 미래의 Return을 예측한다.
다음 글부터 강화학습 수식이 갑자기 복잡해지는 가장 큰 이유가 바로 이 “미래를 예측하는 값” 때문이다. 아직 가보지 않은 길의 Return은 직접 알 수 없으니, 경험과 확률을 이용해 Value를 추정해야 한다.
이번 글에서 기억할 것
이번 글의 내용을 한 문장으로 줄이면 다음과 같다.
강화학습은 Agent가 Environment와 순서대로 상호작용하면서, 미래 Reward의 합인 Return을 크게 만드는 Policy를 배우는 문제다.
조금 더 잘게 나누면 다음 다섯 가지다.
- Agent는 State를 보고 Action을 선택한다.
- Environment는 다음 State와 Reward를 돌려준다.
- Action은 다음에 보게 될 Data까지 바꾼다.
- 목표는 당장의 Reward가 아니라 미래 Reward를 합한 Return을 크게 만드는 것이다.
- 좋은 Policy를 찾으려면 Exploitation뿐 아니라 Exploration도 필요하다.
아직은 강화학습의 문법만 살펴본 셈이다. 다음 글에서는 “현재 State만 알면 정말 충분한가?”라는 질문에서 시작해 History, Observation, State의 차이와 Markov property를 정리해보려고 한다. 강화학습 자료를 읽을 때 거의 모든 수식이 에서 시작하는데, 대체 이 State가 과거의 어떤 정보를 들고 있어야 하는지부터 천천히 살펴볼 예정이다.