O ile wiem, dwie podane formuły są w zasadzie standardową inicjalizacją. I uczynił Przegląd literatury jakiś czas temu, skopiowałem go poniżej, jeśli zainteresowany.
[1] odpowiada na pytanie:
Po pierwsze, wagi nie powinny być ustawione na zera, aby złamać symetrię podczas wstecznego propagowania:
Białości można ogólnie inicjalizować do zera, ale wagi należy inicjować ostrożnie, aby przełamać symetrię między ukrytymi jednostkami tej samej warstwy. Ponieważ różne jednostki wyjściowe odbierają różne sygnały gradientu, ten problem łamania symetrii nie dotyczy wag wyjściowych (w jednostkach wyjściowych), które w związku z tym można również ustawić na zero.
Niektóre strategie inicjalizacji:
- [2] i [3] zalecają skalowanie przez odwrotność pierwiastka kwadratowego wachlarza
- Glorot i Bengio (2010) oraz samouczki Deep Learning wykorzystują kombinację włączania i wyłączania wentylatora:
- dla jednostek sigmoidalnych: przykład Uniforma (-r, r) z (fan-in to liczba wejścia urządzenia).r=6fan-in+fan-out−−−−−−−−−√
- dla hiperbolicznych jednostek stycznych: próbkuj Uniform (-r, r) za pomocą (fan-in to liczba wejść urządzenia).r=46fan-in+fan-out−−−−−−−−−√
- w przypadku KMS, zero-średnia Gaussa z małym odchyleniem standardowym około 0,1 lub 0,01 działa dobrze (Hinton, 2010) do inicjalizacji wag.
- Ortogonalna inicjalizacja losowa macierzy, tj.
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
Następnie użycie u
jako macierzy inicjalizacji.
Ponadto, w niektórych sytuacjach pomocne może być bezobsługowe szkolenie wstępne:
Ważnym wyborem jest to, czy w celu zainicjowania parametrów należy zastosować bezobsługowy trening wstępny (i który algorytm uczenia się funkcji bez nadzoru należy użyć). W większości ustawień znaleźliśmy bez nadzoru trening wstępny, który pomaga i bardzo rzadko boli, ale oczywiście oznacza to dodatkowy czas treningu i dodatkowe hiper-parametry.
Niektóre biblioteki ANN mają również kilka interesujących list, np. 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, Joshua. „ Praktyczne zalecenia dotyczące gradientowego szkolenia głębokich architektur. ” Sieci neuronowe: Triki handlu. Springer Berlin Heidelberg, 2012. 437-478.
[2] LeCun, Y., Bottou, L., Orr, GB, i Muller, K. (1998a). Wydajny backprop. W sieciach neuronowych Tricks of the Trade .
[3] Glorot, Xavier i Yoshua Bengio. „ Zrozumienie trudności szkolenia głębokich sieci neuronowych ze sprzężeniem zwrotnym ”. Międzynarodowa konferencja na temat sztucznej inteligencji i statystyki. 2010 r.