정답 대신 보상으로 배우는 학습
강화학습(Reinforcement Learning) 은 정답 라벨 대신, 환경이 주는 보상(Reward) 을 통해 에이전트가 최적의 행동 전략(정책, Policy) 을 학습하는 방법이다. 이 글에서는 지도학습과의 차이, 순차적 의사결정, 리워드와 에이전트, 탐험·활용, 그리고 Markov Decision Process(MDP)와 간단한 코드 예제까지 강화학습 기초를 정리한다.
(강화학습, Markov Decision Process을 바탕으로 재구성했다.)
1. 지도학습 vs 강화학습
1-1. 지도학습 (Supervised Learning)
지도학습 은 정답(라벨)이 포함된 데이터로 모델을 학습시키는 방식이다.
- 입력 (X) 와 정답 (Y) 를 함께 제공.
- 모델이 (X \rightarrow Y) 로 매핑하는 함수를 학습.
- 예측값과 정답 사이의 오차(loss) 를 최소화하도록 가중치를 업데이트.
- 대표 문제: 분류(Classification), 회귀(Regression). (이미지 분류, 스팸 메일 판별, 주가 예측 등)
핵심은 “정답이 있는 데이터로 오차를 줄이며 학습한다” 는 점이다.
1-2. 강화학습 (Reinforcement Learning)
강화학습 은 정답 라벨을 직접 주지 않고, 행동에 대한 보상(Reward) 으로 학습한다.
- 에이전트(Agent) 가 환경(Environment) 과 상호작용하며 행동(Action)을 선택.
- 그 결과로 받은 보상을 최대화하는 방향으로 정책(Policy) 을 학습.
- “이 행동이 좋았는가?” 를 보상으로 평가받으며 점점 더 좋은 전략을 찾아간다.
대표 응용:
- 게임 AI (Atari, 바둑, 스타크래프트 등)
- 자율주행
- 로봇 제어
핵심은 “정답 대신 보상을 통해 최적 행동 전략을 학습한다” 는 점이다.
2. 순차적 의사결정
강화학습의 에이전트는 한 번만 행동하는 것이 아니라, 시간에 따라 여러 번 행동을 선택 하고, 각 행동이 이후 상태와 보상에 영향을 준다.
- 현재 행동은 즉각적인 보상뿐 아니라 미래 상태 전이와 장기 누적 보상 에도 영향을 준다.
- 목표는 매 순간 보상이 아니라, 장기적 보상(Return) 을 최대화하는 정책을 학습하는 것.
이 구조는 보통 상태(State), 행동(Action), 보상(Reward), 상태 전이(Transition)로 구성된
- 마르코프 결정 과정(Markov Decision Process, MDP) 으로 모델링하며,
- 과거 전체가 아니라 현재 상태에 기반해 의사결정을 한다 는 마르코프 성질 을 가정한다.
3. 리워드(Reward)
리워드(Reward)는 에이전트가 특정 상태에서 어떤 행동을 했을 때 환경으로부터 받는 즉각적인 피드백 신호 다.
- 행동의 좋고 나쁨을 수치로 표현한 값.
- 에이전트는 리워드를 기반으로 정책을 업데이트하며, 장기 누적 보상(Return) 을 최대화하도록 학습한다.
리워드의 중요한 성질:
3-1. 즉각적 피드백 (Immediate Signal)
- 특정 상태에서 행동을 했을 때 즉시 주어지는 수치형 피드백.
- 예: 게임에서 점수를 얻으면 +보상, 장애물에 부딪히면 -보상.
- 하지만 목표는 한 번의 리워드가 아니라 장기 누적 리워드 다.
3-2. 희소성 (Sparse Reward)
- 많은 환경에서는 대부분의 시간에 보상이 0.
- 특정 목표를 달성했을 때만 보상이 주어지는 경우가 많다.
- 예: 미로 문제에서 출구에 도달했을 때만 +1.
- 리워드가 희소할수록 학습이 어려워진다.
3-3. 지연성 (Delayed Reward)
- 어떤 행동의 결과에 대한 보상이 즉시 나타나지 않고, 여러 단계를 거친 뒤 나중에 주어질 수 있다.
- 예: 체스에서는 한 수 둔 직후 보상이 없고, 게임 끝에 승패로 보상이 주어진다.
- 어떤 행동이 최종 결과에 기여했는지 파악하기 어려워지며, 이를 신용 할당 문제(Credit Assignment Problem) 라고 한다.
강화학습의 목표는 단순히 현재 리워드를 최대화하는 것이 아니라, 할인율((\gamma))을 고려한 미래 보상을 포함한 누적 리워드 를 최대화하는 것이다.
4. 에이전트와 에이전트의 종류
에이전트(Agent) 는 환경과 상호작용하며 상태(State)를 관찰하고, 행동(Action)을 선택하고, 그 결과로 리워드(Reward)를 받아 학습하는 주체다.
- 목표: 미래 보상까지 포함한 누적 보상(Return) 을 최대화하는 정책(Policy)을 학습.
- 경험을 통해 가치 함수(Value Function) 나 정책을 점진적으로 업데이트.
- 탐험(Exploration)과 활용(Exploitation)의 균형을 맞추어 학습.
에이전트는 학습 방식에 따라 여러 유형으로 나눌 수 있다.
4-1. 가치 기반(Value-Based) 에이전트
- 가치 함수(Value Function) 를 학습해 행동을 선택.
- 각 상태 또는 상태–행동 쌍의 가치를 계산하고, 가치가 가장 높은 행동을 고른다.
- 대표 알고리즘: Q-Learning, DQN.
- 정책을 직접 학습하기보다는 가치 함수를 통해 간접적으로 최적 정책 을 도출.
4-2. 정책 기반(Policy-Based) 에이전트
- 행동 선택 규칙인 정책(Policy) 를 직접 학습.
- 확률적으로 행동을 출력하는 정책을 최적화.
- 대표 알고리즘: REINFORCE, Policy Gradient.
- 연속적 행동 공간(로봇 관절 제어 등)에 적합.
4-3. 액터–크리틱(Actor–Critic) 에이전트
가치 기반과 정책 기반을 결합한 방식이다.
- Actor: 정책을 학습해 행동을 선택.
- Critic: 가치 함수를 학습해 Actor의 행동을 평가.
대표 알고리즘: A2C, A3C, PPO, SAC 등.
학습 안정성과 효율성이 좋아 실무에서 널리 사용된다.
4-4. 모델 기반(Model-Based) 에이전트
- 환경의 동작 원리(상태 전이 확률, 보상 함수)를 알거나 학습했다고 가정.
- 이를 바탕으로 미래를 예측하며 계획(Planning) 을 수행.
- 예: MCTS(Monte Carlo Tree Search), Dyna-Q 등.
- 샘플 효율성이 높은 장점.
4-5. 모델 프리(Model-Free) 에이전트
- 환경의 내부 구조를 모르고, 경험만으로 정책이나 가치 함수를 학습.
- 대부분의 현대 강화학습 알고리즘(DQN, PPO 등)이 이에 해당.
- 구현은 단순하지만, 많은 데이터가 필요하다.
5. Exploration vs Exploitation
Exploration(탐험) 은 지금까지 학습한 최선의 행동만 반복하지 않고, 더 나은 보상을 줄 수 있는 새로운 행동 을 시도하는 과정이다.
- 장기 누적 보상을 최대화하려면, 이미 잘 아는 행동(Exploitation)과 새로운 행동(Exploration)의 균형 이 중요하다.
- 예: (\epsilon)-greedy 전략에서 일정 확률((\epsilon))로 무작위 행동을 선택해 탐험.
Exploitation(활용) 은 지금까지의 학습 결과를 바탕으로 현재 가장 높은 보상을 줄 것으로 예상되는 행동 을 선택하는 과정이다.
- 단기적으로는 높은 성과를 얻을 수 있지만,
- 새로운 가능성을 탐색하지 않으면 지역 최적해 에 빠질 수 있다.
5-1. 일상 속 예시
- 점심 메뉴:
- Exploitation: 늘 가던 맛집에 간다 → 안정적인 만족.
- Exploration: 새로운 식당에 도전 → 더 맛있는 곳을 찾을 수도 있지만 실패 위험.
- 공부 방법:
- Exploitation: 지금까지 잘 통했던 공부법을 계속 유지.
- Exploration: 스터디, 새로운 교재, AI 도구 등 새로운 방법 시도.
5-2. 몬테주마의 복수 (Montezuma’s Revenge)
Atari 게임 중 하나로, 탐험 난이도가 매우 높은 대표 사례다.
- 중간 보상이 거의 없고, 특정 순서의 복잡한 행동을 해야만 점수를 얻는다.
- 잘못된 행동을 하면 즉시 게임이 종료.
- 무작위 탐험으로는 거의 보상에 도달하기 어렵다.
이런 환경에서는 Exploration 전략 설계 가 강화학습의 핵심 난제가 된다.
6. Markov Decision Process (MDP)
6-1. MDP란?
Markov Decision Process(MDP, 마르코프 결정 과정) 은 강화학습 환경을 표현하는 확률적 의사결정 모델 이다.
- 상태(State), 행동(Action), 전이확률(Transition Probability), 보상(Reward), 할인율((\gamma)) 으로 구성.
- 마르코프 성질: 다음 상태는 과거 전체가 아니라 현재 상태와 현재 행동 에만 의존.
- 강화학습의 목표는 이 MDP 환경 속에서 장기 누적 보상(기대 수익)을 최대화하는 최적 정책(policy) 을 찾는 것이다.
6-2. 마르코프 성질
마르코프 성질(Markov Property)은 미래 상태가 과거 전체 이력에 의존하지 않고, 현재 상태에만 의존 한다는 성질이다.
- 현재 상태가 과거 정보를 모두 요약하고 있다고 본다.
- 강화학습에서는 환경을 마르코프 성질을 만족한다고 가정해 상태 전이·의사결정을 단순화한다.
마르코프 한 상태 예시 (바둑)
- 바둑판 위의 현재 돌 배치 전체(흑·백 돌 위치와 공배 상황)가 하나의 상태.
- 다음 수 이후 상태는 어떻게 여기까지 왔는지 가 아니라,
- 현재 바둑판 모양과 이번에 둔 수에만 의존.
마르코프하지 않은 상태 예시 (다이어트)
- “지금 배가 고프다” 만으로는 다음 행동(폭식 vs 참기)을 예측하기 어렵다.
- 어제 얼마나 굶었는지, 최근 스트레스, 단 음식 섭취 등 과거 정보 가 중요.
- 같은 “배고픈 상태”라도 과거 이력이 다르면 다음 선택이 달라진다 → 마르코프 성질 위반.
6-3. 마르코프하게 만들려면?
현재 상태에 과거에 필요한 정보 를 포함시키면 된다.
- 여러 관측을 묶어 상태를 정의.
- RNN/Transformer 등으로 과거를 요약해 상태 표현에 포함.
마르코프하지 않으면, 상태를 더 크게 만들어 마르코프하게 만든다.
7. Markov Process·Markov Reward Process
7-1. Markov Process (MP)
Markov Process 는 상태(State)와 상태 전이 확률만으로 구성된 확률 과정이다.
- 시스템이 현재 상태에만 의존해 다음 상태로 확률적으로 이동.
- 의사결정 주체(에이전트)는 없다.
표현 방법:
- 상태 전이 다이어그램(그래프)
- 노드: 상태
- 화살표: 상태 전이
- 화살표 위 숫자: 전이 확률
- 전이 확률 행렬(Transition Matrix)
- 각 행(row)은 현재 상태, 열(column)은 다음 상태.
- 각 행의 합은 항상 1.
7-2. Markov Reward Process (MRP)
Markov Reward Process(MRP) 는 Markov Process에 보상(Reward) 과 할인율((\gamma)) 이 추가된 모델이다.
- 상태 집합 (S), 전이확률 (P), 보상 함수 (R), 할인율 (\gamma) 로 구성.
- 행동은 없고, 상태 전이와 보상만 존재.
- 목표: 특정 상태에서 시작했을 때의 기대 누적 보상(가치 함수 V(s)) 을 계산.
예시:
- 상태 집합: (S = {Working, Lunch, Home, Overheated})
- 할인율: (\gamma = 0.9)
할인율(γ, 감마)
할인율(Discount Factor, (\gamma)) 은 미래 보상을 현재 가치로 얼마나 반영할지를 결정한다.
- (\gamma \approx 0): 거의 현재 보상만 고려 → 매우 단기적.
- (\gamma \approx 1): 먼 미래 보상도 거의 동일하게 고려 → 장기적 전략.
예: (\gamma = 0.9) 이면,
- 한 단계 뒤 보상: 0.9배
- 두 단계 뒤 보상: (0.9^2 = 0.81) 배
질문: Working의 즉시 보상은 +5로 가장 큰데, 왜 항상 Working만 하는 게 최적은 아닐까?
→ Overheated(-10)로 갈 확률이 있기 때문. 장기 기대 보상 을 고려해야 한다.
8. MDP 예제와 할인 리턴 계산
8-1. 간단한 MDP 예제 (퇴근 후 선택)
상황:
- 현재 상태:
Working - 가능한 상태:
Working,Gym,Home - 리워드:
Working에서:Gym: +5Home: +2Working: +3
Gym에서:Home: +2Working: +4
Home: +10 (에피소드 종료)
파이썬으로 랜덤 정책을 시뮬레이션하면 다음과 같다.
import random
totalReward = 0
now = 'Working'
while True:
if now == 'Working':
rewardInfo = {
'Gym': 5,
'Home': 2,
'Working': 3,
}
now = random.choice(['Working', 'Gym', 'Home'])
totalReward += rewardInfo[now]
elif now == 'Gym':
rewardInfo = {
'Home': 2,
'Working': 4,
}
now = random.choice(['Working', 'Home'])
totalReward += rewardInfo[now]
if now == 'Home':
totalReward += 10
break
print(totalReward)
사용자 입력으로 행동을 선택하게 할 수도 있다.
totalReward = 0
now = 'Working'
while True:
try:
if now == 'Working':
taskInfo = ['Gym', 'Home', 'Working']
rewardInfo = [5, 2, 3]
choice = int(input('현재 Working 중 입니다. 다음에 할 일을 선택하시오. 1. Gym, 2. Home, 3. Working: ')) - 1
now = taskInfo[choice]
totalReward += rewardInfo[choice]
elif now == 'Gym':
taskInfo = ['Home', 'Working']
rewardInfo = [2, 4]
choice = int(input('현재 Gym 중 입니다. 다음에 할 일을 선택하시오. 1. Home, 2. Working: ')) - 1
now = taskInfo[choice]
totalReward += rewardInfo[choice]
except Exception:
print('올바른 입력을 부탁드립니다.')
continue
if now == 'Home':
print('제발 나도 집에 보내줘...')
totalReward += 10
break
print('totalReward: ', totalReward)
8-2. 문제 1: 하나의 경로에 대한 할인 리턴 계산
아래 경로가 실행되었다고 가정하자.
Working → Gym → Working → Home
- 할인율 (\gamma = 0.9).
- 각 단계의 리워드에 (\gamma^t) 를 곱해 합산해 Return 을 계산.
코드 형태로 표현하면:
totalReward = 0
now = 'Working'
gamma = 0.9
count = 0
while True:
try:
if now == 'Working':
taskInfo = ['Gym', 'Home', 'Working']
rewardInfo = [5, 2, 3]
choice = int(input('현재 Working 중 입니다. 다음에 할 일을 선택하시오. 1. Gym, 2. Home, 3. Working: ')) - 1
now = taskInfo[choice]
totalReward += rewardInfo[choice] if count == 0 else rewardInfo[choice] * (gamma ** count)
count += 1
elif now == 'Gym':
taskInfo = ['Home', 'Working']
rewardInfo = [2, 4]
choice = int(input('현재 Gym 중 입니다. 다음에 할 일을 선택하시오. 1. Home, 2. Working: ')) - 1
now = taskInfo[choice]
totalReward += rewardInfo[choice] if count == 0 else rewardInfo[choice] * (gamma ** count)
count += 1
except Exception:
print('올바른 입력을 부탁드립니다.')
continue
if now == 'Home':
print('제발 나도 집에 보내줘...')
totalReward += 10 * (gamma ** count)
break
print('totalReward: ', totalReward)
8-3. 문제 2: 두 정책 중 어느 쪽 Return이 더 큰가?
두 정책이 있다. (\gamma = 0.9) 일 때, 어떤 정책의 Return이 더 클까?
정책 A: Working → Working → Working → Home
정책 B: Working → Gym → Working → Home
같은 코드 구조에서 행동 선택만 다르게 했을 때, 계산해 보면 정답은 정책 B 다.
- 정책 A는 Working을 반복하며 비교적 안정적인 보상을 얻게 되지만,
- 정책 B는 Gym을 들렀다가 Working으로 돌아와 더 큰 장기 리턴 을 얻는 경로를 선택한다.
8-4. 문제 3: γ 값에 따른 전략 변화
(\gamma) 값에 따라 에이전트의 전략은 다음처럼 달라질 수 있다.
- (\gamma = 0.1): 거의 현재 보상만 고려.
- 가능한 빨리
Home을 선택해 즉각적인 보상을 얻으려 한다.
- 가능한 빨리
- (\gamma = 0.9): 미래 보상도 중요.
- 몇 번 더
Working·Gym을 반복해 보상을 쌓은 뒤Home으로 가는 전략을 선호.
- 몇 번 더
- (\gamma = 1.0): 이론상 미래 보상을 전혀 할인하지 않는다.
- 단순화된 예에서는 집에 안 가고 계속 보상을 쌓으려는 극단적 전략을 택할 수도 있다.
9. Multi-Armed Bandit: 강화학습의 단순화된 시작점
Multi-Armed Bandit(멀티암드 밴딧) 문제는 강화학습의 가장 단순한 형태 로,
- 슬롯머신(Arm) 여러 개 중에서
- 평균 보상이 가장 큰 머신을 실험을 통해 찾아야 하는 상황이다.
설정 예시:
- 슬롯머신 5개.
- 각 머신은 서로 다른 평균 보상을 갖지만, 그 값은 모른다.
- 직접 당겨보며 학습해야 한다.
실험 구성:
- 환경 설계
- 5개 머신, 각기 다른 평균 보상(예: 0.2, 0.5, 0.1, 0.8, 0.3).
- 보상은 정규분포나 베르누이 분포로 샘플링.
- 전략 구현
- Random 전략
- Greedy 전략
- (\epsilon)-greedy 전략(예: (\epsilon = 0.1))
- 실험 조건
- 총 1,000번 선택.
- 누적 보상, 각 머신 선택 횟수 기록.
- 결과 분석
- 누적 보상 곡선.
- 머신별 선택 비율.
- (\epsilon) 값 변화(0.1 vs 0.01) 비교.
생각해 볼 질문:
- Greedy 전략은 왜 실패할 수 있을까?
- (\epsilon) 이 너무 크면 어떤 문제가 발생할까?
- (\epsilon) 이 너무 작으면 어떤 문제가 발생할까?
- 왜 Exploration이 꼭 필요할까?
멀티암드 밴딧은 상태가 하나뿐인 매우 단순한 강화학습 이지만,
Exploration vs Exploitation의 핵심 고민 을 잘 보여 주는 출발점이다.
해당 코드는 과제로 작업했으며 다른 포스트로 작성해보겠다.
마치며
- 강화학습은 정답 대신 보상 으로 배우며, 장기 누적 보상 을 목표로 하는 순차적 의사결정 문제다.
- 리워드의 희소성·지연성과, Exploration·Exploitation 균형이 학습 난이도를 크게 좌우한다.
- MDP·MRP·마르코프 성질을 이해하면, 이후 TD Learning, Monte Carlo, Deep RL 등으로 자연스럽게 이어갈 수 있다.
- Multi-Armed Bandit처럼 단순한 예제부터 시작해, 점차 복잡한 환경·에이전트로 확장해 나가면 강화학습 전체 그림을 잡는 데 도움이 된다.
'현재 > 강화학습' 카테고리의 다른 글
| Policy 기반 에이전트 - REINFORCE, Actor-Critic, TD Actor-Critic (0) | 2026.03.13 |
|---|---|
| Q-learning과 DQN - Q값 업데이트, Gym·CartPole 실습 (0) | 2026.03.12 |
| Deep RL - 함수 근사, 신경망, 가치 기반·정책 기반 강화학습 (0) | 2026.03.11 |
| Monte Carlo와 TD Learning - GridWorld로 비교하는 모델 프리 가치 학습 (0) | 2026.03.10 |
| 벨만 기대 방정식 - 술취한 사람 예제로 이해하는 가치 함수와 값 반복 (0) | 2026.03.09 |