Jestem ciekawy, w jaki sposób gradienty są propagowane wstecz przez sieć neuronową przy użyciu modułów ResNet / pomijania połączeń. Widziałem kilka pytań na temat ResNet (np. Sieć neuronowa z połączeniami pomijanymi ), ale to pytanie dotyczy konkretnie wstecznej propagacji gradientów podczas treningu.
Podstawowa architektura jest tutaj:
Przeczytałem ten artykuł, Badanie resztkowych sieci do rozpoznawania obrazów , aw części 2 rozmawiają o tym, jak jednym z celów ResNet jest umożliwienie krótszej / wyraźniejszej ścieżki gradientu do wstecznej propagacji do warstwy podstawowej.
Czy ktoś może wyjaśnić, w jaki sposób gradient przepływa przez ten typ sieci? Nie do końca rozumiem, w jaki sposób operacja dodawania i brak sparametryzowanej warstwy po dodaniu pozwala na lepszą propagację gradientu. Czy ma to coś wspólnego z tym, że gradient nie zmienia się podczas przepływu przez operator dodawania i jest jakoś rozdzielany bez mnożenia?
Ponadto rozumiem, w jaki sposób można rozwiązać problem znikającego gradientu, jeśli gradient nie musi przepływać przez warstwy ciężaru, ale jeśli nie ma przepływu gradientu przez ciężarki, w jaki sposób są one aktualizowane po przejściu wstecz?
źródło
the gradient doesn't need to flow through the weight layers
, o co ci chodzi?Odpowiedzi:
Dodaj wysyła gradient z powrotem na oba wejścia. Możesz się o tym przekonać, uruchamiając w tensorflow:
Wydajność:
Tak więc gradient będzie wynosić:
Edycja: pojawia się pytanie: „jaka jest operacja w punkcie, w którym połączenie autostrady i blok sieci neuronowej łączą się ponownie, na dole Ryciny 2?”
Odpowiedź brzmi: są zsumowane. Możesz to zobaczyć na podstawie wzoru z Rysunku 2:
Mówi to, że:
Edycja 2:
Przepisywanie w nieco innych słowach:
Bloki resztkowe modyfikują gradienty przepływające do tyłu, ale nie ma żadnych funkcji „squash” ani „aktywacji”, przez które przepływają gradienty. Funkcje „zgniatania” / „aktywacji” powodują problem gradientu eksplozji / zanikania, więc usuwając je z samej magistrali, znacznie łagodzimy ten problem.
Edycja 3: Osobiście wyobrażam sobie siatkę w mojej głowie jako poniższy schemat. Jest topologicznie identyczny z rysunkiem 2, ale bardziej wyraźnie pokazuje, jak magistrala przepływa prosto przez sieć, podczas gdy pozostałe bloki po prostu stukają z niej wartości i dodają / usuwają jakiś mały wektor względem magistrali:
źródło