Dlaczego wagi sieci neuronowych powinny być inicjalizowane liczbami losowymi? [Zamknięte]

105

Próbuję zbudować sieć neuronową od podstaw. W całej literaturze dotyczącej sztucznej inteligencji panuje zgoda co do tego, że wagi powinny być inicjowane na liczbach losowych, aby sieć mogła szybciej się zbiegać.

Ale dlaczego początkowe wagi sieci neuronowych są inicjalizowane jako liczby losowe?

Czytałem gdzieś, że ma to na celu „złamanie symetrii”, a to sprawia, że ​​sieć neuronowa uczy się szybciej. W jaki sposób złamanie symetrii sprawia, że ​​uczy się szybciej?

Czy inicjalizacja wag na 0 nie byłaby lepszym pomysłem? W ten sposób wagi byłyby w stanie szybciej znaleźć swoje wartości (dodatnie lub ujemne)?

Czy za randomizacją wag stoi jakaś inna filozofia, poza nadzieją, że po zainicjowaniu będą one zbliżone do swoich optymalnych wartości?

Shayan RC
źródło
8
Wydaje się, że lepiej pasuje do Cross Validated .
Sycorax
2
Głosuję za zamknięciem tego pytania, ponieważ nie chodzi o programowanie zgodnie z definicją w centrum pomocy, ale o ogólną teorię i metodologię ML.
desertnaut

Odpowiedzi:

140

Przełamanie symetrii jest tutaj kluczowe, a nie ze względu na wydajność. Wyobraź sobie pierwsze 2 warstwy wielowarstwowego perceptronu (warstwy wejściowe i ukryte):

wprowadź opis obrazu tutaj

Podczas propagacji do przodu każda jednostka w warstwie ukrytej otrzymuje sygnał:

wprowadź opis obrazu tutaj

Oznacza to, że każda ukryta jednostka otrzymuje sumę wejść pomnożoną przez odpowiednią wagę.

Teraz wyobraź sobie, że inicjalizujesz wszystkie wagi na tę samą wartość (np. Zero lub jeden). W tym przypadku każda ukryta jednostka otrzyma dokładnie ten sam sygnał . Np. Jeśli wszystkie wagi są inicjalizowane na 1, każda jednostka otrzymuje sygnał równy sumie wejść (i wyjść sigmoid(sum(inputs))). Jeśli wszystkie wagi są zerami, co jest jeszcze gorsze, każda ukryta jednostka otrzyma sygnał zerowy. Bez względu na dane wejściowe - jeśli wszystkie wagi są takie same, wszystkie jednostki w warstwie ukrytej również będą takie same .

To jest główny problem z symetrią i powód, dla którego powinieneś inicjować wagi losowo (lub przynajmniej z różnymi wartościami). Należy zauważyć, że ten problem dotyczy wszystkich architektur, które używają połączeń typu każdy z każdym.

ffriend
źródło
1
Świetne wyjaśnienie. Ale dlaczego używać słowa symmetrynie correlation? Kto pierwszy użył tego słowa?
nn0p
1
@ nn0p: korelacja oznacza, że ​​2 sygnały zmieniają się w podobnym kierunku, ale nie zawsze i nie o dokładnie tej samej wielkości. O ile wiem, symetria nie ma formalnej definicji i jest używana tutaj do reprezentowania dokładnie tych samych sygnałów we wszystkich połączeniach między węzłami, co sprawia, że ​​szkolenie jest bezużyteczne.
ffriend
@ffriend niż w przypadku dropouta, randomizacja nie jest bardziej potrzebna. Czy się mylę?
emanuele
1
@emanuele Dropout samo w sobie jest rodzajem randomizacji, więc tak, powinno działać. Jednak wszystkie połączenia, które nie są „przerywane” przy każdej iteracji, nadal będą otrzymywać symetryczną aktualizację, więc myślę, że uczenie się będzie dość powolne i dlatego zalecam nadal używać losowej inicjalizacji w każdej praktycznej sieci.
ffriend
To dobrze wyjaśnia propozycję do przodu, ale co z propozycją tylną?
zell
74

Analogia:

Mam nadzieję, że to dobra analogia. Próbowałem to wyjaśnić tak prosto, jak to tylko możliwe.

