Q 학습
Off-Policy 학습
- On-Policy 학습: 행동 정책 = 학습 정책(예: SARSA)
- 실제로 한 행동으로 학습
- 행동 자체가 비용이 클 경우 문제
- 입실론(탐색을 하는 비율) 자체가 행동의 가치에 영향
- Off-Policy 학습: 행동 정책 ≠ 학습 정책
- 다른 정책으로 한 행동으로 학습
- 데이터를 재활용할 수 있음
중요도 샘플링 importance sampling
- 관심 있는 목표(target) 확률 분포 π(x)에서 기대값을 계산하고자 할 때 다른 제안(proposal) 분포 μ(x)를 사용하여 샘플을 생성
- 중요도 가중치(Importance Weights): π(X)/μ(X)
- 각 분포에서 확률 비
- 비현실적인 분포에서 직접 샘플링하는 대신, 샘플링이 더 쉬운 다른 분포를 사용하여 기대값을 계산하는 데도 유용
중요도 샘플링을 이용한 Off-Policy 학습
- 행동 정책 μ(X), 학습 정책 π(X)인 경우 목표에 중요도 샘플링을 적용하여 Off-Policy 학습을 할 수 있음
- SARSA에 적용할 경우:
- 행동 정책에서 확률이 0인데 학습 정책에서는 +인 경우에는 쓸 수 없음
Q 학습
- SARSA: t+1에 실제로 한 행동 At+1를 사용(On-Policy)
- Q-Learing: t+1에 가장 가치가 높은 행동 a를 했다고 가정(Off-Policy)
class QLearning(SARSA):
def generate_episode(self, policy):
episode = []
state, info = self.env.reset()
done = False
while not done:
action = self.select_action(policy, state)
next_state, reward, done, _, _ = self.env.step(action)
episode.append((state, action, reward, next_state, done))
state = next_state
return episode
def update_value(self, episode):
for t in range(len(episode)):
state, action, reward, next_state, done = episode[t]
td_target = reward + (self.gamma * np.max(self.Q[next_state]) * (not done))
td_error = td_target - self.Q[state][action]
self.Q[state][action] += self.alpha * td_error
GLIE Greedy in the Limit with Infinite Exploration
- on-policy 강화학습 알고리즘이 최적 정책으로 수렴하기 위한 조건
- 조건 1: 모든 상태-행동이 무한히 탐색되어야 한다
- 조건 2: 정책은 탐욕 정책으로 수렴되어야 한다
- 입실론 탐욕법의 경우 입실론을 0으로 천천히 감쇠해야
- 너무 빠르게 감쇠하면 조건 1을 만족 못함
- 감쇠를 안하면 2를 만족 못함
- Q 학습과 같은 off-policy 알고리즘은 조건 1만 만족하면 됨(행동 정책과 대상 정책이 다르기 때문)
최대화 편향 maximization bias
- Q-Learing에는 다음 단계의 가치가 가장 큰 행동(최댓값의 추정치)을 알 필요가 있음
- 실제로는 추정치를 최대로 하는 행동(추정치의 최댓값)을 사용
- 즉, 추정치의 최댓값을 최댓값의 추정치로 사용
- 추정치가 크게 나오는 것은 큰 오차가 포함되어 있을 수 있음
- 따라서, 가치 함수를 과대추정하는 경향이 생김
이중 Q 학습 Double Q Learning
- 최대화 편향을 방지하기 위해 Q1과 Q2를 번갈아 가며 추정
- 가치가 가장 큰 행동 a는 Q1으로 고르고, 그 행동의 가치는 Q2로 계산
- Q1의 오차 때문에 행동을 잘못된 골라도 Q2에 같은 오차가 있지 않다면 가치는 제대로 추정될 것
class DoubleQLearning(QLearning):
def __init__(self, env, gamma=0.9, alpha=0.1, epsilon=0.1):
super().__init__(env, gamma, alpha, epsilon)
self.QA = np.zeros((env.observation_space.n, env.action_space.n))
self.QB = np.zeros((env.observation_space.n, env.action_space.n))
def update_value(self, episode):
for t in range(len(episode)):
state, action, reward, next_state, done = episode[t]
if np.random.rand() < 0.5:
Q1, Q2 = self.QA, self.QB
else:
Q1, Q2 = self.QB, self.QA
best_next_action = np.argmax(Q1[next_state])
td_target = reward + (self.gamma * Q2[next_state][best_next_action] * (not done))
td_error = td_target - Q1[state][action]
Q1[state][action] += self.alpha * td_error
self.Q = (self.QA + self.QB) / 2
퀴즈
Off-Policy 학습의 설명으로 가장 알맞은 것은 무엇입니까?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.