Cibles Q figées
Vous vous préparez à entraîner votre Lunar Lander avec des cibles Q figées. Comme préalable, vous devez instancier à la fois le réseau en ligne (qui choisit l'action) et le réseau cible (utilisé pour le calcul de la cible TD).
Vous devez aussi implémenter une fonction update_target_network que vous pourrez appeler à chaque étape d'entraînement. Le réseau cible n'est pas mis à jour par descente de gradient; à la place, update_target_network rapproche légèrement ses poids de ceux du Q-network, ce qui assure qu'il demeure assez stable dans le temps.
Notez que, pour cet exercice uniquement, vous utilisez un très petit réseau afin de pouvoir afficher et inspecter facilement son dictionnaire d'état. Il n'a qu'une seule couche cachée de taille deux; son espace d'actions et son espace d'états sont aussi de dimension 2.
La fonction print_state_dict() est disponible dans votre environnement pour afficher le dictionnaire d'état.
Cette activité fait partie du cours
Deep Reinforcement Learning en Python
Instructions de l’exercice
- Obtenez le
.state_dict()pour les réseaux cible et en ligne. - Mettez à jour le dictionnaire d'état du réseau cible en prenant la moyenne pondérée entre les paramètres du réseau en ligne et ceux du réseau cible, en utilisant
taucomme poids pour le réseau en ligne. - Rechargez le dictionnaire d'état mis à jour dans le réseau cible.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
def update_target_network(target_network, online_network, tau):
# Obtain the state dicts for both networks
target_net_state_dict = ____
online_net_state_dict = ____
for key in online_net_state_dict:
# Calculate the updated state dict for the target network
target_net_state_dict[key] = (online_net_state_dict[____] * ____ + target_net_state_dict[____] * ____)
# Load the updated state dict into the target network
target_network.____
return None
print("online network weights:", print_state_dict(online_network))
print("target network weights (pre-update):", print_state_dict(target_network))
update_target_network(target_network, online_network, .001)
print("target network weights (post-update):", print_state_dict(target_network))