Wyobraź sobie, że ktoś zrzucił cię z helikoptera na nieznany szczyt góry i jesteś tam uwięziony. Wszędzie jest mgła. Jedyne co wiesz to to, że powinieneś jakoś zejść na poziom morza. Który kierunek wybrać, aby zejść do najniższego możliwego punktu?

Gdybyś nie mógł znaleźć drogi na poziom morza, a helikopter zabrałby cię ponownie i zrzuciłby na to samo szczytowe miejsce. Musiałbyś ponownie obrać te same wskazówki, ponieważ „inicjalizujesz” się na tych samych pozycjach początkowych .

Jednak za każdym razem, gdy helikopter wyrzuca cię w dowolne miejsce na górze, obrałeś różne kierunki i kroki. Więc byłaby większa szansa, że dotrzesz do najniższego możliwego punktu.

To właśnie oznacza złamanie symetrii . Inicjalizacja jest asymetryczna ( co jest różne ), więc można znaleźć różne rozwiązania tego samego problemu.

W tej analogii, gdzie lądujesz, są wagi . Tak więc przy różnych wagach istnieje większa szansa na dotarcie do najniższego ( lub niższego ) punktu.

Zwiększa również entropię w systemie, dzięki czemu system może tworzyć więcej informacji, które pomogą Ci znaleźć niższe punkty ( minimum lokalne lub globalne ).

wprowadź opis obrazu tutaj

Inanc Gumus
źródło
10
Wygląda na to, że helikopter kilka razy wyrzuca cię gdzieś przypadkowo na górę, jednak w głębokim uczeniu tylko raz inicjujemy wagi losowo.
YuFeng Shen
1
To jest naprawdę intuicyjne wyjaśnienie. Powinniśmy również zauważyć, że NN prawie nigdy nie są wypukłe - więc randomizacja jest idealnym rozwiązaniem - ale jeśli masz wypukłą funkcję straty, to oczywiście nie ma znaczenia, do czego zainicjujesz swoje wagi.
Kingz
4
To dobra analogia - ale bardziej sensowne jest założenie, że ty i twoi przyjaciele jesteście upuszczani na górę (tj. Węzły w sieci) - albo w tym samym miejscu, albo w różnych ludziach w różnych miejscach. I załóżmy, że wszyscy moglibyście się ze sobą komunikować. Różne miejsca z komunikacją pozwolą na szybsze zejście. To samo miejsce oznacza, że ​​wszyscy prawdopodobnie pójdą tą samą ścieżką w dół.
ahmedhosny
26

Odpowiedź jest dość prosta. Podstawowe algorytmy uczenia są z natury chciwe - nie znajdują globalnego optimum, a raczej „najbliższe” lokalne rozwiązanie. W rezultacie, zaczynając od dowolnej ustalonej inicjalizacji, Twoje rozwiązanie jest ukierunkowane na jeden określony zestaw wag. Jeśli zrobisz to losowo (i prawdopodobnie wiele razy), jest znacznie mniej prawdopodobne, że utkniesz w jakiejś dziwnej części powierzchni błędu.

Ten sam argument odnosi się do innych algorytmów, które nie są w stanie znaleźć optymalnego globalnego (k-średnie, EM itp.) I nie ma zastosowania do technik optymalizacji globalnej (jak algorytm SMO dla SVM).

lejlot
źródło
Więc nie ma gwarancji, że nie utknie w lokalnych minimach tylko przez losowanie? Ale po wielu uruchomieniach z różnymi losowymi wagami może uzyskać globalne minimum?
Shayan RC
1
Nie ma gwarancji, ale wielokrotne inicjalizacje mogą pomóc przynajmniej zbliżyć się do prawdziwego optimum.
lejlot
Czy istnieje standardowa formuła lub reguła do ustawiania wartości w celu zainicjowania wag? Mam wielowarstwową sieć neuronową typu feed-forward z propagacją wsteczną, w której używana jest funkcja sigmoidalna.
lkkkk
w książce S. Haykina „sieci neuronowe” jest
jakaś praktyczna zasada
3
Nie jest to powód, dla którego ludzie używają losowej inicjalizacji, ponieważ większość ludzi nie restartuje szkolenia wiele razy z różnymi losowymi inicjalizacjami, a sieć nadal jest w stanie uzyskać dobrą lokalną optymalizację.
cesarsalgado
4

