[CS300 #278] 강화학습 기초 — 정답 대신 보상으로 배운다
컴퓨터공학 300 주제 시리즈의 278번째 글이다. 전체 지도는 여기.
한 줄 요약
강화학습은 에이전트가 환경에서 행동하고 받은 보상의 누적 합을 최대화하는 정책을 시행착오로 배우는 방법이며, 마르코프 결정 과정(MDP)과 벨만 방정식이 그 수학적 뼈대다.
왜 필요한가
지도 학습은 “이 입력의 정답은 이것”이라는 라벨이 있어야 한다. 그런데 바둑의 한 수, 로봇 팔의 관절 각도, 서버 자원 배분 같은 문제에는 매 순간의 정답이 없다. 결과는 한참 뒤에야 나온다. 이긴 판의 수십 번째 수가 좋은 수였는지, 운이 좋았는지 바로 알 수 없다.
강화학습은 이런 지연된 보상과 순차적 의사결정을 다룬다. 게임(DQN 의 아타리, 알파고의 바둑), 로봇 제어, 추천 시스템, 그리고 LLM 을 사람의 선호에 맞추는 RLHF 까지 쓰임이 넓다. LLM 의 학습 과정을 이해하는 데도 강화학습의 기본 어휘가 필요하다.
핵심 개념
에이전트-환경 루프
행동 a_t
에이전트 ─────────▶ 환경
▲ │
└──── 상태 s_{t+1}, 보상 r_{t+1} ──┘
마르코프 결정 과정(MDP)
| 요소 | 뜻 |
|---|---|
| S | 상태 집합 |
| A | 행동 집합 |
| P(s’ | s, a) | 전이 확률 |
| R(s, a, s’) | 보상 |
| γ ∈ [0, 1) | 할인율: 미래 보상을 얼마나 덜 쳐줄지 |
마르코프 성질: 다음 상태는 현재 상태와 행동에만 의존하고 그 이전 이력과는 무관하다. 상태 정의에 필요한 정보를 다 담으면 이 가정이 성립한다.
| 목표는 반환값 G_t = r_{t+1} + γ·r_{t+2} + γ²·r_{t+3} + … 의 기댓값을 최대화하는 정책 π(a | s) 를 찾는 것이다. γ 가 0 에 가까우면 근시안적, 1 에 가까우면 멀리 본다. |
가치 함수와 벨만 방정식
- 상태 가치 V^π(s): 상태 s 에서 정책 π 를 따랐을 때의 기대 반환값.
- 행동 가치 Q^π(s, a): s 에서 a 를 한 뒤 π 를 따랐을 때의 기대 반환값.
최적 행동 가치 Q* 는 다음 벨만 최적 방정식을 만족한다.
Q*(s, a) = E[ r + γ · max_a' Q*(s', a') ]
“지금 행동의 가치 = 즉시 보상 + 다음 상태에서 최선을 다했을 때의 가치(할인)”. Q* 를 알면 최적 정책은 각 상태에서 Q* 가 가장 큰 행동을 고르는 것이다.
Q-러닝
전이 확률을 몰라도, 경험한 (s, a, r, s’) 하나하나로 Q 를 고쳐 간다.
Q(s, a) ← Q(s, a) + α · [ r + γ · max_a' Q(s', a') − Q(s, a) ]
└──── TD 목표 ────┘
└──────── TD 오차 ────────────┘
이것을 시간차(TD) 학습이라 한다. 에피소드가 끝날 때까지 기다리지 않고, 다음 상태의 추정치로 현재 추정치를 고친다(부트스트래핑). Q-러닝은 행동은 탐험적으로 하면서 목표는 max(최선)로 잡으므로 오프-폴리시 방법이다.
탐험과 활용
지금 아는 최선만 하면(활용) 더 좋은 길을 영영 모른다. 무작위로만 하면(탐험) 배운 것을 쓰지 못한다. 가장 단순한 절충이 ε-탐욕이다. 확률 ε 로 무작위 행동, 나머지는 Q 가 최대인 행동.
표에서 신경망으로
상태가 많으면 Q 를 표로 저장할 수 없다. Mnih 외(2015)의 DQN 은 신경망으로 Q 를 근사해, 화면 픽셀만 보고 여러 아타리 게임을 학습했다. 경험 재생(과거 경험을 버퍼에 모아 무작위로 다시 학습)과 목표 네트워크(TD 목표를 천천히 갱신되는 사본으로 계산)가 학습을 안정시킨 핵심 기법이다. 정책을 직접 최적화하는 정책 경사 계열도 있으며, PPO(Schulman 외, 2017)는 RLHF 에서 널리 쓰인 알고리즘이다.
직접 해 보기
칸 0~5 의 일차원 복도에서 0 에서 출발해 5 에 도착하면 +1, 한 걸음마다 −0.01 을 받는 환경이다. 표 기반 Q-러닝으로 학습한다.
import random
random.seed(0)
# 1차원 복도: 상태 0..5, 5 에 도착하면 보상 +1, 매 걸음 -0.01
N, GOAL, ACTIONS = 6, 5, (-1, +1)
Q = [[0.0, 0.0] for _ in range(N)]
alpha, gamma, eps = 0.5, 0.9, 0.2
def step(s, a):
s2 = min(max(s + ACTIONS[a], 0), N - 1)
return s2, (1.0 if s2 == GOAL else -0.01), s2 == GOAL
for ep in range(200):
s = 0
while True:
a = random.randrange(2) if random.random() < eps else max((0, 1), key=lambda i: Q[s][i])
s2, r, done = step(s, a)
target = r if done else r + gamma * max(Q[s2])
Q[s][a] += alpha * (target - Q[s][a]) # TD 갱신
s = s2
if done: break
for s in range(N - 1):
print(f"상태 {s}: Q(왼)={Q[s][0]:+.3f} Q(오)={Q[s][1]:+.3f} -> {'왼오'[Q[s].index(max(Q[s]))]}")
print("이론값 Q*(4,오)=1, Q*(3,오)=", round(-0.01 + 0.9*1, 3))
실행 결과:
상태 0: Q(왼)=+0.550 Q(오)=+0.622 -> 오
상태 1: Q(왼)=+0.550 Q(오)=+0.702 -> 오
상태 2: Q(왼)=+0.622 Q(오)=+0.791 -> 오
상태 3: Q(왼)=+0.702 Q(오)=+0.890 -> 오
상태 4: Q(왼)=+0.791 Q(오)=+1.000 -> 오
이론값 Q*(4,오)=1, Q*(3,오)= 0.89
모든 상태에서 “오른쪽”의 가치가 더 크다. 아무도 “오른쪽으로 가라”고 알려 주지 않았다. 목표에서 받은 +1 이 TD 갱신을 통해 한 칸씩 뒤로 전파되었다.
숫자도 벨만 방정식과 맞는다. 상태 4 에서 오른쪽은 바로 목표이므로 Q = 1. 상태 3 에서 오른쪽은 −0.01 + 0.9 × 1 = 0.89. 상태 2 는 −0.01 + 0.9 × 0.89 ≈ 0.791. 할인율 0.9 를 한 번씩 곱하며 줄어든다. 표의 값이 이론값과 거의 같다는 것은 이 작은 환경에서 Q-러닝이 최적값으로 수렴했다는 뜻이다.
ε 를 0 으로 바꿔 보면 흥미롭다. 이 작은 환경에서는 그래도 “오른쪽”이라는 정책을 찾는다. 처음 해 본 행동이 −0.01 을 받아 음수가 되면, 아직 안 해 본 행동(0)이 상대적으로 좋아 보여 저절로 시도되기 때문이다. 하지만 Q(왼쪽) 값은 −0.02 근처에 머물러 이론값(상태 3 이면 −0.01 + 0.9 × 0.791 ≈ 0.70)과 전혀 다르다. 한 번 나빠 보인 행동을 다시 시도하지 않으니 그 가치를 끝내 배우지 못한 것이다. 환경이 조금만 복잡해도 이런 편향된 추정이 잘못된 정책으로 이어진다.
현업에서는
- 시뮬레이터가 있을 때 강하다. 게임, 로봇 시뮬레이션처럼 실패 비용 없이 수백만 번 시도할 수 있는 곳에서 성과가 컸다. 실제 시스템에서 무작위 탐험은 비싸고 위험하다.
- 보상 설계가 가장 어렵다. 에이전트는 보상을 최대화할 뿐 설계자의 의도를 모른다. 의도와 다른 허점을 찾아 점수만 올리는 보상 해킹이 흔하다. LLM 의 RLHF 에서 KL 벌점을 두는 것도 같은 맥락이다.
- 자원 관리: 데이터센터 냉각, 작업 스케줄링, 자동 확장 정책에 강화학습을 적용하려는 시도가 있다. 그러나 운영 환경에서는 규칙 기반 정책이 예측 가능하고 디버깅하기 쉬워 여전히 기본값이다. 쿠버네티스의 HPA 도 학습이 아니라 목표 사용률 기반 규칙이다.
- 실험 도구: Gymnasium 같은 표준 환경 인터페이스로 알고리즘을 같은 조건에서 비교한다.
확인 문제
- 강화학습이 지도 학습과 다른 핵심 두 가지는?
- 할인율 γ 가 0 이면 에이전트는 어떻게 행동하는가?
- Q-러닝 갱신식에서 TD 오차는 무엇인가?
- ε-탐욕에서 ε 를 학습 내내 크게 유지하면 어떤 문제가 생기는가?
- 예제에서 상태 2 의 Q(오른쪽) 이론값을 계산하라.
풀이
- 정답 라벨 대신 보상 신호로 배우고, 그 보상이 지연되어 나타나며, 에이전트의 행동이 이후에 보게 될 데이터 자체를 바꾼다.
- 즉시 보상만 최대화하는 근시안적 행동을 한다.
- r + γ·max Q(s’, a’) − Q(s, a). 새 추정치(목표)와 현재 추정치의 차이.
- 배운 최선의 행동을 덜 쓰게 되어 성능이 낮게 유지된다. 그래서 보통 학습이 진행되면서 ε 를 줄인다.
- −0.01 + 0.9 × 0.89 = 0.791.
더 읽을거리 (References)
- R. S. Sutton, A. G. Barto, Reinforcement Learning: An Introduction, 2nd ed., MIT Press, 2018. 저자 공개판
- V. Mnih 외, “Human-level control through deep reinforcement learning”, Nature 518, 2015. 링크
- J. Schulman 외, “Proximal Policy Optimization Algorithms”, 2017. arXiv:1707.06347
- Gymnasium 공식 문서