정책 경사 소개

Python으로 배우는 Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

DRL의 정책 기반 방법 소개

 

Q-러닝:

  • 행동가치함수 Q 학습

Q-네트워크: 상태 입력, 행동 가치 출력

  • 정책: 가치가 가장 큰 행동 선택

 

정책 학습:

  • 정책을 직접 학습

정책 네트워크: 상태 입력, 행동 확률 출력

Python으로 배우는 Deep Reinforcement Learning

정책 학습

 

  • 확률적일 수 있음
  • 연속 공간 처리
  • 목표를 직접 최적화
  • 분산이 큼
  • 샘플 효율 낮음

 

  • 딥 Q-러닝: 정책은 결정적

 

$\pi_\theta(a_t | s_t)$:

  • 상태 $s_t$에서 $a_t$의 확률분포로서:
    • $a_t$, $s_t$: 단계 $t$의 행동, 상태
    • $\theta$: 정책 매개변수(네트워크 가중치)
Python으로 배우는 Deep Reinforcement Learning

정책 네트워크(이산 행동)

class PolicyNetwork(nn.Module):
  def __init__(self, state_size, action_size):
    super(PolicyNetwork, self).__init__()
    self.fc1 = nn.Linear(state_size, 64)
    self.fc2 = nn.Linear(64, 64)
    self.fc3 = nn.Linear(64, action_size)

  def forward(self, state):
    x = torch.relu(self.fc1(torch.tensor(state)))
    x = torch.relu(self.fc2(x))
    action_probs = torch.softmax(self.fc3(x), dim=-1)
    return action_probs

action_probs = policy_network(state) print('Action probabilities:', action_probs)
Action probabilities: tensor([0.21, 0.02, 0.74, 0.03])

네 가지 가능한 행동을 인덱스와 확률에 매핑한 표. 'up'은 인덱스 0, 확률 0.21; 'right'는 인덱스 1, 확률 0.02; 'down'은 인덱스 2, 확률 0.74; 'left'는 인덱스 3, 확률 0.03.

action_dist = (
    torch.distributions.Categorical(action_probs))

action = action_dist.sample()
Python으로 배우는 Deep Reinforcement Learning

목표 함수

 

  • 정책은 기대 보상을 최대화해야 함

    • 에이전트가 $\pi_\theta$를 따른다고 가정
    • 정책 매개변수 $\theta$를 최적화
  • 목표 함수:

수식: J(pi theta) = pi theta를 따르는 경로 tau에 대한 기댓값 E[R_tau], 여기서 R_tau는 에피소드 보상 합

 

  • $J$를 최대화하려면: $\theta$에 대한 그래디언트가 필요

J(pi_theta)의 theta에 대한 그래디언트

Python으로 배우는 Deep Reinforcement Learning

목표 함수

 

  • 정책은 기대 보상을 최대화해야 함

    • 에이전트가 $\pi_\theta$를 따른다고 가정
    • 정책 매개변수 $\theta$를 최적화
  • 목표 함수:

J(pi theta)의 정의, 이전 슬라이드와 동일

 

  • $J$ 최대화를 위해: $\theta$에 대한 그래디언트 필요

J(pi_theta)의 theta에 대한 그래디언트를 정책 경사라 함

Python으로 배우는 Deep Reinforcement Learning

정책 경사 정리

 

  • $\nabla_\theta J(\pi_\theta)$에 대한 계산 가능한 표현 제공
  • $\pi_\theta$를 따르는 궤적에 대한 기댓값
    • 궤적을 수집하고 리턴을 관찰

 

정책 경사 정리: J(pi_theta)의 theta에 대한 그래디언트는 pi_theta를 따르는 궤적 tau에 대한 기댓값으로 ...

Python으로 배우는 Deep Reinforcement Learning

정책 경사 정리

 

  • $\nabla_\theta J(\pi_\theta)$에 대한 계산 가능한 표현 제공
  • $\pi_\theta$를 따르는 궤적에 대한 기댓값
    • 궤적을 수집하고 리턴을 관찰
  • 각 궤적에 대해: 리턴 $R_\tau$ 고려

 

정책 경사 정리: J(pi_theta)의 theta에 대한 그래디언트는 에피소드 리턴에 ...를 곱한 값의 기댓값

Python으로 배우는 Deep Reinforcement Learning

정책 경사 정리

 

  • $\nabla_\theta J(\pi_\theta)$에 대한 계산 가능한 표현 제공
  • $\pi_\theta$를 따르는 궤적에 대한 기댓값
    • 궤적을 수집하고 리턴을 관찰
  • 각 궤적에 대해: 리턴 $R_\tau$
  • 선택된 행동의 로그확률 기울기의 합과 곱함
  • 직관: '좋은' 에피소드에서 수행한 모든 행동의 확률이 커지도록 $\theta$를 미세 조정

 

정책 경사 정리: J(pi_theta)의 theta에 대한 그래디언트는 에피소드 리턴과 궤적 내 모든 행동에 대한 로그 행동확률 그래디언트의 합의 곱의 기댓값

Python으로 배우는 Deep Reinforcement Learning

 

퐁(Pong) 게임을 나타내는 GIF

Python으로 배우는 Deep Reinforcement Learning

연습해 봅시다!

Python으로 배우는 Deep Reinforcement Learning

Preparing Video For Download...