Jak wspomniałeś, kluczową kwestią jest złamanie symetrii . Ponieważ jeśli zainicjujesz wszystkie wagi do zera, wtedy wszystkie ukryte neurony (jednostki) w twojej sieci neuronowej będą wykonywać dokładnie te same obliczenia. Nie jest to coś, czego pragniemy, ponieważ chcemy, aby różne ukryte jednostki obliczały różne funkcje. Jednak nie jest to możliwe, jeśli zainicjujesz wszystkie z tą samą wartością.

Alican Şafak Özdek
źródło
2
  1. Czy inicjalizacja wag na 0 nie byłaby lepszym pomysłem? W ten sposób wagi byłyby w stanie szybciej znaleźć swoje wartości (dodatnie lub ujemne)?

  2. W jaki sposób złamanie symetrii sprawia, że ​​uczy się szybciej?

Jeśli zainicjujesz wszystkie wagi na zero, to wszystkie neurony wszystkich warstw wykonają te same obliczenia, dając ten sam wynik i czyniąc całą głęboką sieć bezużyteczną . Gdyby wagi były równe zero, złożoność całej głębokiej sieci byłaby taka sama, jak pojedynczego neuronu, a przewidywania nie byłyby niczym lepszym niż przypadkowe.

Węzły, które znajdują się obok siebie w ukrytej warstwie połączonej z tymi samymi danymi wejściowymi, muszą mieć różne wagi, aby algorytm uczący się zaktualizował wagi.

Ustawiając wagi na niezerowe (ale bliskie 0, np. 0,1 itd.), Algorytm nauczy się wag w następnych iteracjach i nie utknie. W ten sposób następuje złamanie symetrii.

  1. Czy za randomizacją wag stoi jakaś inna filozofia, poza nadzieją, że po zainicjowaniu będą one zbliżone do swoich optymalnych wartości?

Algorytmy optymalizacji stochastycznej, takie jak stochastyczne zstępowanie w gradiencie, wykorzystują losowość przy wyborze punktu początkowego wyszukiwania oraz w przebiegu wyszukiwania.

Postęp wyszukiwania lub uczenia się sieci neuronowej jest znany jako konwergencja. Odkrycie nieoptymalnego rozwiązania lub lokalnych optymalnych parametrów skutkuje przedwczesną konwergencją.

Zamiast polegać na jednej lokalnej optimie, jeśli uruchamiasz swój algorytm wiele razy z różnymi losowymi wagami, istnieje najlepsza możliwość znalezienia globalnej optimy bez utknięcia w lokalnej optimie.

Po 2015 roku, ze względu na postęp w badaniach nad uczeniem maszynowym, He-et-al Initializatio n zostaje wprowadzony, aby zastąpić losową inicjalizację

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

Wagi są nadal losowe, ale różnią się zakresem w zależności od wielkości poprzedniej warstwy neuronów.

Podsumowując, niezerowe losowe wagi nam pomagają

  1. Wyjdź z lokalnej optimy
  2. Przełamanie symetrii
  3. Osiągnij globalną optymę w kolejnych iteracjach
Ravindra babu
źródło
1

Oprócz inicjalizacji z losowymi wartościami, początkowe wagi nie powinny zaczynać się od dużych wartości. Dzieje się tak, ponieważ często używamy funkcji tanh i sigmoid w warstwach ukrytych i warstwach wyjściowych. Jeśli spojrzysz na wykresy dwóch funkcji, po propagacji do przodu w pierwszej iteracji uzyskasz wyższe wartości, a te wartości odpowiadają miejscom w funkcjach sigmoidalnych i tanh, które zbiegają pochodną do zera. Prowadzi to do zimnego początku procesu uczenia się i wydłużenia czasu nauki. W rezultacie, jeśli uruchomisz wagi losowo, możesz uniknąć tych problemów, mnożąc te wartości przez wartości, takie jak „0,01” lub „0,001”.

mustafamuratcoskun
źródło
1

Po pierwsze, niektóre algorytmy są zbieżne nawet przy zerowej wartości początkowej. Prostym przykładem jest liniowa sieć perceptronów. Oczywiście wiele sieci edukacyjnych wymaga losowego ważenia początkowego (chociaż nie gwarantuje to uzyskania najszybszej i najlepszej odpowiedzi).

