정책 그라디언트와 REINFORCE

Python으로 배우는 Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

DQN과의 차이점

  • REINFORCE: 몬테카를로, TD 아님
    • 매 스텝이 아니라 에피소드 끝에 업데이트
    • 여러 에피소드 후에 업데이트 가능
  • 가치 함수 사용 안 함
  • 타깃 네트워크 없음
  • 엡실론-탐욕 없음
  • 경험 리플레이 없음

Q 함수, 경험 리플레이, 엡실론 탐욕, 고정 Q-타깃을 나타내는 이미지가 겹쳐 있고 모두 취소 표시가 되어 있음

Python으로 배우는 Deep Reinforcement Learning

REINFORCE 학습 루프 구조

 

for episode in range(num_episodes):

# 1. 에피소드 초기화
while not done:
# 2. 행동 선택
# 3. 행동 실행, 다음 상태와 보상 획득
# 4. (할인) 보상을 반환에 누적
# 5. 상태 업데이트
# 6. 손실 계산
# 7. 경사하강으로 정책 네트워크 업데이트
Python으로 배우는 Deep Reinforcement Learning

행동 선택

 

from torch.distributions import Categorical

def select_action(policy_network, state):
  action_probs = policy_network(state)

action_dist = Categorical(action_probs)
action = action_dist.sample()
log_prob = action_dist.log_prob(action)
return action.item(), log_prob.reshape(1)
action, log_prob = select_action( policy_network, state)

 

  • 네트워크에서 확률 얻기
  • 행동 하나 샘플링
  • 행동과 해당 로그확률 반환

 

샘플된 행동 인덱스: 1
샘플된 행동의 로그확률: -1.38
Python으로 배우는 Deep Reinforcement Learning

손실 계산

 

정책 그라디언트 정리를 기억하십시오:

정책 그라디언트 정리: J(pi_theta)의 그라디언트는 pi_theta를 따르는 궤적 tau에 대한 기댓값으로, 에피소드 반환과 궤적의 모든 단계에서 로그 행동확률의 그라디언트 합의 곱으로 표현됨.

에피소드에 대한 REINFORCE 손실 함수: L(theta)는 에피소드 반환에 로그 행동확률의 합을 곱하고 음수 부호를 붙인 값.

Python에서는:

  • $R_{\tau}$ → episode_return
  • $\log\pi_\theta(a_t|s_t)$ 벡터 → episode_log_probs
loss = -episode_return * episode_log_probs.sum()
Python으로 배우는 Deep Reinforcement Learning

REINFORCE 학습 루프

for episode in range(50):
  state, info = env.reset(); done = False; step = 0;
  episode_log_probs = torch.tensor([])

R = 0
while not done: step += 1 action, log_prob = select_action(policy_network, state)
next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated
R += (gamma ** step) * reward
episode_log_probs = torch.cat((episode_log_probs, log_prob))
state = next_state
loss = - R * episode_log_probs.sum()
optimizer.zero_grad(); loss.backward(); optimizer.step()
Python으로 배우는 Deep Reinforcement Learning

연습해 봅시다!

Python으로 배우는 Deep Reinforcement Learning

Preparing Video For Download...