Question

EDIT: La question a été modifiée pour mieux refléter ce que j'ai appris après avoir posé la question initiale.

J'ai implémenté l'objectif coupé PPO-CLIP comme expliqué ici: https://spinningup.openai.com/en/latest/algorithms/ppo.html

Fondamentalement, j'ai utilisé un réseau d'acteur factice pour trouver la nouvelle probabilité d'action sans former le réseau d'acteurs local.

"""use temp_actor to get new prob so we don't update the actual actor until
        we do the clip op"""
        curr_weights = self.actor.get_weights()
        self.temp_actor.set_weights(curr_weights)
        self.temp_actor.fit(state, advantages, epochs=1, verbose=0)
        new_policy = self.temp_actor.predict(state, batch_size=1).flatten()
        new_aprob = new_policy[action]

Ensuite, j'ai élaboré le rapport des probabilités d'action et mis en œuvre les parties d'écrêtage PPO de l'algorithme:

ratio = new_aprob / old_aprob
        # scale = min(ratio * advantages, K.clip(ratio, 1 - self.epsilon, 1 + self.epsilon) * advantages)
        no_clip = ratio * advantages
        clipped = np.clip(ratio, 1 - self.epsilon, 1 + self.epsilon) * advantages

        self.actor.fit(state, np.minimum(no_clip, clipped), epochs=1, verbose=0)

Le code complet est ici (veuillez excuser un langage grossier dans les commentaires): https://github.com/nyck33/openai_my_implements/blob/master/cartpole/my_ppo_cartpole.py

Comment puis-je l'adapter pour un problème d'espace d'action continu tel que Pendulum V0.
MISE À JOUR: Je viens de lire que la distribution des actions est une distribution normale ou gaussienne ici: Distribution normale de Reddit

Cela semble étrange car j'ai imaginé que la courbe des actions était biaisée d'une manière ou d'une autre selon qu'un état particulier obtiendrait de meilleurs résultats avec certaines tendances d'action.

MISE À JOUR: J'ai trouvé cela sur le site de lignes de base stable pour PPO:

return probability distribution

De cet uri: Explication PPO

J'ai également vu que la section 13.7 dans le livre RL de Sutton semble être une lecture incontournable pour ce type de problème car la section est intitulée: Paramétrisation de la politique pour les actions continues.

En outre, j'ai également appris en train de rechercher une implémentation lisible que GAE (avantage) est normalisée, ce qui rend probablement une implémentation plus robuste contre les fluctuations sauvages. Je pense également que mon implémentation est incomplète, c'est-à-dire. manquant d'autres composants par rapport à la "solution" pytorch à laquelle j'ai lié dans la réponse.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top