Gli aggiornamenti dei parametri della funzione di Theano prendono un elenco di coppie, in cui ogni coppia specifica una variabile simbolica condivisa e la sua nuova espressione dopo il calcolo degli output di funzione. Mi chiedo se ci sia un ordine per la procedura di aggiornamento. L'ordine è importante se la nuova espressione di due variabili simboliche dipende l'una dall'altra e la procedura di aggiornamento utilizzerà la variabile simbolica aggiornata per l'aggiornamento di altre variabili simboliche che si basano su di essa. Per esempi, questo elenco potrebbe assomiglia a questo,L'ordine di aggiornamento dell'elenco di aggiornamento della funzione theano
[(a, b + a), (b, b+ 1)]
ho scritto qualche funzione per testare questo. Il risultato sembra indicare che utilizzare sempre il valore precedente nell'espressione (secondo termine della coppia) per aggiornare la variabile simbolica nel primo termine, cioè
a_new = b_old + a_old
b_new = b_old + 1
È questo un comportamento definito?
Tuttavia ho trovato l'attuazione di slancio here, Qui ci sono i codici per generare la lista di aggiornamento e param_update variabili simboliche
param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)
updates += [(param, param - learning_rate*param_update),
(param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param))
Poi, nella prima iterazione, non verrà aggiornato il parametro, perché param_updates sono tutto a zero. A mio avviso, param_update dovrebbe essere prima aggiornato, e quindi usarlo per aggiornare il parametro.