Skip to main content
Summary

이제 값을 직접 배워 보자

앞 장에서 우리는 벨만 방정식을 만났다. 핵심은 단순했다. 어떤 행동의 가치는 지금 받는 보상만으로 정해지지 않는다. 그 행동을 한 뒤 도착하는 다음 상태에서 앞으로 얼마나 좋은 선택을 할 수 있는지도 함께 봐야 한다.

이제 질문이 하나 생긴다.

우리가 환경의 규칙을 정확히 모른다면 어떻게 할까?

예를 들어 격자 세계에서 에이전트가 오른쪽으로 움직이려 했는데 벽에 막힐 수도 있고, 미끄러운 바닥 때문에 예상과 다른 칸으로 갈 수도 있다. 어떤 상태에서 어떤 행동을 했을 때 다음 상태가 정확히 어디인지, 보상이 얼마인지 미리 표로 갖고 있지 않다면 벨만 방정식을 깔끔하게 계산하기 어렵다.

Q-learning은 바로 이 지점에서 등장한다. 환경의 작동 방식을 미리 몰라도 된다. 에이전트가 직접 움직여 보고, 보상을 받고, 다음 상태를 관찰하면서 Q값을 조금씩 고쳐 나간다. 그래서 Q-learning은 강화학습 입문자가 가장 먼저 구현하기 좋은 알고리즘이다. 원리는 단순하지만, 그 안에는 강화학습의 중요한 감각이 거의 다 들어 있다.

상태를 본다. 행동을 한다. 보상을 받는다. 다음 상태로 간다. 그리고 방금 한 선택이 얼마나 좋았는지 다시 평가한다.

이 반복이 Q-learning이다.

Q-learning

Q-table: 상태와 행동의 점수표

Q-learning에서 Q는 행동 가치 함수를 뜻한다. 조금 풀어 말하면, Q(s, a)는 상태 s에서 행동 a를 했을 때 앞으로 기대할 수 있는 장기 보상의 추정값이다.

격자 세계를 떠올려 보자. 에이전트가 어느 칸에 서 있다. 그 칸이 상태다. 에이전트는 위, 아래, 왼쪽, 오른쪽 중 하나를 선택할 수 있다. 이 선택지가 행동이다. 그러면 Q-table은 각 칸마다 각 행동의 점수를 적어 둔 표다.

처음에는 아무것도 모른다. 그래서 보통 Q-table을 전부 0으로 시작한다. 아직 어느 방향이 좋은지 모르는 상태다. 에이전트는 이 빈 표를 들고 세계를 돌아다닌다. 어떤 칸에서 오른쪽으로 갔더니 벽에 부딪혔다. 그 행동의 점수는 조금 낮아질 수 있다. 어떤 칸에서 아래로 갔더니 목표 지점에 가까워졌다. 그 행동의 점수는 점점 올라갈 수 있다.

Q-table은 정답표가 아니다. 경험을 통해 계속 수정되는 메모장에 가깝다. 에이전트가 살아 보면서 적어 두는 행동별 평판이다.

간단히 표현하면 이런 모양이다.

상태위아래왼쪽오른쪽
A0.10.4-0.20.7
B0.00.90.30.2
C-0.10.20.80.1

이 표에서 상태 A에 있다면 에이전트는 오른쪽의 Q값이 0.7로 가장 높다는 것을 알 수 있다. 활용만 한다면 오른쪽을 선택할 것이다. 하지만 학습 중에는 아직 표가 불완전하기 때문에 가끔은 다른 행동도 시험해야 한다. 이때 앞서 배운 탐험과 활용의 딜레마가 다시 등장한다.

중요한 점은 Q-table이 환경의 모든 규칙을 저장하는 표가 아니라는 것이다. Q-table은 다음 상태가 어디일지 예측하는 모델이 아니다. 그저 상태와 행동의 조합마다 장기적으로 얼마나 좋은지에 대한 추정값을 담는다. 그래서 Q-learning은 모델 없이 학습하는 방법, 즉 model-free 방식에 속한다.

