Utilizza la differenziazione automatica. Dove utilizza la regola della catena e andare indietro nel grafico assegnando i gradienti.
Diciamo che abbiamo un tensore C Questo tensore ha fatto dopo serie di operazioni Diciamo aggiungendo, moltiplicando, passando attraverso una non linearità ecc.
Quindi se questa C dipende da un insieme di tensori chiamati Xk, dobbiamo ottenere i gradienti
Tensorflow segue sempre il percorso delle operazioni. Intendo il comportamento sequenziale dei nodi e il modo in cui i dati scorrono tra loro. Questo è fatto dal grafico
Se abbiamo bisogno di ottenere le derivate del costo rispetto agli input X, ciò che farà prima è caricare il percorso dall'input x al costo estendendo il grafico.
Quindi inizia nell'ordine dei fiumi. Quindi distribuire i gradienti con la regola della catena. (Come per la backpropagation)
Ad ogni modo se leggi i codici sorgente appartengono a tf.gradients () puoi scoprire che tensorflow ha fatto questa parte di distribuzione del gradiente in un modo carino.
Mentre il backtracking tf interagisce con il grafico, nel backword pass TF incontrerà diversi nodi All'interno di questi nodi ci sono operazioni che chiamiamo (ops) matmal, softmax, relu, batch_normalization ecc. Quindi ciò che facciamo fa caricare automaticamente queste operazioni nel grafico
Questo nuovo nodo compone la derivata parziale delle operazioni. get_gradient ()
Parliamo un po 'di questi nodi appena aggiunti
All'interno di questi nodi aggiungeremo 2 cose 1. Derivata calcolata più facilmente) 2.Inoltre gli input all'opp di codifica nel passaggio in avanti
Quindi, secondo la regola della catena, possiamo calcolare
Quindi è così come un'API di backword
Quindi tensorflow pensa sempre all'ordine del grafico per fare una differenziazione automatica
Quindi, come sappiamo, abbiamo bisogno di variabili forward pass per calcolare i gradienti, quindi abbiamo bisogno di memorizzare valori intermedi anche nei tensori, questo può ridurre la memoria. Per molte operazioni, so come calcolare i gradienti e distribuirli.