Bisakah saya menggunakan ReLU di autoencoder sebagai fungsi aktivasi?

11

Ketika menerapkan autoencoder dengan jaringan saraf, kebanyakan orang akan menggunakan sigmoid sebagai fungsi aktivasi.

Bisakah kita menggunakan ReLU saja? (Karena ReLU tidak memiliki batas pada batas atas, pada dasarnya berarti gambar input dapat memiliki pixel lebih besar dari 1, tidak seperti kriteria terbatas untuk autoencoder ketika sigmoid digunakan).

RockTheStar
sumber

Jawaban:

5

Berikut adalah utas diskusi (mulai Juli 2013) yang mengindikasikan bahwa mungkin ada beberapa masalah dengannya, tetapi hal itu dapat dilakukan.

Çağlar Gülçehre (dari lab Yoshua Bengio) mengatakan dia berhasil menggunakan teknik berikut dalam Pengetahuan Penting: Pentingnya Informasi Sebelumnya untuk Optimalisasi :

melatih DAE pertama seperti biasa, tetapi dengan penyearah di lapisan tersembunyi: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) meminimalkan cross-entropy atau hilangnya MSE, membandingkan g1 (f1 (rusak (x))) dan x. sigmoid bersifat opsional tergantung pada data.

latihlah DAE ke-2 dengan noise yang ditambahkan sebelum penyearah f1 dan gunakan unit rekonstruksi softplus dengan kehilangan MSE: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) kecilkanf1(x)g2(f2(rectifier(corrupt(a1(x)))))2+λ1W1+λ2W2

Xavier Glorot, juga dari lab Bengio, mengatakan ia melakukan hal yang sama kecuali mengganti dengan penalti "pada nilai aktivasi" (mungkin ?) Di kedua Adaptasi Domain untuk Klasifikasi Sentimen Skala Besar: A Deep Learning Approach (ICML 2011) dan dalam jaringan saraf rectifier Deep sparse (AISTATS 2011).W1L1g2()1

Dougal
sumber
Terima kasih atas tanggapan yang cepat! Jadi Anda mengatakan ada beberapa masalah dalam mengoptimalkan auteencoder ketika ReLU digunakan, bukan Sigmoid?
RockTheStar
Sepertinya itu bisa menyebabkan masalah, ya, tapi itu pasti bisa dilakukan jika Anda mengatur proses pembelajaran dengan benar. Mungkin membantu untuk membaca makalah terkait.
Dougal
Saya bereksperimen dengan autoencoder sederhana pada dataset MNIST. Saya menggunakan jaringan yang sepenuhnya terhubung dengan arsitektur 784-128-64-2-64-128-784. Saya menggunakan relus di mana-mana, tetapi saya bereksperimen dengan lapisan bottleneck (relu atau linear) dan lapisan output (relu atau sigmoid). Menggunakan penyearah dalam output menyebabkan kinerja yang lebih buruk; sigmoid lebih baik. Untuk output sigmoid, bottleneck linier tampaknya melakukan sedikit lebih baik. Jadi kombinasi favorit saya untuk dua lapisan ini adalah linear / sigmoid. (Ngomong-ngomong, menggunakan sigmoids di semua lapisan membuatnya semakin buruk.)
amoeba
@ameoba Tidak mengherankan bagi saya bahwa output relu buruk: jika Anda tahu output memiliki batas tertentu, masuk akal untuk menggunakan fungsi aktivasi yang membatasi Anda ke batas tersebut. Saya tidak terlalu berpengalaman di bidang ini, tapi saya mungkin akan mencoba ELU atau ReLU yang bocor untuk lapisan tersembunyi.
Dougal
2
Oh, wow, saya tidak tahu tentang ELU! Terima kasih banyak atas tipnya, Dougal. Saya mencobanya, dan mereka bekerja lebih baik. Pembelajaran mendalam itu menakjubkan: trik baru muncul setiap tahun dan tidak ada yang tahu mengapa beberapa bekerja lebih baik daripada yang lain. (CC ke @RockTheStar). Omong-omong, saya juga menemukan bahwa pengoptimal Adam berkinerja cukup mengagumkan.
amoeba