Keras: różnica między regulatorami jądra i aktywności

89

Zauważyłem, że weight_regularizer nie jest już dostępny w Keras i że w jego miejsce pojawił się regulator aktywności i jądra . Chciałbym wiedzieć:

  • Jakie są główne różnice między regulatorami jądra i aktywności ?
  • Czy mogę użyć activity_regularizer zamiast weight_regularizer ?
Simone
źródło

Odpowiedzi:

88

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_regularizerzastępuje weight_regularizer- chociaż nie jest to bardzo jasne z dokumentacji.

Z definicji kernel_regularizer:

kernel_regularizer: Funkcja regulatora zastosowana do kernelmacierzy 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

Michele Tonutti
źródło
Czy jesteś całkowicie pewien co do tej kernel_regularizerwymiany weight_regularizer?
Simone,
3
Znalazłem wiele przykładów użycia kernel_regularizer, ale nie dla activity_regularizer. Czy możesz skomentować przypadki użycia dla activity_regularizer?
Milad M
1
Dlaczego chcesz uregulować wyświetlanie warstw ukrytych? Czy to z tego samego powodu, dla którego normalizujemy dane wejściowe do zakresu (-1, 1) lub (0, 1). Czy ma to na celu zmniejszenie nakładów na kolejne warstwy, aby wspomóc proces SGD?
Nagabhushan Baddi
1
@NagabhushanBaddi zobacz tę odpowiedź: datascience.stackexchange.com/a/15195/32811
Michele Tonutti
1
@FinncentPrice Mogę tylko założyć, że kiedyś tam był, a teraz już go nie ma
Michele Tonutti
40

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.

Alex Deft
źródło
1
Naprawdę intuicyjna.
Sarang Manjrekar