logo

Q 학습

Off-Policy 학습

  • On-Policy 학습: 행동 정책 = 학습 정책(예: SARSA)
    • 실제로 한 행동으로 학습
    • 행동 자체가 비용이 클 경우 문제
    • 입실론(탐색을 하는 비율) 자체가 행동의 가치에 영향
  • Off-Policy 학습: 행동 정책 ≠ 학습 정책
    • 다른 정책으로 한 행동으로 학습
    • 데이터를 재활용할 수 있음

중요도 샘플링 importance sampling

  • 관심 있는 목표(target) 확률 분포 π(x)에서 기대값을 계산하고자 할 때 다른 제안(proposal) 분포 μ(x)를 사용하여 샘플을 생성
EXπ[f(X)]=Xπ(X)f(X)=Xμ(X)μ(X)π(X)f(X)=EXμ[μ(X)π(X)f(X)]
  • 중요도 가중치(Importance Weights): π(X)/μ(X)
    • 각 분포에서 확률 비
  • 비현실적인 분포에서 직접 샘플링하는 대신, 샘플링이 더 쉬운 다른 분포를 사용하여 기대값을 계산하는 데도 유용

중요도 샘플링을 이용한 Off-Policy 학습

  • 행동 정책 μ(X), 학습 정책 π(X)인 경우 목표에 중요도 샘플링을 적용하여 Off-Policy 학습을 할 수 있음
  • SARSA에 적용할 경우:
Q(St,At)Q(St,At)+α[μ(AtSt)π(AtSt)(Rt+1+γQ(St+1,At+1))Q(St,At)]
  • 행동 정책에서 확률이 0인데 학습 정책에서는 +인 경우에는 쓸 수 없음

Q 학습

  • SARSA: t+1에 실제로 한 행동 At+1를 사용(On-Policy)
Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]
  • Q-Learing: t+1에 가장 가치가 높은 행동 a를 했다고 가정(Off-Policy)
Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)]
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

  • 최대화 편향을 방지하기 위해 Q1Q2를 번갈아 가며 추정
Q1(St,At)Q1(St,At)+α[Rt+1+γQ2(St+1,argamaxQ1(St+1,a))Q1(St,At)]
  • 가치가 가장 큰 행동 aQ1으로 고르고, 그 행동의 가치는 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

퀴즈

문제 1 / 7맞음: 0힌트: 0틀림: 0채점중: 0남음: 7

Off-Policy 학습의 설명으로 가장 알맞은 것은 무엇입니까?

  • 행동 정책과 학습 정책이 다르며, 다른 정책으로 한 행동으로 학습한다.
  • 행동 정책과 학습 정책이 항상 같아야 한다.
  • 전이 함수를 완전히 알고 있을 때만 사용할 수 있다.
  • 탐색 비율이 행동 가치에 영향을 주지 않는다.

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
제어 문제