Nello pseudocodice di carta MuZero , hanno la seguente riga di codice:

hidden_state = tf.scale_gradient(hidden_state, 0.5) 

Che cosa fa? Perché è presente?

Ho cercato tf.scale_gradient e “non esiste in tensorflow. E, a differenza di scalar_loss, sembra che non lo abbiano definito nel proprio codice.

Per contesto, ecco lintera funzione:

def update_weights(optimizer: tf.train.Optimizer, network: Network, batch, weight_decay: float): loss = 0 for image, actions, targets in batch: # Initial step, from the real observation. value, reward, policy_logits, hidden_state = network.initial_inference( image) predictions = [(1.0, value, reward, policy_logits)] # Recurrent steps, from action and previous hidden state. for action in actions: value, reward, policy_logits, hidden_state = network.recurrent_inference( hidden_state, action) predictions.append((1.0 / len(actions), value, reward, policy_logits)) # THIS LINE HERE hidden_state = tf.scale_gradient(hidden_state, 0.5) for prediction, target in zip(predictions, targets): gradient_scale, value, reward, policy_logits = prediction target_value, target_reward, target_policy = target l = ( scalar_loss(value, target_value) + scalar_loss(reward, target_reward) + tf.nn.softmax_cross_entropy_with_logits( logits=policy_logits, labels=target_policy)) # AND AGAIN HERE loss += tf.scale_gradient(l, gradient_scale) for weights in network.get_weights(): loss += weight_decay * tf.nn.l2_loss(weights) optimizer.minimize(loss) 

Che cosa fa il ridimensionamento del gradiente e perché lo fanno lì?

Commenti

  • Ho cercato tf.scale_gradient() sul sito web di TensorFlow '. Come mostrano i risultati , non viene fuori nulla. Deve essere una funzione delle vecchie versioni di TF che ora è stata abbandonata. Di sicuro, ' non è più disponibile in TF 2.0.
  • Non ' non ci credo ' è mai stata una funzione in tensorflow, data la mancanza di risultati da una ricerca su Google.

Risposta

Autore del documento qui – Mi è sfuggito che questa apparentemente non è una funzione TensorFlow, è equivalente a Sonnet s scale_gradient o la seguente funzione:

 def scale_gradient(tensor, scale): """Scales the gradient for the backward pass.""" return tensor * scale + tf.stop_gradient(tensor) * (1 - scale)  

Commenti

Risposta

Dato che il suo pseudonimo? (poiché non è in TF 2.0) sceglierei gradiente di ritaglio o normalizzazione batch ( “ridimensionamento delle funzioni di attivazione”)

Commenti

  • Dal link che hai fornito, sembra che questo sarebbe probabilmente il ridimensionamento della norma del gradiente, che si traduce in impostazione di un parametro clipnorm nellottimizzatore. Tuttavia, nel codice usano due volte il ridimensionamento del gradiente nel codice con valori diversi ogni volta. Il parametro clipnorm non mi consente di farlo. Sai come potrei?
  • Inoltre, lo stato nascosto di un modello non ' sembra qualcosa che dovrebbe essere ritagliato. (Non ' t capisco perché il ritaglio sarebbe utile.) Spiegare cosa farebbe il ritaglio del gradiente sarebbe estremamente utile per me per essere certo che la tua risposta sia corretta.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *