Q-러닝: 벨만 방정식으로 최적 행동을 찾아가는 강화학습
Q-러닝의 벨만 방정식과 TD 업데이트 원리를 미로 찾기 예제 코드로 설명하고, DQN 등 확장 기법과 실제 적용 사례를 정리한다
2026-08-14 · 최초 발행 2025-05-23
미로 속 로봇이 벽에 부딪히지 않고 목표 지점을 찾아가려면, 매 순간 "지금 이 행동이 앞으로 얼마나 도움이 될까"를 스스로 판단할 기준이 필요하다. Q-러닝은 그 기준값을 테이블 하나에 채워 넣는 방식으로 이 문제를 푼다.
환경 모델 없이 배우는 강화학습
Q-러닝은 환경과 상호작용하며 시행착오를 통해 학습하는 모델-프리(Model-Free) 강화학습 알고리즘이다. 특정 상태에서 특정 행동의 가치, 즉 Q-값을 학습해 장기적 보상을 최대화하는 최적 정책을 도출하는 것이 목표다. 환경의 전이 확률이나 보상 구조를 사전에 알 필요가 없다는 점이 모델 기반 방법과 갈라지는 지점이다.
Q-러닝은 로봇 제어, 게임 AI, 자율주행차, 추천 시스템 등에 활용되며, 각 상태-행동 쌍에 대한 Q-값을 테이블(Q-테이블)에 저장하고 점진적으로 업데이트하면서 최적의 행동 정책을 찾아간다.
Q-값과 벨만 방정식
Q-러닝의 핵심은 Q-함수를 통해 상태(s)에서 행동(a)의 가치를 평가하는 것이다. Q-함수 Q(s, a)는 상태 s에서 행동 a를 선택한 후 얻을 수 있는 미래 보상의 기대값을 의미하고, 벨만 방정식은 현재 보상과 미래 보상의 관계를 나타내는 재귀적 방정식이다.
Q(s, a) = r + γ * max(Q(s', a'))
여기서 r은 즉각적인 보상, γ(감마)는 할인율(0~1 사이의 값), s'는 다음 상태, a'는 다음 상태에서 가능한 모든 행동이다.
Q-값은 다음 업데이트 식을 통해 학습된다:
Q(s, a) ← Q(s, a) + α[r + γ * max(Q(s', a')) - Q(s, a)]
여기서 α(알파)는 학습률(0~1 사이의 값)이고, 대괄호 안의 항 [r + γ * max(Q(s', a')) - Q(s, a)]이 시간차 오차(TD Error)다.
학습이 도는 방식
Q-러닝 알고리즘은 다음 절차를 반복하며 수렴한다.
- 초기화: 모든 상태-행동 쌍의 Q-값을 임의의 값으로 초기화
- 상태 관찰: 현재 환경 상태 s 관찰
- 행동 선택: ε-탐욕(ε-greedy) 정책에 따라 행동 a 선택 — ε의 확률로 무작위 행동(탐색), 1-ε의 확률로 Q-값이 최대인 행동(활용)
- 행동 실행: 선택한 행동 a를 환경에 적용하고 보상 r과 다음 상태 s' 관찰
- Q-값 업데이트: 위 업데이트 식을 사용해 Q(s, a) 갱신
- 상태 갱신: s ← s'
- 반복: 종료 조건까지 2~6단계 반복
탐색과 활용의 균형
Q-러닝의 핵심 과제는 탐색(Exploration)과 활용(Exploitation) 사이의 균형을 찾는 것이다. 탐색은 새로운 행동을 시도해 환경에 대한 정보를 수집하는 것이고, 활용은 현재까지 알고 있는 정보를 바탕으로 최선의 행동을 선택하는 것이다.
이 균형을 위한 대표적인 전략은 다음과 같다.
- ε-greedy 방법: ε 확률로 무작위 행동, 1-ε 확률로 최적 행동
- 소프트맥스(Softmax) 방법: Q-값에 기반한 확률 분포로 행동 선택
- UCB(Upper Confidence Bound): 불확실성을 고려한 행동 선택
미로 찾기로 보는 구현
간단한 5x5 미로 환경에서 Q-러닝을 적용한 예시를 Python으로 구현하면 다음과 같다.
import numpy as np
import random
# 환경 설정 (5x5 미로)
n_states = 25 # 상태 수
n_actions = 4 # 행동 수 (상, 하, 좌, 우)
# Q-테이블 초기화
Q = np.zeros((n_states, n_actions))
# 학습 파라미터
alpha = 0.1 # 학습률
gamma = 0.9 # 할인율
epsilon = 0.1 # 탐색률
# 보상 설정
rewards = np.full((n_states), -0.1) # 기본 보상은 -0.1
rewards[24] = 1.0 # 목표 지점
obstacles = [5, 7, 11, 12, 15, 21] # 장애물
for obs in obstacles:
rewards[obs] = -1.0
# 다음 상태 결정 함수
def get_next_state(state, action):
if state in obstacles or state == 24: # 장애물이나 목표에 도달하면 재시작
return 0
row, col = state // 5, state % 5
if action == 0: # 상
row = max(0, row - 1)
elif action == 1: # 하
row = min(4, row + 1)
elif action == 2: # 좌
col = max(0, col - 1)
elif action == 3: # 우
col = min(4, col + 1)
next_state = row * 5 + col
if next_state in obstacles: # 장애물로 이동하는 경우
return state
return next_state
# Q-러닝 알고리즘
def q_learning(episodes=1000):
for episode in range(episodes):
state = 0 # 시작 상태
done = False
while not done:
# ε-greedy 정책으로 행동 선택
if random.uniform(0, 1) < epsilon:
action = random.randint(0, 3)
else:
action = np.argmax(Q[state])
# 다음 상태와 보상 관찰
next_state = get_next_state(state, action)
reward = rewards[next_state]
# Q-값 업데이트
Q[state, action] += alpha * (reward + gamma * np.max(Q[next_state]) - Q[state, action])
# 상태 갱신
state = next_state
# 종료 조건 확인
if state == 24 or state in obstacles:
done = True
# 학습 실행
q_learning(episodes=10000)
# 학습된 정책 출력
def print_policy():
actions = ['↑', '↓', '←', '→']
policy = np.empty((5, 5), dtype=object)
for state in range(n_states):
if state in obstacles:
policy[state // 5, state % 5] = 'X' # 장애물
elif state == 24:
policy[state // 5, state % 5] = 'G' # 목표
else:
best_action = np.argmax(Q[state])
policy[state // 5, state % 5] = actions[best_action]
return policy
print("학습된 정책:")
print(print_policy())
기본 알고리즘의 한계와 확장
기본 Q-러닝은 몇 가지 뚜렷한 한계를 갖는다.
- 차원의 저주: 상태-행동 공간이 커지면 Q-테이블이 기하급수적으로 커진다
- 연속 공간 처리 어려움: 기본 형태는 이산적인 상태-행동 공간만 처리 가능하다
- 학습 속도: 복잡한 환경에서 수렴까지 많은 시간이 걸린다
- 일반화 능력 부족: 새로운 상황에 대한 대응 능력이 제한적이다
이를 보완하는 방향은 다음과 같다.
- Deep Q-Network(DQN): 신경망으로 Q-함수를 근사한다
- 경험 리플레이(Experience Replay): 과거 경험을 저장하고 무작위로 샘플링하여 학습한다
- Double Q-Learning: 행동 선택과 평가를 분리해 과대평가 문제를 해결한다
- Prioritized Experience Replay: 중요한 경험을 우선적으로 학습한다
- Dueling Network Architecture: 상태 가치와 행동 이점을 분리해 학습 효율성을 높인다
게임 AI부터 자원 할당까지
게임 AI 영역에서는 AlphaGo Zero가 기본 강화학습 원리를 바탕으로 자가 학습을 수행했고, DQN을 활용한 아타리 게임 마스터, 복잡한 실시간 전략 게임인 스타크래프트 II에서 인간 수준 이상의 성능 달성 사례가 있다.
로봇 제어에서는 자율 주행 로봇의 장애물 회피·경로 탐색, 산업용 로봇 팔의 물체 조작 및 조립 작업 최적화에 Q-러닝이 쓰인다.
비즈니스 응용으로는 사용자 만족도를 보상으로 하는 추천 시스템, 클라우드 컴퓨팅 자원 배분·전력 그리드 관리 같은 자원 할당 최적화, 포트폴리오 최적화 및 자동 거래 시스템이 있다.
설계에서 챙길 것들
Q-러닝을 실제로 구현할 때는 다음을 고려해야 한다.
- 상태 공간 설계: 문제에 적합한 상태 표현 방법 선택
- 보상 함수 설계: 원하는 행동을 유도할 수 있는 보상 체계 구축
- 하이퍼파라미터 튜닝: 학습률(α), 할인율(γ), 탐색률(ε) 등 최적화
- 학습 안정성 확보: 경험 리플레이, 타겟 네트워크 등 안정화 기법 적용
- 평가 지표 설정: 알고리즘의 성능을 객관적으로 평가할 지표 정의
앞으로는 여러 에이전트가 동시에 학습하는 멀티에이전트 Q-러닝, 빠른 적응을 위한 메타 러닝, 복잡한 태스크를 계층적으로 분해하는 계층적 강화학습, Q-값 결정 과정의 투명성을 높이는 설명 가능한 AI, 지도학습·비지도학습과 결합하는 하이브리드 접근법이 연구 방향으로 꼽힌다. 기본 개념은 단순하지만 신경망과 결합하며 복잡한 문제에도 적용 가능한 도구로 발전해온 만큼, 탐색과 활용의 균형·샘플 효율성·복잡한 환경에서의 안정적 학습은 계속 중요한 과제로 남아 있다.