Domanda

Modifica: la domanda è stata modificata per riflettere meglio ciò che ho imparato dopo aver posto la domanda originale.

Ho implementato l'obiettivo Clipd PPO-clip come spiegato qui: https://spinningup.openai.com/en/latest/algorithms/ppo.html

Fondamentalmente ho usato una rete di attore fittizio per trovare la nuova probabilità di azione senza addestrare la rete di attore locale.

"""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]

Quindi ho elaborato il rapporto tra le probabilità di azione e ho implementato le parti di ritaglio PPO dell'algoritmo:

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)

Il codice completo è qui (per favore scusa qualche lingua grosso nei commenti): https://github.com/nyck33/openai_my_implements/blob/master/cartpole/my_ppo_cartpole.py

Come posso adattarlo a un problema di spazio d'azione continuo come Pendulum V0.
Aggiornamento: ho appena letto che la distribuzione delle azioni è una distribuzione normale o gaussiana qui: Reddit Distribuzione normale

Sembra strano poiché ho immaginato che la curva delle azioni fosse distorta in un modo o nell'altro a seconda che un particolare stato avrebbe ottenuto risultati migliori con determinate tendenze di azione.

AGGIORNAMENTO: L'ho trovato sul sito di base stabile per PPO:

return probability distribution

Da questo URI: Spiegazione di PPO

Ho anche visto che la sezione 13.7 nel libro RL di Sutton sembra essere un must per questo tipo di problema in quanto la sezione è intitolata: Parametrizzazione delle politiche per azioni continue.

Inoltre, ho anche imparato nel processo di ricerca di un'implementazione leggibile che GAE (vantaggio) è normalizzato in modo da rendere probabilmente un'implementazione più robusta contro le fluttuazioni selvagge. Penso anche che la mia implementazione sia incompleta, cioè. mancano altri componenti rispetto alla "soluzione" di Pytorch a cui mi sono collegato nella risposta.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top