Czy mogę używać ReLU w autoencoderze jako funkcji aktywacyjnej?

11

Podczas wdrażania autoencodera z siecią neuronową większość osób użyje sigmoid jako funkcji aktywacyjnej.

Czy zamiast tego możemy użyć ReLU? (Ponieważ ReLU nie ma limitu górnej granicy, w zasadzie oznacza to, że obraz wejściowy może mieć piksel większy niż 1, w przeciwieństwie do ograniczonych kryteriów dla autoencodera, gdy używany jest sigmoid).

RockTheStar
źródło

Odpowiedzi:

5

Oto wątek dyskusji (od lipca 2013 r.) Wskazujący, że mogą być z tym pewne problemy, ale można to zrobić.

Çağlar Gülçehre (z laboratorium Yoshua Bengio) powiedział, że z powodzeniem zastosował następującą technikę w kwestiach wiedzy: Znaczenie wcześniejszych informacji dla optymalizacji :

wytrenuj pierwszą DAE jak zwykle, ale z prostownikami w ukrytej warstwie: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) zminimalizuj utratę entropii lub utraty MSE, porównując g1 (f1 (uszkodzony (x))) i x. sigmoid jest opcjonalny w zależności od danych.

wytrenuj 2. DAE z szumem dodanym przed prostownikiem f1 i użyj jednostek rekonstrukcji ze stratą MSE: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) minimalizujfa1(x)-sol2)(fa2)(rmidotjafajamir(doorrupt(za1(x)))))2)+λ1W.1+λ2)W.2)

Xavier Glorot, również z laboratorium Bengio, powiedział, że zrobił to samo z wyjątkiem zastąpienia z kary „na wartości aktywacji” (przypuszczalnie ?) Zarówno Domain dostosowanie do Klasyfikacja sentymentów na dużą skalę: podejście głębokiego uczenia się (ICML 2011) oraz w sieciach neuronowych prostowników głębokich rzadkich (AISTATS 2011).W.1L.1sol2)()1

Dougal
źródło
Dzięki za szybką odpowiedź! Mówisz więc, że istnieje pewien problem z optymalizacją auteencodera, gdy zamiast Sigmoid stosuje się ReLU?
RockTheStar
Wydaje się, że może powodować problemy, tak, ale na pewno można to zrobić, jeśli poprawnie skonfigurujesz proces uczenia się. Może to pomóc w czytaniu powiązanych artykułów.
Dougal,
Eksperymentuję z prostym autoencoderem w zestawie danych MNIST. Używam w pełni połączonych sieci o architekturze 784-128-64-2-64-128-784. Używam relus wszędzie, ale eksperymentuję z warstwą wąskiego gardła (relu lub linear) i warstwą wyjściową (relu lub sigmoid). Zastosowanie prostownika na wyjściu prowadzi do gorszej wydajności; Sigmoid ma się lepiej. W przypadku sygnału sigmoidalnego liniowe wąskie gardło wydaje się nieco lepsze. Tak więc moją ulubioną kombinacją dla tych dwóch warstw jest liniowy / sigmoid. (Nawiasem mówiąc, stosowanie sigmoidów na wszystkich warstwach wyraźnie to pogarsza.)
Ameba
@ameoba Nic dziwnego, że wyjścia relu są złe: jeśli wiesz, że wyjścia mają określone granice, warto użyć funkcji aktywacyjnej, która ogranicza cię do tych granic. Nie mam zbyt dużego doświadczenia w tej dziedzinie, ale prawdopodobnie wypróbowałbym ELU lub nieszczelną ReLU dla ukrytych warstw.
Dougal
2
Och, wow, nie byłem świadomy ELU! Wielkie dzięki za wskazówkę, Dougal. Próbowałem ich, a one działają lepiej. Głębokie uczenie się jest niesamowite: co roku pojawiają się nowe sztuczki i nikt nie ma pojęcia, dlaczego niektóre działają lepiej od innych. (CC na @RockTheStar). Nawiasem mówiąc, uważam również, że optymalizator Adam działa całkiem nieźle.
ameba