Sieci neuronowe wykorzystują propagację wsteczną do uczenia się i aktualizowania wag, a problem polega na tym, że w tej metodzie wagi są zbieżne do lokalnego optymalnego (lokalny minimalny koszt / strata), a nie do optymalnego globalnego.

Losowe ważenie pomaga sieci wykorzystać szanse w każdym kierunku w dostępnej przestrzeni i stopniowo je poprawiać, aby uzyskać lepszą odpowiedź, a nie ograniczać się do jednego kierunku lub odpowiedzi.

[Poniższy rysunek przedstawia jednowymiarowy przykład konwergencji. Biorąc pod uwagę lokalizację początkową, uzyskuje się optymalizację lokalną, ale nie optymalizację globalną. Przy wyższych wymiarach losowe ważenie może zwiększyć szanse znalezienia się we właściwym miejscu lub lepszego rozpoczęcia, co skutkuje zbieżnością wag do lepszych wartości.] [1]

[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). Klasyfikacja i regresja NN. Wykład.]

W najprostszym przypadku nowa waga wygląda następująco:

W_new = W_old + D_loss

Tutaj gradient funkcji kosztu jest dodawany do poprzedniej wagi, aby uzyskać nową wagę. Jeśli wszystkie poprzednie wagi są takie same, w następnym kroku wszystkie wagi mogą być równe. W rezultacie w tym przypadku, z geometrycznego punktu widzenia, sieć neuronowa jest nachylona w jednym kierunku i wszystkie wagi są takie same. Ale jeśli wagi są różne, można zaktualizować wagi o różne ilości. (w zależności od współczynnika wpływu, jaki każda waga ma na wynik, wpływa na koszt i aktualizację wag. Tak więc nawet mały błąd w początkowym losowym ważeniu można rozwiązać).

To był bardzo prosty przykład, ale pokazuje wpływ inicjalizacji losowego ważenia na uczenie się. Umożliwia to sieci neuronowej przechodzenie do różnych przestrzeni zamiast na jedną stronę. W rezultacie, w procesie uczenia się, idź do najlepszych z tych przestrzeni

mohammad javad
źródło
0

Niech będzie bardziej matematycznie. Właściwie powodem, dla którego odpowiadam, jest to, że w innych odpowiedziach brakuje tego fragmentu. Załóżmy, że masz 2 warstwy. Jeśli spojrzymy na algorytm wstecznej propagacji, obliczenie

dZ2 = A2 - Y

dW2 = (1 / m) * dZ2 * A2.T

Zignorujmy db2. (Przepraszam, nie przepraszam;))

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Problem, który widzisz, jest pogrubiony. Obliczenie dZ1 (które jest wymagane do obliczenia dW1) ma w sobie W2, które wynosi 0. Nigdy nie mieliśmy szansy zmienić wag na cokolwiek poza 0 i nigdy tego nie zrobimy. Zasadniczo więc sieć neuronowa niczego się nie uczy. Myślę, że jest gorszy niż regresja logistyczna (pojedyncza jednostka). W przypadku regresji logistycznej uczysz się z większą liczbą iteracji, ponieważ dzięki X otrzymujesz różne dane wejściowe. W tym przypadku inne warstwy zawsze dają te same wyniki, więc w ogóle się nie uczysz.

Muhammad Mubashirullah Durrani
źródło
0

Nauczyłem się jednej rzeczy: jeśli zainicjujesz wagę do zera, jest oczywiste, że jednostki aktywacji w tej samej warstwie będą takie same, co oznacza, że ​​będą miały te same wartości. Kiedy cofniesz się, zauważysz, że wszystkie wiersze gradientu dW są również takie same, stąd wszystkie wiersze macierzy wag W są takie same po aktualizacji gradientu zstępującego. Ogólnie rzecz biorąc, inicjalizacja wszystkich wag do zera powoduje, że sieć nie może złamać symetrii. Oznacza to, że każdy neuron w każdej warstwie nauczy się tego samego i równie dobrze możesz trenować sieć neuronową n[l]=1n[l]=1dla każdej warstwy, a sieć nie jest silniejsza niż klasyfikator liniowy, taki jak regresja logistyczna. Kurs Andrew Ng:

abdoulsn
źródło