Deep Reinforcement Learning en Python
Timothée Carayol
Principal Machine Learning Engineer, Komment
Limites de REINFORCE :
Les méthodes Actor Critic ajoutent un réseau critique, permettant l'apprentissage par différence temporelle (TD)


Réseau « actor » :
Réseau « critic » :

class Critic(nn.Module): def __init__(self, state_size): super(Critic, self).__init__() self.fc1 = nn.Linear(state_size, 64) self.fc2 = nn.Linear(64, 1)def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) value = self.fc2(x) return valuecritic_network = Critic(8)







def calculate_losses(critic_network, action_log_prob, reward, state, next_state, done):# Le critic fournit les estimations de valeur d'état value = critic_network(state)next_value = critic_network(next_state)td_target = (reward + gamma * next_value * (1-done))td_error = td_target - value# Appliquer les formules des pertes actor et critic actor_loss = -action_log_prob * td_error.detach()critic_loss = td_error ** 2return actor_loss, critic_loss
.detach() pour empêcher la propagation du gradient vers les poids du criticfor episode in range(10): state, info = env.reset() done = False while not done:# Sélectionner une action action, action_log_prob = select_action(actor, state)next_state, reward, terminated, truncated, _ = env.step(action) done = terminated or truncated# Calculer les pertes actor_loss, critic_loss = calculate_losses(critic, action_log_prob, reward, state, next_state, done)# Mettre à jour l'actor actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()# Mettre à jour le critic critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()state = next_state
Deep Reinforcement Learning en Python