V papírovém pseudokódu MuZero mají následující řádek kódu:

hidden_state = tf.scale_gradient(hidden_state, 0.5) 

Co to dělá? Proč tam je?

Hledal jsem tf.scale_gradient a v tensorflow neexistuje. A na rozdíl od scalar_loss se nezdá, že by to definovali ve svém vlastním kódu.

V kontextu je zde celá funkce:

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) 

Co dělá škálování přechodu a proč to tam dělají?

Komentáře

  • Hledal jsem tf.scale_gradient() na webu TensorFlow ' s. Jak ukazují výsledky , nic nevyjde. Musí to být funkce ze starých verzí TF, která byla nyní opuštěna. Určitě ' již není k dispozici v TF 2.0.
  • Nevěřím tomu ' ' s byla někdy funkcí v tensorflow, vzhledem k tomu, že výsledky vyhledávání Google ji nevykazovaly.

Odpovědět

Autor článku zde – chybělo mi, že to zjevně není funkce TensorFlow, je to ekvivalent Sonnetova scale_gradient nebo následující funkce:

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

Komentáře

Odpověď

Vzhledem k tomu, že jde o kód pseude? (protože to není v TF 2.0) bych šel s přechodovým oříznutím nebo dávkovou normalizací ( „škálování aktivačních funkcí“)

Komentáře

  • Z odkazu, který jste poskytli, to vypadá, že by pravděpodobně šlo o přechodové normování měřítka, což znamená nastavení parametru clipnorm v optimalizátoru. V kódu však dvakrát použijí změnu měřítka přechodu v kódu s různými hodnotami. Parametr clipnorm mi to nedovolil. Víte, jak jsem mohl?
  • Skrytý stav modelu také nevypadá jako něco, co by mělo být oříznuto '. (Nerozumím ' tomu, proč by to ořezávání vůbec bylo užitečné.) Vysvětlení toho, co by tam ořezávání přechodů bylo, by pro mě bylo nesmírně užitečné mít jistotu, že vaše odpověď je správná.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *