Perbedaan Fungsi Aktivasi di Jaringan Saraf Tiruan pada umumnya

15

Saya telah mempelajari jenis fungsi aktivasi untuk jaringan saraf. Fungsinya sendiri cukup mudah, tetapi perbedaan aplikasi tidak sepenuhnya jelas.

Masuk akal bahwa seseorang membedakan antara fungsi tipe logis dan linier, tergantung pada biner / output kontinu yang diinginkan tetapi apa keuntungan dari fungsi sigmoid dibandingkan fungsi linier sederhana?

ReLU sangat sulit dimengerti bagi saya, misalnya: apa gunanya menggunakan fungsi yang berperilaku linier dalam hal input positif tetapi "datar" jika negatif? Apa intuisi di balik ini? Atau itu hanya masalah kesalahan uji coba yang sederhana, tidak lebih?

Hendrik
sumber

Jawaban:

15

Pertanyaan serupa ditanyakan pada CV: Daftar lengkap fungsi aktivasi di jaringan saraf dengan pro / kontra .

Saya salin di bawah ini salah satu jawaban:

Satu daftar seperti itu, meskipun tidak banyak lengkap: http://cs231n.github.io/neural-networks-1/

Fungsi aktivasi yang biasa digunakan

Setiap fungsi aktivasi (atau non-linearitas ) mengambil angka tunggal dan melakukan operasi matematika tetap tertentu di atasnya. Ada beberapa fungsi aktivasi yang mungkin Anda temui dalam praktik:

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

Kiri: Sigmoid non-linearitas meremas bilangan real untuk berkisar antara [0,1] Kanan: Tanh non-linearitas meremas bilangan real untuk berkisar antara [-1,1].

Sigmoid. Non-linearitas sigmoid memiliki bentuk matematika dan ditunjukkan pada gambar di atas di sebelah kiri. Seperti disinggung pada bagian sebelumnya, dibutuhkan angka bernilai nyata dan "squash" dalam kisaran antara 0 dan 1. Khususnya, angka negatif besar menjadi 0 dan angka positif besar menjadi 1. Fungsi sigmoid telah sering digunakan secara historis karena ia memiliki interpretasi yang bagus sebagai laju penembakan neuron: dari tidak menembak sama sekali (0) ke penembakan jenuh penuh pada frekuensi maksimum yang diasumsikan (1). Dalam praktiknya, non-linearitas sigmoid baru-baru ini tidak disukai dan jarang digunakan. Ini memiliki dua kelemahan utama:σ(x)=1/(1+e-x)

  • Sigmoids menjenuhkan dan membunuh gradien . Sifat yang sangat tidak diinginkan dari neuron sigmoid adalah bahwa ketika aktivasi neuron jenuh di kedua ujung 0 atau 1, gradien di daerah ini hampir nol. Ingatlah bahwa selama backpropagation, gradien (lokal) ini akan dikalikan dengan gradien output gerbang ini untuk seluruh tujuan. Oleh karena itu, jika gradien lokal sangat kecil, ia akan secara efektif "membunuh" gradien dan hampir tidak ada sinyal yang akan mengalir melalui neuron ke bobotnya dan secara rekursif ke datanya. Selain itu, seseorang harus membayar ekstra hati-hati ketika menginisialisasi bobot neuron sigmoid untuk mencegah saturasi. Misalnya, jika bobot awal terlalu besar maka sebagian besar neuron akan menjadi jenuh dan jaringan hampir tidak akan belajar.
  • Output Sigmoid tidak berpusat nol . Ini tidak diinginkan karena neuron dalam lapisan pemrosesan berikutnya dalam Jaringan Saraf Tiruan (lebih lanjut tentang ini segera) akan menerima data yang tidak berpusat nol. Ini memiliki implikasi pada dinamika selama gradient descent, karena jika data yang masuk ke neuron selalu positif (misalnya elementwise dalam )), maka gradien pada bobot akan selama backpropagation menjadi semua positif, atau semua negatif (tergantung pada gradien seluruh ekspresi x>0f=wTx+bwf). Ini bisa memperkenalkan dinamika zig-zag yang tidak diinginkan dalam pembaruan gradien untuk bobot. Namun, perhatikan bahwa setelah gradien ini ditambahkan di seluruh kumpulan data, pembaruan terakhir untuk bobot dapat memiliki tanda variabel, agak mengurangi masalah ini. Oleh karena itu, ini adalah ketidaknyamanan tetapi memiliki konsekuensi yang kurang parah dibandingkan dengan masalah aktivasi jenuh di atas.

Tanh. Non-linearitas tanh ditunjukkan pada gambar di atas di sebelah kanan. Ini menekan angka real-value ke kisaran [-1, 1]. Seperti halnya neuron sigmoid, aktivasinya jenuh, tetapi tidak seperti neuron sigmoid, outputnya berpusat nol. Oleh karena itu, dalam praktiknya tan-non-linearitas selalu lebih disukai daripada nonlinearitas sigmoid. Juga catat bahwa tanh neuron hanyalah sebuah neuron sigmoid yang diskalakan, khususnya yang disimpan sebagai berikut: .tanh(x)=2σ(2x)-1

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

Kiri: Fungsi aktivasi Rectified Linear Unit (ReLU), yang nol ketika x <0 dan kemudian linier dengan kemiringan 1 ketika x> 0. Kanan: Plot dari Krizhevsky et al. (pdf) kertas yang menunjukkan peningkatan 6x dalam konvergensi dengan unit ReLU dibandingkan dengan unit tanh.

ReLU. The Rectified Linear Unit telah menjadi sangat populer dalam beberapa tahun terakhir. Ini menghitung fungsi . Dengan kata lain, aktivasi hanya di ambang nol (lihat gambar di atas di sebelah kiri). Ada beberapa pro dan kontra untuk menggunakan ReLU:f(x)=maks(0,x)

  • (+) Ditemukan sangat mempercepat (misalnya faktor 6 di Krizhevsky et al. ) Konvergensi penurunan gradien stokastik dibandingkan dengan fungsi sigmoid / tanh. Dikatakan bahwa ini karena bentuknya yang linier, tidak jenuh.
  • (+) Dibandingkan dengan tanh / sigmoid neuron yang melibatkan operasi yang mahal (eksponensial, dll.), ReLU dapat diimplementasikan dengan hanya mengirik matriks aktivasi di nol.
  • (-) Sayangnya, unit ReLU bisa rapuh selama pelatihan dan bisa "mati". Sebagai contoh, gradien besar yang mengalir melalui neuron ReLU dapat menyebabkan bobot diperbarui sedemikian rupa sehingga neuron tidak akan pernah aktif pada titik data apa pun lagi. Jika ini terjadi, maka gradien yang mengalir melalui unit selamanya akan menjadi nol sejak saat itu. Artinya, unit-unit ReLU dapat mati tanpa bisa diubah selama pelatihan karena mereka bisa terlempar dari bermacam-macam data. Misalnya, Anda mungkin menemukan bahwa sebanyak 40% dari jaringan Anda bisa "mati" (yaitu neuron yang tidak pernah aktif di seluruh dataset pelatihan) jika tingkat pembelajaran ditetapkan terlalu tinggi. Dengan pengaturan tingkat pembelajaran yang tepat, ini jarang menjadi masalah.

LeLU ReLU. ReLU yang bocor adalah salah satu upaya untuk memperbaiki masalah "reLU yang sedang sekarat". Alih-alih fungsi menjadi nol ketika x <0, ReLU yang bocor malah akan memiliki kemiringan negatif kecil (0,01, atau lebih). Yaitu, fungsi menghitung mana adalah konstanta kecil. Beberapa orang melaporkan keberhasilan dengan bentuk fungsi aktivasi ini, tetapi hasilnya tidak selalu konsisten. Kemiringan di wilayah negatif juga dapat dibuat menjadi parameter dari masing-masing neuron, seperti yang terlihat pada neuron PReLU, yang diperkenalkan dalam Delving Deep into Rectifiers , oleh Kaiming He dkk., 2015. Namun, konsistensi manfaat lintas tugas saat ini tidak jelas.f(x)=1(x<0)(αx)+1(x> =0)(x)α

masukkan deskripsi gambar di sini

Maxout . Jenis unit lain telah diusulkan yang tidak memiliki bentuk fungsional mana non-linearitas diterapkan pada produk titik antara bobot dan data. Satu pilihan yang relatif populer adalah neuron Maxout (diperkenalkan baru-baru ini oleh Goodfellow et al. ) Yang menggeneralisasi ReLU dan versi yang bocor. Neuron Maxout menghitung fungsi . Perhatikan bahwa baik ReLU maupun LeLU bocor adalah kasus khusus dari formulir ini (misalnya, untuk ReLU kami memilikif(wTx+b)maks(w1Tx+b1,w2Tx+b2)w1,b1=0). Neuron Maxout karenanya menikmati semua manfaat dari unit ReLU (rejim operasi linier, tanpa saturasi) dan tidak memiliki kelemahannya (sekarat ReLU). Namun, tidak seperti neuron ReLU, ia menggandakan jumlah parameter untuk setiap neuron tunggal, yang mengarah ke jumlah parameter yang tinggi.

Ini menyimpulkan diskusi kami tentang jenis neuron yang paling umum dan fungsi aktivasi mereka. Sebagai komentar terakhir, sangat jarang untuk mencampur dan mencocokkan berbagai jenis neuron dalam jaringan yang sama, meskipun tidak ada masalah mendasar dengan melakukannya.

TLDR : " Jenis neuron apa yang harus saya gunakan? " Gunakan non-linearitas ReLU, berhati-hatilah dengan tingkat pembelajaran Anda dan mungkin memantau fraksi unit "mati" dalam jaringan. Jika ini menyangkut Anda, cobalah Leaky ReLU atau Maxout. Jangan pernah gunakan sigmoid. Coba tanh, tetapi berharap itu bekerja lebih buruk daripada ReLU / Maxout.


Lisensi: Lisensi


MIT (MIT)

Hak Cipta (c) 2015 Andrej Karpathy

Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk berurusan dengan Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan / atau menjual salinan Perangkat Lunak, dan untuk mengizinkan orang-orang kepada siapa Perangkat Lunak dilengkapi untuk melakukannya, dengan ketentuan sebagai berikut:

Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian penting Perangkat Lunak.

PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK TETAPI TIDAK TERBATAS PADA JAMINAN PENJUALAN DAGANG, KESESUAIAN UNTUK TUJUAN TERTENTU DAN TUJUAN NON. DALAM ACARA APA PUN, PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU KEWAJIBAN LAINNYA, BAIK DALAM TINDAKAN KONTRAK, KETENTUAN ATAU KATA LAINNYA, TINGKAT DARI, DI LUAR ATAU DALAM HUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN LAINNYA. PERANGKAT LUNAK.*

Franck Dernoncourt
sumber
Terima kasih, ringkasan ini memberikan beberapa wawasan, tetapi, terus terang, saya masih tidak dapat memahami beberapa detail secara intuitif (misalnya mengapa ReLU "sangat mempercepat konvergensi SGD"), dan yang paling penting: yang mana yang harus dipilih? Berdasarkan kesimpulannya, Maxout adalah yang terbaik dan itulah akhirnya. Tetapi terlepas dari kenyataan bahwa Maxout tidak diimplementasikan dalam paket yang paling populer (dalam Keras, misalnya), tampaknya saya masuk akal bahwa setidaknya di lapisan terakhir jenis lain harus ditempatkan (misalnya sigmoid untuk biklasifikasi).
Hendrik