[1] répond à la question:
Tout d'abord, les poids ne doivent pas être réglés sur des zéros afin de casser la symétrie lors de la propagation en arrière:
Les biais peuvent généralement être initialisés à zéro, mais les poids doivent être initialisés avec précaution pour rompre la symétrie entre les unités masquées du même calque. Etant donné que les différentes unités de sortie reçoivent des signaux de gradient différents, ce problème de rupture de symétrie ne concerne pas les poids de sortie (dans les unités de sortie), qui peuvent donc également être mis à zéro.
Quelques stratégies d'initialisation:
- [2] and [3] recommandent une mise à l'échelle par l'inverse de la racine carrée du fan-in
- Glorot et Bengio (2010) et les didacticiels Deep Learning utilisent une combinaison de fan-in et de fan-out:
- pour les unités de tangente hyperbolique: échantillonnez a Uniforme (-r, r) avec (fan-in est le nombre d'entrées de l'unité).r = 6fan-in + fan-out---------√
- pour les unités sigmoïdes: échantillon a Uniforme (-r, r) avec (fan-in est le nombre d'entrées de l'unité).r = 4 6fan-in + fan-out---------√
- dans le cas des RBM, une gaussienne à moyenne nulle avec un faible écart type autour de 0,1 ou 0,01 fonctionne bien (Hinton, 2010) pour initialiser les poids.
- Initialisation orthogonale de la matrice aléatoire, c’est-à-dire l’
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
utiliser ensuite u
comme matrice d’initialisation.
De plus, une pré-formation non supervisée peut aider dans certaines situations:
Un choix important consiste à utiliser ou non une formation préalable non supervisée (et l'algorithme d'apprentissage des fonctions non supervisé à utiliser) afin d'initialiser les paramètres. Dans la plupart des contextes, nous avons constaté que le pré-entraînement non supervisé aidait et faisait très rarement mal, mais cela impliquait bien sûr du temps d'entraînement supplémentaire et des hyper-paramètres supplémentaires.
Certaines bibliothèques ANN ont aussi des listes intéressantes, par exemple 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. " Recommandations pratiques pour la formation d'architectures profondes basée sur le gradient. " Réseaux de neurones: astuces du métier. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB et Muller, K. (1998a). Backprop efficace Dans les réseaux de neurones, astuces du commerce .
[3] Glorot, Xavier et Yoshua Bengio. " Comprendre la difficulté de former des réseaux de neurones à feedforward profond ." Conférence internationale sur l'intelligence artificielle et les statistiques. 2010.