A MuZero papír álkódban a következő kódsorral rendelkeznek:

hidden_state = tf.scale_gradient(hidden_state, 0.5) 

Mit csinál ez? Miért van ott?

Megkerestem a következőt: tf.scale_gradient, és nem létezik a tensorflow-ban. És ellentétben a scalar_loss vel, úgy tűnik, hogy nem a saját kódjukban definiálták.

A kontextus szempontjából itt a teljes függvény:

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) 

Mit csinál a színátmenet méretezése, és miért csinálják ott?

megjegyzések

  • Megkerestem a következőt: tf.scale_gradient() a TensorFlow ' webhelyen. Amint az eredmények mutatják , semmi sem derül ki. A régi TF verziók függvényének kell lennie, amelyet most elvetettek. Az biztos, hogy ' már nem érhető el a TF 2.0-ban.
  • Nem hiszem, hogy ' ezek valaha is függvények voltak a tensorflow-ban, tekintettel arra, hogy nincsenek rá eredmények a Google kereséséből.

Válasz

A cikk írója – hiányzott, hogy ez nyilvánvalóan nem egy TensorFlow függvény, ez egyenértékű a Sonnet s scale_gradient , vagy a következő függvény:

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

Megjegyzések

  • Nagyon köszönöm a választ! Ha hajlandó lenne megnézni a következőt: stackoverflow.com/q/60234530 (egy másik MuZero kérdés), nagyra értékelném.

Válasz

Tekintve, hogy álkódja? (mivel nem a TF 2.0-ban van) gradiens nyírással vagy kötegelt normalizálással ( “az aktiválási függvények méretezése”)

Megjegyzések

  • A megadott linkről úgy tűnik, hogy ez valószínűleg gradiens normál méretezés lenne, ami clipnorm paraméter beállítása az optimalizálóban. A kódban azonban kétszer használnak gradiens méretezést a kódban, minden alkalommal más-más értékekkel. A clipnorm paraméter nem engedi ezt megtenni. Tudod, hogy tudnám?
  • Ezenkívül a modell rejtett állapota nem ' tűnik olyan dolognak, amelyet le kellene vágni. (Nem értem, <

miért értem, hogy egyáltalán miért lenne hasznos a nyírás.) Nagyon hasznos lenne elmagyaráznom, hogy mit is tenne a gradiens vágás, hogy biztos lehessek abban, hogy a válaszod helyes.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük