La discesa a gradiente non funziona esattamente come hai suggerito, ma può verificarsi un problema simile.
Non calcoliamo la perdita media dal batch, calcoliamo i gradienti medi della funzione di perdita. I gradienti sono la derivata della perdita rispetto al peso e in una rete neurale il gradiente per un peso dipende dagli input di quello specifico esempio e dipende anche da molti altri pesi nel modello.
Se il tuo modello ha 5 pesi e hai una dimensione mini-batch di 2, potresti ottenere questo:
gradienti = ( 1.5 , - 2.0 , 1.1 , 0.4 , - 0.9 )
gradienti = ( 1.2 , 2.3 , - 1.1 , - 0.8 , - 0.7 )
( 1.35 , 0.15 , 0 , - 0.2 , - 0.8 )
0
modifica in risposta ai commenti:
KLiowj
∂L∂wj= 1KΣKi = 1∂Lio∂wj
Il codice tutorial collegato nei commenti utilizza Tensorflow per ridurre al minimo la perdita media.
1KΣKi = 1Lio
Per minimizzare ciò, calcola i gradienti della perdita media rispetto a ciascun peso e usa la pendenza-gradiente per aggiornare i pesi:
∂L∂wj= ∂∂wj1KΣKi = 1Lio
La differenziazione può essere introdotta all'interno della somma, quindi è uguale all'espressione dell'approccio nel mio esempio.
∂∂wj1KΣKi = 1Lio= 1KΣKi = 1∂Lio∂wj