Jaka jest różnica między inicjatorem skalowania wariancji a inicjatorem Xaviera?


20

W implementacji ResNet przez Tensorflow widzę , że używają inicjalizatora skalowania wariancji, a także, że inicjator Xavier jest popularny. Nie mam za dużo doświadczenia, co jest lepsze w praktyce?


Aby uzyskać bardziej szczegółowe wyjaśnienie inicjalizacji Xaviera, możesz odwiedzić ten link: prateekvjoshi.com/2016/03/29/... Zawiera on właściwe wyprowadzenie inicjalizacji Xaviera i intuicję.
Himanshu Singh,

Odpowiedzi:


31

Perspektywa historyczna

Inicjalizacja Xaviera , pierwotnie zaproponowana przez Xaviera Glorota i Yoshua Bengio w „Zrozumieniu trudności w trenowaniu głębokich sieci neuronowych” , jest techniką inicjalizacji wag, która próbuje uczynić wariancję wyjściową warstwy równą wariancji jej danych wejściowych . Pomysł ten okazał się bardzo przydatny w praktyce. Oczywiście inicjalizacja zależy od funkcji aktywacji warstwy. W swoim artykule Glorot i Bengio rozważali logistyczną funkcję aktywacji sigmoidów , która była wówczas wyborem domyślnym.

Później aktywacja sigmoidów została przekroczona przez ReLu, ponieważ pozwoliła rozwiązać problem znikania / eksplodowania gradientów. W związku z tym pojawiła się nowa technika inicjalizacji, która zastosowała ten sam pomysł (równoważenie wariancji aktywacji) do tej nowej funkcji aktywacji. Zostało to zaproponowane przez Kaiminga He w ogóle w „Zagłębianie się w prostowniki: przewyższające wydajność na poziomie ludzkim w klasyfikacji ImageNet” , a teraz często nazywane jest inicjalizacją He .

W tensorflow inicjalizacja He jest implementowana w variance_scaling_initializer()funkcji (która jest w rzeczywistości bardziej ogólnym inicjatorem, ale domyślnie wykonuje inicjalizację He), podczas gdy inicjator Xaviera jest logiczny xavier_initializer().

streszczenie

Podsumowując, główna różnica dla praktyków uczenia maszynowego jest następująca:

  • Inicjalizacja działa lepiej dla warstw z aktywacją ReLu .
  • Inicjalizacja Xaviera działa lepiej dla warstw z aktywacją sigmoidalną .

w pytorch, jaka inicjalizacja jest używana? czy to zależy od aktywacji?
Charlie Parker

2
Cześć, dla tanh()funkcji aktywacji, której funkcji inicjalizacji powinienem użyć.
GoingMyWay

@ GoingMyWay, zgodnie z tym pytorch.org/docs/stable/… , możesz użyć inicjalizacji He z zyskiem 5/3. Nie jestem jednak pewien, skąd to się bierze.
Podgorskiy

3

Skalowanie wariancji to tylko uogólnienie Xaviera: http://tflearn.org/initializations/ . Oba działają na zasadzie, że skala gradientów powinna być podobna na wszystkich warstwach. Xavier jest prawdopodobnie bezpieczniejszy w użyciu, ponieważ wytrzymał eksperymentalną próbę czasu; próba wybrania własnych parametrów dla skalowania wariancji może zahamować szkolenie lub spowodować, że sieć w ogóle nie zarobi.


Dzięki. Co masz na myśli wybierając własne parametry wariancji?
Hanamichi,

W implementacji TF byłby to parametr czynnikowy (który określa stosunek wariancji wejściowej do wariancji wyjściowej)
liangjy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.