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).

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) minimalizuj‖fa1(x)-sol2)(fa2)(rmidotjafajamir(doorrupt(za1(x)))))‖2)+λ1‖W.‖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.1‖sol2)(…)‖1


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
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.