I MuZero-papir-pseudokode har de følgende linje kode:

hidden_state = tf.scale_gradient(hidden_state, 0.5) 

Hvad gør dette? Hvorfor er det der?

Jeg har søgt på tf.scale_gradient, og det findes ikke i tensorflow. Og i modsætning til scalar_loss synes de ikke at have defineret det i deres egen kode.

For kontekst er her hele funktionen:

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) 

Hvad gør skalering af gradienten, og hvorfor gør de det der?

Kommentarer

  • Jeg har søgt på tf.scale_gradient() på TensorFlow ' s hjemmeside. Som resultaterne viser , kommer der ikke noget ud. Det skal være en funktion fra gamle TF-versioner, der nu er opgivet. Det er bestemt ' ikke mere tilgængeligt i TF 2.0.
  • Jeg tror ikke ' t tror det ' har nogensinde været en funktion i tensorflow i betragtning af manglen på resultater fra en Google-søgning efter det.

Svar

Forfatteren af papiret her – Jeg savnede, at dette tilsyneladende ikke er en TensorFlow-funktion, det svarer til Sonnet “s scale_gradient eller følgende funktion:

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

Kommentarer

Svar

Givet at dens pseudekode? (da det ikke er i TF 2.0) ville jeg gå med gradientklip eller batchnormalisering ( “skalering af aktiveringsfunktioner”)

Kommentarer

  • Fra det link, du har angivet, ser det ud til, at dette sandsynligvis ville være gradueringsnormskalering, som oversættes til indstilling af en clipnorm -parameter i optimeringsværktøjet. Men i koden bruger de gradientskalering to gange i koden med forskellige værdier hver gang. clipnorm -parameteren tillader ikke mig at gøre dette. Ved du, hvordan jeg kunne?
  • Desuden ser en skjult tilstand af en model ikke ' ud som noget, der skal klippes. (Jeg forstår ikke ' hvorfor klipning overhovedet vil være nyttigt.) At forklare, hvad gradientklipning ville gøre der, ville være yderst nyttigt for mig at være sikker på, at dit svar er korrekt.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *