Właśnie usłyszałem, że dobrym pomysłem jest wybór początkowych wag sieci neuronowej z zakresu , gdzie jest liczba wejść do danego neuronu. Zakłada się, że zbiory są znormalizowane - średnia 0, wariancja 1 (nie wiem, czy to ma znaczenie).d
Dlaczego to dobry pomysł?
Odpowiedzi:
Zakładam, że używasz neuronów logistycznych i trenujesz metodą gradientu opadania / propagacji wstecznej.
Funkcja logistyczna jest zbliżona do płaskiej dla dużych dodatnich lub ujemnych danych wejściowych. Pochodna na wejściu wynosi około , ale przy pochodna wynosi około . Oznacza to, że jeśli wejście neuronu logistycznego wynosi , to dla danego sygnału treningowego neuron nauczy się około razy wolniej niż gdyby sygnał wejściowy wynosił .1 / 10 10 1 / 22000 10 2200 22) 1 / 10 10 1 / 22000 10 2200 2
Jeśli chcesz, aby neuron szybko się uczył, musisz albo wytworzyć ogromny sygnał treningowy (na przykład z funkcją utraty entropii krzyżowej), albo chcesz, aby pochodna była duża. Aby pochodna była duża, ustawia się początkowe wagi, aby często uzyskiwać dane wejściowe w zakresie .[−4,4]
Podane początkowe wagi mogą, ale nie muszą działać. To zależy od sposobu znormalizowania danych wejściowych. Jeśli dane wejściowe są znormalizowane w celu uzyskania średniej i odchylenia standardowego , to losowa suma terminów z wagami jednolitymi na będzie miał średnią i wariancję , niezależnie od . Prawdopodobieństwo otrzymania sumy poza jest niewielkie. Oznacza to, że gdy zwiększasz , nie powoduje to, że neurony zaczynają się nasycać, aby się nie nauczyły.1 d ( - 10 1 d 01(−1d√,1d√) 0 d[-4,4]d13 d [−4,4] d
W przypadku danych wejściowych, które nie są znormalizowane, wagi te mogą nie być skuteczne w unikaniu nasycenia.
źródło
[1] odpowiada na pytanie:
Po pierwsze, wagi nie powinny być ustawione na zera, aby złamać symetrię podczas wstecznego propagowania:
Niektóre strategie inicjalizacji:
W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W)
Następnie użycieu
jako macierzy inicjalizacji.Ponadto, w niektórych sytuacjach pomocne może być bezobsługowe szkolenie wstępne:
Niektóre biblioteki ANN mają również kilka interesujących list, np. Lasagne :
[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.
źródło
Pytanie brzmi: jak najlepiej wybrać odważniki ?. Chodzi o to, aby losowo wybierać wartości wag po rozkładzie, który pomaga procesowi optymalizacji zbliżyć się do sensownego rozwiązania.
źródło
Cóż, jako aktualizacja, zagłębiając się w prostowniki: przekraczając wydajność na poziomie ludzkim n Klasyfikacja ImageNet przez He i in. Wprowadziła inicjalizację konkretnie z inicjalizacją,
w = U([0,n]) * sqrt(2.0/n)
gdzien
jest liczba danych wejściowych Twojej NN. Widziałem tę inicjalizację w wielu najnowszych pracach (także w ReLU). W rzeczywistości pokazują, w jaki sposób zaczyna to obniżać wskaźnik błędów znacznie szybciej niż (-1 / n, 1 / n), o których wspomniałeś. Aby uzyskać dokładne wyjaśnienie, zobacz artykuł, ale oto, jak szybko się zbiega:źródło
Chodzi o to, że chcesz zainicjować wagi w sposób zapewniający dobry przepływ danych do przodu i do tyłu przez sieć. Oznacza to, że nie chcesz, aby aktywacje stale się zmniejszały lub zwiększały w miarę postępów w sieci.
Ten obraz pokazuje aktywacje 5-warstwowego wielowarstwowego perceptronu ReLU w ramach 3 różnych strategii inicjalizacji po jednym przejściu MNIST przez sieć.
We wszystkich trzech przypadkach wagi są pobierane z rozkładu normalnego wyśrodkowanego na zero, który jest określony przez jego odchylenie standardowe. Widać, że jeśli początkowe ciężary są zbyt małe (odchylenie standardowe jest małe), aktywacje zostają uduszone, a jeśli są zbyt duże, aktywacje wybuchają. Średnią wartość, która jest w przybliżeniu prawidłowa, można znaleźć, ustawiając wagi tak, aby wariancja aktywacji i aktualizacji gradientu pozostała w przybliżeniu taka sama, jak w sieci.
Napisałem wpis na blogu o inicjalizacji wagi, który jest bardziej szczegółowy, ale podstawowa idea jest następująca.
źródło
W rezultacie normalizacja partii umożliwia szybsze szkolenie dzięki wykorzystaniu znacznie wyższych wskaźników uczenia się i łagodzi problem złej inicjalizacji. BN umożliwia także stosowanie nieliniowości nasycania, zapobiegając utknięciu sieci w trybach nasycenia. Podsumowując, Normalizacja wsadowa to transformowalna zmienna, która wprowadza znormalizowane aktywacje do sieci. W praktyce warstwę BN można wstawić natychmiast po w pełni połączonej warstwie.
źródło