반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- ReactNative
- GYM
- 강화학습 기초
- 사이드프로젝트
- redux
- selenium
- 앱개발
- App
- python
- 카트폴
- 전국국밥
- FirebaseV9
- JavaScript
- Reinforcement Learning
- 조코딩
- 딥러닝
- kaggle
- 데이터분석
- TeachagleMachine
- clone coding
- pandas
- coding
- React
- 클론코딩
- 머신러닝
- expo
- 강화학습
- Instagrame clone
- Ros
- 리액트네이티브
Archives
- Today
- Total
qcoding
[강화학습-6] 시간차 학습 (Temporal-Difference, TD) 본문
반응형
6. 시간차 학습 (Temporal-Difference, TD)
“경험은 한 발 먼저, 오류는 한 발 뒤에.”
시간차(TD) 학습은 에피소드가 끝나기를 기다리지 않고, 한 스텝 지연된 오차만으로 가치를 업데이트합니다.
Monte Carlo의 “무편향·고분산”과 DP의 “모델 필요·저분산” 사이에서 균형점을 찾은 방법이라 볼 수 있습니다.
6-1. TD(0) 업데이트
상태 가치 버전
$$ V(S_t) \;\leftarrow\; V(S_t) + \alpha\bigl[R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\bigr] $$- $\alpha$ : 학습률 (step-size)
- $R_{t+1} + \gamma V(S_{t+1})$ : 부트스트랩 목표(1-스텝 리턴)
- 대괄호 내부는 TD 오차 $\delta_t$ (예측 – 관측 차이)
요점 : 미래 가치를 현재 추정치로 대체해 편향이 조금 생기지만, 즉시·연속 업데이트가 가능해집니다.
6-2. SARSA vs Q-Learning
알고리즘 | 업데이트 식 | 성격 |
---|---|---|
SARSA (State–Action–Reward–State–Action) |
$$ Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha\bigl[R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t)\bigr] $$ | On-policy 업데이트에 정책이 실제로 고른 $A_{t+1}$ 사용 |
Q-Learning | $$ Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha\bigl[R_{t+1} + \gamma \max_{a}Q(S_{t+1},a) - Q(S_t,A_t)\bigr] $$ | Off-policy 목표 정책은 항상 탐욕적 ($\max$) – 학습과 행동이 분리 |
● On-policy vs Off-policy
- On-policy : 업데이트·행동 ☞ 동일 정책. 안정적이나 탐험이 중요.
- Off-policy : 행동은 행동 정책, 업데이트는 목표 정책. 탐험(behavior)과 학습(target) 분리 → 유연하지만 고variance 문제(Importance Sampling)가 뒤따름.
6-3. CartPole 예제 – Q-Learning VS SARSA
CartPole은 연속 상태 4-차원 벡터(위치, 속도, 각도, 각속도)를 출력합니다. 가장 간단한 해결책은 균등 구간 (Discretization) 으로 상태를 작은 그리드로 바꾸는 방식입니다.
"""
pip install gymnasium numpy
"""
import gymnasium as gym
import numpy as np
from collections import defaultdict
ENV_ID = "CartPole-v1"
N_BINS = (6, 6, 12, 12) # 각 상태변수 구간 수
EPISODES = 20_000
GAMMA = 0.99
ALPHA = 0.1
EPS_MIN = 0.05
EPS_DECAY = 0.9995
EPSILON = 1.0 # 초기 ε
METHOD = "q_learning" # 또는 "sarsa"
env = gym.make(ENV_ID)
n_act = env.action_space.n
# 구간 경계 (관측값 범위 참고)
obs_hi = env.observation_space.high
obs_lo = env.observation_space.low
obs_hi[1] = 5 ; obs_lo[1] = -5 # 속도 클리핑
obs_hi[3] = 5 ; obs_lo[3] = -5 # 각속도 클리핑
grid = [np.linspace(lo, hi, n-1) for lo, hi, n in zip(obs_lo, obs_hi, N_BINS)]
def discretize(obs):
return tuple(int(np.digitize(x, g)) for x, g in zip(obs, grid))
Q = defaultdict(lambda: np.zeros(n_act))
def epsilon_greedy(state, eps):
if np.random.rand() < eps:
return env.action_space.sample()
return np.argmax(Q[state])
for ep in range(EPISODES):
state, _ = env.reset()
state = discretize(state)
action = epsilon_greedy(state, EPSILON)
done = False
while not done:
next_obs, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
next_state = discretize(next_obs)
# --- TD Target ---
if METHOD == "sarsa":
next_action = epsilon_greedy(next_state, EPSILON)
target = reward + GAMMA * Q[next_state][next_action] * (not done)
else: # Q-learning
target = reward + GAMMA * np.max(Q[next_state]) * (not done)
# --- TD Update ---
Q[state][action] += ALPHA * (target - Q[state][action])
# 다음 스텝
if METHOD == "sarsa":
action = next_action
else:
action = epsilon_greedy(next_state, EPSILON)
state = next_state
# ε 감소
EPSILON = max(EPS_MIN, EPSILON * EPS_DECAY)
# 간단한 모니터링
if (ep+1) % 1000 == 0:
print(f"Episode {ep+1:5d} | ε = {EPSILON:.3f}")
- 성공 기준 : CartPole-v1 목표는
avg_reward ≥ 475
(500 만점) over 100 episodes. - 구간 수·학습률·$\epsilon$ 스케줄을 높이면 더 빨리 수렴.
- 더 나은 성능을 원한다면 신경망 근사(DQN)·정책 경사 등으로 확장하세요.
6-4. 요약 & 다음 편 예고
- TD(0)는 1-스텝 부트스트랩으로 빠른 온라인 업데이트를 제공한다.
- Q-Learning(Off-policy) ↔ SARSA(On-policy) – 목표/행동 정책 분리 여부가 핵심 차이.
- CartPole 같이 연속 상태 환경은 이산화·타일 코딩·신경망 등의 함수 근사가 필수.
다음 글 : TD(λ)와 N-step 리턴으로 일반화된 Eligibility Trace 개념, 그리고 딥 Q-Network(DQN)·Policy Gradient로 이어지는 딥 강화학습의 서막을 살펴봅니다.
참고 자료
- Sutton & Barto, Reinforcement Learning: An Introduction, Ch. 6
- David Silver, RL Course Lecture 5 – TD Learning & Control
- OpenAI (gymnasium)
CartPole-v1
환경 소스코드
반응형
'머신러닝 딥러닝' 카테고리의 다른 글
[강화학습-8] 딥 강화학습(Deep RL) 기초 – DQN (2) | 2025.05.28 |
---|---|
[강화학습-7] 함수 근사 (Function Approximation) (0) | 2025.05.28 |
[강화학습-5] 몬테카를로 방법 (Monte Carlo Methods) (0) | 2025.05.28 |
[강화학습-3] 정책과 가치함수 (0) | 2025.05.28 |
[강화학습-2] 마르코프 결정 과정(MDP) (0) | 2025.05.28 |
Comments