한 번의 경험은 하나의 힌트가 된다

Q-learning의 학습 재료는 아주 작다. 에이전트가 한 번 행동할 때마다 다음과 같은 경험이 생긴다.

현재 상태 s에서 행동 a를 했다. 보상 r을 받았다. 다음 상태 s′로 이동했다.

이 네 가지를 하나로 묶어 경험 튜플이라고 부르기도 한다.

[ (s, a, r, s') ]

이 짧은 기록 하나가 Q-table을 고치는 단서가 된다. 에이전트는 묻는다.

방금 내가 상태 s에서 행동 a를 했는데, 실제로 겪어 보니 이 행동의 가치는 어느 정도였을까?

여기서 앞 장의 벨만 아이디어가 다시 사용된다. 상태 s에서 행동 a를 한 가치는 두 부분으로 나뉜다. 첫째, 지금 받은 보상이다. 둘째, 다음 상태 s′에서 앞으로 얻을 수 있는 최고의 기대 보상이다.

따라서 Q-learning은 방금 경험한 내용을 바탕으로 새로운 목표값을 만든다.

[ text{목표값} = r + gamma max_{a'} Q(s', a') ]

이 식은 이렇게 읽으면 된다.

지금 받은 보상 r에, 다음 상태에서 가장 좋아 보이는 행동의 가치를 할인해서 더한다.

여기서 (gamma)는 할인율이다. 미래 보상을 얼마나 중요하게 볼지 정하는 값이다. (max_{a'} Q(s', a'))는 다음 상태에서 가능한 행동들 중 Q값이 가장 큰 것을 고른다는 뜻이다. 즉 다음 상태에 도착한 뒤에는 가장 좋은 선택을 한다고 가정하고 목표값을 만든다.

Q-learning의 핵심은 여기에 있다. 에이전트는 실제로 다음 행동을 무엇으로 선택했는지와 별개로, 학습할 때는 다음 상태에서 가장 좋아 보이는 행동을 기준으로 현재 Q값을 고친다.

이 특징이 뒤에서 설명할 off-policy 학습과 연결된다.

Q값은 한 번에 바꾸지 않는다

이제 목표값을 얻었다. 그렇다면 기존 Q값을 곧바로 목표값으로 바꾸면 될까?

대부분의 경우 그렇게 하지 않는다. 강화학습의 경험은 흔들린다. 우연히 좋은 보상을 받을 수도 있고, 우연히 나쁜 결과를 만날 수도 있다. 한 번의 경험만 믿고 표를 완전히 갈아엎으면 에이전트의 판단이 너무 요동친다.

그래서 Q-learning은 기존 추정값과 새로 관측한 목표값 사이를 조금씩 이동한다.

공식은 다음과 같다.

[ Q(s,a) leftarrow Q(s,a) + alpha left[r + gamma max_{a'} Q(s',a') - Q(s,a)right] ]

처음 보면 복잡해 보이지만, 사실 구조는 단순하다.

[ text{새 Q값} = text{기존 Q값} + alpha times (text{목표값} - text{기존 Q값}) ]

괄호 안의 (text{목표값} - text{기존 Q값})은 예측이 얼마나 틀렸는지를 나타낸다. 이를 TD 오차라고 부른다. TD는 temporal difference의 약자로, 시간 차이를 두고 얻은 추정값 사이의 차이라는 뜻이다. 어렵게 느껴진다면 그냥 이렇게 이해해도 충분하다.

방금 겪어 보니, 내가 생각했던 것보다 이 행동이 더 좋았나? 아니면 더 나빴나?

목표값이 기존 Q값보다 크면 Q값을 올린다. 생각보다 좋은 행동이었다는 뜻이다. 목표값이 기존 Q값보다 작으면 Q값을 내린다. 생각보다 별로였다는 뜻이다. 다만 한 번에 전부 바꾸지 않고 학습률만큼만 움직인다.

숫자로 보는 Q-learning 업데이트

작은 예를 들어 보자.

에이전트가 상태 A에서 오른쪽으로 이동했다. 보상은 1을 받았다. 다음 상태 B에 도착했다. 현재 Q-table에서 상태 B의 가능한 행동들 중 가장 큰 Q값은 6이다. 할인율 (gamma)는 0.9, 학습률 (alpha)는 0.1이라고 하자. 그리고 현재 (Q(A, 오른쪽))은 4라고 하자.

먼저 목표값을 계산한다.

[ text{목표값} = 1 + 0.9 times 6 = 6.4 ]

기존 Q값은 4였다. 방금 경험을 바탕으로 계산한 목표값은 6.4다. 즉 상태 A에서 오른쪽으로 가는 행동은 기존에 생각했던 것보다 더 좋아 보인다.

이제 Q값을 조금 올린다.

[ Q(A, 오른쪽) leftarrow 4 + 0.1 times (6.4 - 4) ]

[ Q(A, 오른쪽) leftarrow 4.24 ]

한 번의 업데이트로 4가 6.4가 되지는 않았다. 4.24가 되었다. 아주 조금 더 낙관적으로 바뀌었다. 같은 경험이 여러 번 반복되면 Q값은 점점 목표값에 가까워진다. 반대로 이후에 나쁜 결과가 자주 관찰되면 다시 내려갈 수 있다.

이것이 Q-learning의 성격이다. 큰 깨달음이 아니라 작은 수정의 반복이다. 에이전트는 세상을 한 번에 이해하지 않는다. 부딪히고, 보상을 받고, 표를 고치고, 다시 움직인다.

학습률: 얼마나 빨리 믿을 것인가

학습률 (alpha)는 새 경험을 얼마나 강하게 반영할지 정한다. 보통 0과 1 사이의 값을 사용한다.

학습률이 1에 가까우면 에이전트는 최근 경험을 강하게 믿는다. 조금 전에 겪은 일이 Q값을 크게 바꾼다. 빠르게 배울 수 있지만, 운 나쁜 경험 하나에도 판단이 크게 흔들릴 수 있다.

학습률이 0에 가까우면 에이전트는 조심스럽게 배운다. Q값이 천천히 변한다. 안정적일 수 있지만, 너무 느려서 좋은 전략을 찾는 데 오래 걸릴 수 있다.

식당을 고르는 사람으로 비유해 보자. 어떤 식당에 한 번 갔는데 음식이 별로였다. 학습률이 높은 사람은 바로 이렇게 말한다. 다시는 안 가. 학습률이 낮은 사람은 조금 다르게 생각한다. 오늘만 별로였을 수도 있어. 몇 번 더 보고 판단하자.

강화학습에서도 마찬가지다. 학습률은 경험을 믿는 속도다.

할인율: 미래를 얼마나 멀리 볼 것인가

할인율 (gamma)는 미래 보상을 얼마나 중요하게 볼지 정한다. 앞 장에서 다룬 장기 보상의 감각이 여기서 그대로 들어온다.

(gamma)가 작으면 에이전트는 가까운 보상에 집중한다. 지금 당장 점수를 주는 행동을 선호한다. 반대로 (gamma)가 1에 가까우면 먼 미래의 보상도 중요하게 본다. 당장은 손해처럼 보여도 나중에 큰 보상을 얻을 수 있는 길을 선택할 가능성이 커진다.

미로 게임에서 출구까지 가려면 처음 몇 걸음은 목표와 멀어지는 방향으로 가야 할 수도 있다. 할인율이 너무 낮은 에이전트는 그 길을 싫어할 수 있다. 당장 좋아 보이지 않기 때문이다. 할인율이 높은 에이전트는 멀리 있는 출구의 가치를 현재 행동으로 끌어와 반영한다.

다만 할인율이 높다고 항상 좋은 것은 아니다. 미래를 너무 멀리 보면 학습이 불안정해지거나, 먼 보상에 대한 추정 오류가 현재 Q값에 계속 영향을 줄 수 있다. 강화학습에서는 미래를 보는 능력과 현재 경험을 안정적으로 반영하는 능력 사이의 균형이 중요하다.

탐험률: 모르는 길을 얼마나 가 볼 것인가

Q-learning은 Q값이 가장 큰 행동을 선택하면 그럴듯하게 움직일 수 있다. 하지만 처음부터 Q-table이 정확한 것은 아니다. 처음에는 대부분의 값이 0이거나 임의의 값이다. 이때 가장 큰 값만 고집하면, 우연히 먼저 좋아 보인 행동만 반복할 수 있다.

그래서 학습 중에는 탐험이 필요하다. 가장 흔한 방법이 ε-greedy다. ε는 엡실론이라고 읽고, 탐험률을 뜻한다.

ε-greedy 방식에서 에이전트는 대부분의 경우 현재 Q값이 가장 높은 행동을 선택한다. 하지만 일정 확률 ε만큼은 무작위 행동을 선택한다. 예를 들어 ε가 0.1이라면 열 번 중 아홉 번은 좋아 보이는 행동을 하고, 한 번 정도는 아무 행동이나 해 보는 식이다.

이 방식은 단순하지만 강력하다. 에이전트에게 이런 습관을 심어 주기 때문이다.

좋아 보이는 길을 가되, 가끔은 낯선 골목도 들어가 보라.

탐험률이 너무 낮으면 에이전트는 일찍 편견에 빠진다. 아직 충분히 경험하지 않았는데 특정 행동만 좋다고 믿을 수 있다. 탐험률이 너무 높으면 에이전트는 계속 방황한다. 이미 좋은 길을 찾았는데도 쓸데없이 엉뚱한 행동을 많이 한다.

그래서 실제 학습에서는 처음에는 탐험률을 크게 두고, 시간이 지날수록 줄이는 방법을 자주 사용한다. 초반에는 많이 돌아다니며 세계를 익히고, 후반에는 배운 지식을 활용해 안정적으로 행동하는 것이다.

세 개의 손잡이: α, γ, ε

Q-learning을 처음 구현하면 세 개의 값이 계속 등장한다. 학습률 (alpha), 할인율 (gamma), 탐험률 (epsilon)이다. 이 셋은 에이전트의 성격을 바꾸는 손잡이와 같다.

  • 학습률 (alpha): 새 경험을 얼마나 빠르게 반영할지 정한다.

  • 할인율 (gamma): 미래 보상을 얼마나 중요하게 볼지 정한다.

  • 탐험률 (epsilon): 모르는 행동을 얼마나 자주 시도할지 정한다.

이 세 값은 서로 따로 노는 것이 아니다. 예를 들어 탐험률이 높으면 다양한 경험을 모을 수 있지만, 학습률까지 높으면 Q값이 매우 흔들릴 수 있다. 할인율이 높으면 장기 보상을 잘 반영할 수 있지만, 잘못된 추정도 멀리 전파될 수 있다. 학습률이 너무 낮으면 아무리 탐험을 많이 해도 표가 천천히만 바뀐다.

강화학습에서는 알고리즘 자체만큼이나 이런 설정값이 중요하다. 같은 Q-learning이라도 이 손잡이들을 어떻게 조정하느냐에 따라 에이전트는 성급한 모험가가 되기도 하고, 지나치게 소심한 관찰자가 되기도 한다.

Q-learning의 한 에피소드

Q-learning의 전체 흐름은 어렵지 않다. 에피소드는 게임 한 판, 미로 찾기 한 번, 로봇이 출발해서 종료 조건에 도달할 때까지의 한 번의 시도라고 생각하면 된다.

일반적인 Q-learning은 다음 순서로 진행된다.

  1. Q-table을 초기화한다.

  2. 현재 상태를 관찰한다.

  3. ε-greedy 같은 방식으로 행동을 선택한다.

  4. 행동을 실행하고 보상과 다음 상태를 관찰한다.

  5. (r + gamma max_{a'} Q(s', a'))로 목표값을 만든다.

  6. 기존 Q값을 목표값 쪽으로 조금 이동한다.

  7. 다음 상태로 이동해 이 과정을 반복한다.

종료 상태에 도착하면 한 에피소드가 끝난다. 예를 들어 목표 지점에 도착했거나, 구덩이에 빠졌거나, 제한된 시간이 끝났을 때다. 종료 상태에서는 더 이상 미래 보상이 없으므로 목표값을 보통 현재 보상만으로 본다.

[ text{종료 상태의 목표값} = r ]

이 작은 차이가 중요하다. 끝난 게임 뒤에는 다음 수가 없다. 다음 상태의 최대 Q값을 더하면 안 된다.

왜 다음 상태의 최대 Q값을 사용할까

Q-learning 업데이트에서 가장 눈에 띄는 부분은 이것이다.

[ max_{a'} Q(s', a') ]

다음 상태에서 실제로 어떤 행동을 했는지가 아니라, 가능한 행동 중 가장 큰 Q값을 사용한다. 왜 그럴까?

Q-learning은 좋은 정책을 직접 따라가며 기록하는 알고리즘이라기보다, 최적으로 행동한다면 각 행동의 가치는 얼마일지를 배우는 알고리즘이다. 즉 현재는 탐험 때문에 이상한 행동을 하더라도, 학습 목표는 다음 상태에서 가장 좋은 행동을 선택하는 쪽으로 잡는다.

격자 세계에서 에이전트가 상태 A에서 오른쪽으로 이동해 상태 B에 도착했다고 하자. 상태 B에서 실제로는 탐험 때문에 왼쪽으로 가 버렸을 수 있다. 하지만 Q-learning이 상태 A의 오른쪽 행동을 평가할 때는 이렇게 생각한다.

상태 B에 도착한 뒤에는 가장 좋은 행동을 한다고 치자. 그렇다면 A에서 오른쪽으로 간 가치는 얼마일까?

이 관점 덕분에 Q-learning은 탐험 중에 수집한 경험을 사용하면서도, 학습 목표는 점점 최적 행동 쪽으로 맞춰 간다.

off-policy라는 말의 의미

여기서 off-policy라는 중요한 개념이 나온다. 말은 어렵지만 핵심은 간단하다.

행동을 선택할 때 사용한 정책과, 학습 목표를 만들 때 가정한 정책이 다르면 off-policy다.

Q-learning에서는 에이전트가 행동할 때 ε-greedy를 사용할 수 있다. 즉 가끔은 무작위 행동을 한다. 이것이 실제로 데이터를 모으는 정책이다. 이를 행동 정책이라고 부를 수 있다.

하지만 Q값을 업데이트할 때는 다음 상태에서 가장 Q값이 큰 행동을 기준으로 목표값을 만든다. 이것은 탐험을 섞은 정책이 아니라 탐욕적인 정책, 즉 greedy 정책이다. 가장 좋아 보이는 행동만 고르는 정책이다. 이것이 학습이 바라보는 목표 정책이다.

정리하면 Q-learning에서는 두 정책이 나뉜다.

  • 행동 정책: 실제로 환경에서 행동하며 경험을 모으는 정책이다. 보통 ε-greedy처럼 탐험을 포함한다.

  • 목표 정책: Q값 업데이트가 가정하는 정책이다. 다음 상태에서 가장 큰 Q값을 선택하는 greedy 정책이다.

  • off-policy 학습: 행동 정책과 목표 정책이 달라도 학습할 수 있는 방식이다.

이 차이는 처음에는 사소해 보이지만, 강화학습 전체에서 매우 중요한 아이디어다. 나중에 더 복잡한 알고리즘을 볼 때도 우리는 자주 묻게 된다. 이 알고리즘은 실제로 행동한 방식에서 배우는가, 아니면 다른 목표 정책을 향해 배우는가?

Q-learning은 후자에 가깝다. 탐험하며 데이터를 모으지만, 배움의 방향은 가장 좋은 행동을 향한다.

Q-learning은 무엇을 알고, 무엇을 모르는가

Q-learning은 환경의 모델을 몰라도 된다. 상태 s에서 행동 a를 하면 다음 상태가 어디인지, 어떤 보상이 나올지 미리 알 필요가 없다. 그냥 해 보고 관찰하면 된다. 그래서 단순한 게임이나 격자 세계에서 매우 매력적이다.

하지만 Q-learning이 모든 것을 해결해 주는 것은 아니다. Q-table은 상태와 행동의 조합마다 값을 저장한다. 상태가 적을 때는 괜찮다. 격자 칸이 25개이고 행동이 4개라면 Q값은 100개면 충분하다. 하지만 상태가 엄청나게 많아지면 문제가 생긴다.

예를 들어 화면 픽셀을 상태로 쓰는 게임을 생각해 보자. 가능한 화면 조합은 사실상 셀 수 없을 만큼 많다. 로봇 팔의 각도와 속도를 연속적인 숫자로 표현하는 경우도 마찬가지다. 이런 세계에서는 모든 상태-행동 쌍을 표로 저장하기 어렵다.

Q-table 방식은 작은 세계에서는 훌륭한 출발점이지만, 큰 세계에서는 표가 너무 커진다. 이 한계가 다음 장의 Deep Q-Network로 이어진다. DQN은 Q-table 대신 신경망을 사용해 Q값을 예측한다. 표에 모든 값을 적어 두는 대신, 상태를 입력하면 각 행동의 Q값을 출력하는 함수를 학습하는 것이다.

그러나 DQN으로 가기 전에 Q-learning의 감각을 확실히 잡아야 한다. Q-table을 이해하면 딥 강화학습의 많은 알고리즘이 훨씬 덜 낯설어진다. 신경망이 들어와도 결국 묻는 질문은 비슷하기 때문이다.

이 상태에서 이 행동을 하면, 장기적으로 얼마나 좋을까?

Q-learning을 한 문장으로 정리하기

Q-learning은 상태와 행동의 조합마다 장기 보상의 추정값을 저장해 두고, 실제 경험을 통해 그 값을 조금씩 더 나은 목표값 쪽으로 고쳐 나가는 알고리즘이다.

다시 핵심 업데이트를 보자.

[ Q(s,a) leftarrow Q(s,a) + alpha left[r + gamma max_{a'} Q(s',a') - Q(s,a)right] ]

이 식에는 강화학습의 중요한 생각이 압축되어 있다. 지금 받은 보상을 본다. 다음 상태에서의 미래 가치를 본다. 기존 추정이 얼마나 틀렸는지 계산한다. 그리고 너무 성급하지 않게 조금만 고친다.

처음 Q-table은 텅 빈 지도와 같다. 에이전트는 그 지도를 들고 낯선 세계를 걷는다. 어떤 길은 막다른 골목이고, 어떤 길은 목표로 이어진다. 처음에는 헤매지만, 매번 돌아올 때마다 지도 위에 작은 표시가 남는다. 여기는 별로다. 여기는 조금 낫다. 이쪽으로 가면 나중에 좋은 일이 생긴다.

그 표시들이 쌓이면 어느 순간 에이전트는 더 이상 무작정 움직이지 않는다. 상태를 보고, Q값을 비교하고, 더 나은 행동을 고른다. 정답을 배운 것이 아니다. 행동의 결과를 배운 것이다.

이것이 Q-learning의 매력이다. 단순한 표 하나에서 시작하지만, 그 표 안에는 시행착오로 전략을 배워 가는 인공지능의 첫 번째 원리가 들어 있다.

책 목록

처음 만나는 강화학습: 보상으로 행동을 배우는 AI

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기