Regulator aktywności działa jako funkcja wyjścia sieci i jest używany głównie do regulowania ukrytych jednostek, podczas gdy weight_regularizer, jak sama nazwa mówi, działa na odważnikach, powodując ich rozpad. Zasadniczo można wyrazić stratę regularyzacyjną jako funkcję wyniku ( activity_regularizer
) lub wag ( weight_regularizer
).
Nowy kernel_regularizer
zastępuje weight_regularizer
- chociaż nie jest to bardzo jasne z dokumentacji.
Z definicji kernel_regularizer
:
kernel_regularizer: Funkcja regulatora zastosowana do kernel
macierzy wag (zobacz regularyzator).
Oraz activity_regularizer
:
activity_regularizer: Funkcja regularyzatora zastosowana na wyjściu warstwy (jej „aktywacja”). (patrz regularyzator).
Ważna zmiana : Zwróć uwagę, że w pliku activity_regularizer jest błąd , który został naprawiony tylko w wersji 2.1.4 Keras (przynajmniej z zapleczem Tensorflow). Rzeczywiście, w starszych wersjach funkcja regulatora aktywności jest stosowana na wejściu warstwy, zamiast być stosowana na wyjściu (rzeczywiste aktywacje warstwy, zgodnie z zamierzeniami). Dlatego uważaj, jeśli używasz starszej wersji Keras (sprzed 2.1.4), regularyzacja aktywności może prawdopodobnie nie działać zgodnie z przeznaczeniem.
Możesz zobaczyć zatwierdzenie na GitHub
Pięć miesięcy temu François Chollet dostarczył poprawkę do regulatora aktywności, który został następnie włączony do Keras 2.1.4
kernel_regularizer
wymianyweight_regularizer
?Ta odpowiedź jest nieco spóźniona, ale jest przydatna dla przyszłych czytelników. Tak więc, jak mówią, potrzeba jest matką wynalazku. Zrozumiałem to tylko wtedy, gdy tego potrzebowałem.
Powyższa odpowiedź tak naprawdę nie określa różnicy, ponieważ oba z nich wpływają na wagi, więc jaka jest różnica między karą za same ciężary a wyjściem warstwy?
Oto odpowiedź: spotkałem się z przypadkiem, w którym wagi siatki są małe i ładne, wahają się od [-0,3] do [+0,3].
Więc naprawdę nie mogę ich ukarać, nie ma z nimi nic złego. Regulatory jądra są bezużyteczne. Jednak wydajność warstwy jest OGROMNA, w setkach.
Należy pamiętać, że dane wejściowe do warstwy są również małe, zawsze mniejsze niż jeden. Ale te małe wartości oddziałują z wagami w taki sposób, że wytwarza te ogromne wyniki. Tutaj zdałem sobie sprawę, że potrzebuję raczej regulatora aktywności, a nie regulatora jądra. Tym samym karzę warstwę za te duże wyjścia, nie obchodzi mnie, czy same wagi są małe, po prostu chcę odstraszyć ją od osiągnięcia takiego stanu, bo to nasyca moją sigmoidalną aktywację i powoduje mnóstwo innych problemów, takich jak znikanie gradient i stagnacja.
źródło