Per quanto ne so, le due formule che hai dato sono praticamente l'inizializzazione standard. Avevo fatto una revisione della letteratura qualche tempo fa, l'ho copiata di seguito se interessata.
[1] risponde alla domanda:
In primo luogo, i pesi non dovrebbero essere impostati su zero per interrompere la simmetria durante la riprogrammazione:
I bias possono generalmente essere inizializzati a zero, ma i pesi devono essere inizializzati con cura per rompere la simmetria tra le unità nascoste dello stesso livello. Poiché unità di uscita diverse ricevono segnali di gradiente diversi, questo problema di rottura della simmetria non riguarda i pesi di uscita (nelle unità di uscita), che pertanto possono anche essere impostati su zero.
Alcune strategie di inizializzazione:
- [2] e [3] raccomandano il ridimensionamento dall'inverso della radice quadrata del fan-in
- Glorot e Bengio (2010) e i Deep Learning Tutorials usano una combinazione di fan-in e fan-out:
- r = 6fan-in + fan-out---------√
- r = 4 6fan-in + fan-out---------√
- nel caso degli RBM, un gaussiano a media zero con una piccola deviazione standard intorno a 0,1 o 0,01 funziona bene (Hinton, 2010) per inizializzare i pesi.
- Inizializzazione della matrice casuale ortogonale, ovvero
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
utilizzare u
come matrice di inizializzazione.
Inoltre, la pre-formazione senza supervisione può aiutare in alcune situazioni:
Una scelta importante è se si dovrebbe usare la pre-formazione senza supervisione (e quale algoritmo di apprendimento delle caratteristiche senza supervisione usare) per inizializzare i parametri. Nella maggior parte delle impostazioni abbiamo trovato un pre-allenamento senza supervisione per aiutare e molto raramente a far male, ma ovviamente ciò implica un tempo di allenamento aggiuntivo e ulteriori iperparametri.
Alcune biblioteche ANN hanno anche alcuni elenchi interessanti, ad esempio Lasagne :
Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b]) Glorot weight initialization.
GlorotNormal([gain, c01b]) Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b]) He weight initialization.
HeNormal([gain, c01b]) He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain]) Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.
[1] Bengio, Yoshua. " Consigli pratici per la formazione graduale di architetture profonde. " Reti neurali: trucchi del mestiere. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB e Muller, K. (1998a). Backprop efficiente. In Neural Networks, Tricks of the Trade .
[3] Glorot, Xavier e Yoshua Bengio. " Comprendere la difficoltà di formare reti neurali profonde feedforward ." Conferenza internazionale su intelligenza artificiale e statistica. 2010.