Mengapa fungsi aktivasi nonlinier harus digunakan di jaringan saraf tiruan propagasi mundur? [Tutup]

143

Saya telah membaca beberapa hal di jaringan saraf dan saya memahami prinsip umum jaringan saraf lapisan tunggal. Saya memahami kebutuhan akan lapisan tambahan, tetapi mengapa fungsi aktivasi nonlinier digunakan?

Pertanyaan ini diikuti oleh pertanyaan ini: Apa turunan dari fungsi aktivasi yang digunakan untuk propagasi mundur?

corazza.dll
sumber
jawaban terbaik dari semua di sini dalam kecerdasan buatan
eusoubrasileiro

Jawaban:

170

Tujuan dari fungsi aktivasi adalah untuk memperkenalkan non-linearitas ke dalam jaringan

pada gilirannya, ini memungkinkan Anda untuk memodelkan variabel respons (alias variabel target, label kelas, atau skor) yang bervariasi secara non-linear dengan variabel penjelasnya

non-linear berarti bahwa keluaran tidak dapat direproduksi dari kombinasi linier dari masukan (yang tidak sama dengan keluaran yang dirender menjadi garis lurus - kata untuk ini adalah affine ).

Cara lain untuk memikirkannya: tanpa fungsi aktivasi non-linier di jaringan, NN, tidak peduli berapa banyak lapisan yang dimilikinya, akan berperilaku seperti perceptron satu lapis, karena menjumlahkan lapisan ini hanya akan memberi Anda fungsi linier lainnya (lihat definisi di atas).

>>> in_vec = NP.random.rand(10)
>>> in_vec
  array([ 0.94,  0.61,  0.65,  0.  ,  0.77,  0.99,  0.35,  0.81,  0.46,  0.59])

>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
 array([ 0.74,  0.54,  0.57,  0.  ,  0.65,  0.76,  0.34,  0.67,  0.43,  0.53])

Fungsi aktivasi umum yang digunakan dalam backprop ( garis singgung hiperbolik ) dievaluasi dari -2 hingga 2:

masukkan deskripsi gambar di sini

doug
sumber
15
Mengapa kita ingin menghilangkan linearitas?
corazza
18
Jika data yang ingin kita modelkan adalah non-linier maka kita perlu memperhitungkannya dalam model kita.
doug
39
Satu kalimat jawaban: << tidak peduli berapa banyak lapisan akan berperilaku seperti satu perceptron (karena fungsi linier ditambahkan bersama-sama hanya memberi Anda fungsi linier). >> . Bagus!
Otonom
12
Ini sedikit menyesatkan - seperti yang disebutkan eski, fungsi aktivasi linier yang diperbaiki sangat berhasil, dan jika tujuan kita hanya untuk memodelkan / memperkirakan fungsi, menghilangkan non-linearitas di semua langkah belum tentu merupakan jawaban yang benar. Dengan potongan linier yang cukup, Anda dapat mendekati hampir semua fungsi non-linier dengan tingkat akurasi yang tinggi. Saya menemukan ini penjelasan yang bagus tentang mengapa unit linier yang diperbaiki bekerja: stats.stackexchange.com/questions/141960/…
tegan
12
@tegan Rectified linear fungsi aktivasi yang non-linear. Saya tidak yakin apa hubungannya komentar Anda dengan jawabannya.
endolith
53

Fungsi aktivasi linier dapat digunakan, namun pada kesempatan yang sangat terbatas. Sebenarnya untuk memahami fungsi aktivasi dengan lebih baik, penting untuk melihat kuadrat terkecil biasa atau hanya regresi linier. Regresi linier bertujuan untuk menemukan bobot optimal yang menghasilkan efek vertikal minimal antara variabel penjelas dan target, jika digabungkan dengan input. Singkatnya, jika keluaran yang diharapkan mencerminkan regresi linier seperti yang ditunjukkan di bawah ini maka fungsi aktivasi linier dapat digunakan: (Gambar Atas). Tetapi seperti pada gambar kedua di bawah fungsi linier tidak akan menghasilkan hasil yang diinginkan: (Gambar tengah). Namun, fungsi non-linier seperti yang ditunjukkan di bawah ini akan memberikan hasil yang diinginkan:

masukkan deskripsi gambar di sini

Fungsi aktivasi tidak bisa linier karena jaringan saraf dengan fungsi aktivasi linier hanya efektif sedalam satu lapisan, terlepas dari seberapa kompleks arsitekturnya. Masukan ke jaringan biasanya berupa transformasi linier (masukan * bobot), tetapi dunia nyata dan masalahnya bersifat non-linier. Untuk membuat data yang masuk menjadi nonlinier, kita menggunakan pemetaan nonlinier yang disebut fungsi aktivasi. Fungsi aktivasi adalah fungsi pengambilan keputusan yang menentukan keberadaan fitur saraf tertentu. Itu dipetakan antara 0 dan 1, di mana nol berarti tidak adanya fitur, sedangkan satu berarti kehadirannya. Sayangnya, perubahan kecil yang terjadi pada bobot tidak dapat tercermin dalam nilai aktivasi karena hanya dapat mengambil 0 atau 1. Oleh karena itu, fungsi nonlinier harus kontinu dan dapat dibedakan di antara rentang ini. Jaringan neural harus dapat mengambil masukan apa pun dari -infinity hingga + infinite, tetapi harus dapat memetakannya ke output yang berkisar antara {0,1} atau antara {-1,1} dalam beberapa kasus - sehingga kebutuhan untuk fungsi aktivasi. Non-linearitas diperlukan dalam fungsi aktivasi karena tujuannya dalam jaringan neural adalah menghasilkan batas keputusan nonlinier melalui kombinasi bobot dan input non-linier.

chibole
sumber
1
+ Satu, maka dapat disimpulkan bahwa fungsi nonlinier digunakan untuk menetapkan batas sempurna?
SIslam
1
Ya persis. Jika hanya menghasilkan 0 atau 1, ia dapat menghasilkan 0,4 atau 0,78, membuatnya terus menerus selama rentang batas.
chibole
3
Jaringan neural harus dapat menerima masukan apa pun dari -infinity hingga + infinite, tetapi harus dapat memetakannya ke keluaran yang berkisar antara {0,1} atau antara {-1,1} ... ini mengingatkan saya Batasan ULT itu adalah bahwa itu hanya boleh digunakan dalam lapisan Tersembunyi Model Jaringan Neural.
Cloud Cho
22

Jika kita hanya mengizinkan fungsi aktivasi linier dalam jaringan neural, keluarannya hanya berupa transformasi linier masukan, yang tidak cukup untuk membentuk aproksimeter fungsi universal . Jaringan seperti itu hanya dapat direpresentasikan sebagai perkalian matriks, dan Anda tidak akan dapat memperoleh perilaku yang sangat menarik dari jaringan tersebut.

Hal yang sama berlaku untuk kasus di mana semua neuron memiliki fungsi aktivasi affine (yaitu fungsi aktivasi pada bentuk f(x) = a*x + c, di mana adan cadalah konstanta, yang merupakan generalisasi fungsi aktivasi linier), yang hanya akan menghasilkan transformasi affine dari input ke output. , yang juga tidak terlalu menarik.

Jaringan saraf mungkin berisi neuron dengan fungsi aktivasi linier, seperti di lapisan keluaran, tetapi ini memerlukan perusahaan neuron dengan fungsi aktivasi non-linier di bagian lain jaringan.

Catatan: Pengecualian yang menarik adalah gradien sintetis DeepMind , di mana mereka menggunakan jaringan neural kecil untuk memprediksi gradien di jalur propagasi mundur yang diberi nilai aktivasi, dan mereka menemukan bahwa mereka dapat lolos dengan menggunakan jaringan saraf tanpa lapisan tersembunyi dan dengan hanya aktivasi linier.

Halo selamat tinggal
sumber
1
Fungsi orde tinggi dapat diperkirakan dengan fungsi aktivasi linier menggunakan beberapa lapisan tersembunyi. Teorema aproksimasi universal dikhususkan untuk MLP dengan hanya satu lapisan tersembunyi.
eski
Sebenarnya, saya yakin Anda benar dalam pernyataan Anda tentang fungsi aktivasi affine yang menghasilkan transformasi affine, tetapi fakta bahwa transformasi tersebut dipelajari melalui propagasi mundur (atau cara lain) membuatnya tidak sepenuhnya tidak berguna sejauh menyangkut pertanyaan asli.
eski
4
@eski Tidak, Anda tidak dapat memperkirakan fungsi orde tinggi dengan hanya fungsi aktivasi linier, Anda hanya dapat memodelkan fungsi dan transformasi linier (atau affine, jika Anda memiliki simpul konstan tambahan di masing-masing kecuali lapisan terakhir), tidak peduli berapa banyak lapisan Anda memiliki.
HelloGoodbye
Apakah benar untuk mengatakan bahwa tujuan utama fungsi aktivasi adalah untuk memungkinkan jaringan saraf menghasilkan batas keputusan non-linier?
stackoverflowuser2010
@ stackoverflowuser2010 Itu akan menjadi salah satu cara untuk melihatnya. Tetapi ada lebih dari itu fungsi aktivasi. Artikel Wikipedia tentang fungsi aktivasi mencantumkan beberapa fungsi aktivasi, semua (kecuali satu) di antaranya nonlinier, dan membandingkan kualitas berbeda yang dapat dimiliki oleh fungsi aktivasi.
HelloGoodbye
9

Jaringan neural umpan-maju dengan aktivasi linier dan sejumlah lapisan tersembunyi setara dengan hanya jaringan neural linier tanpa lapisan tersembunyi. Misalnya mari kita pertimbangkan jaringan saraf dalam gambar dengan dua lapisan tersembunyi dan tanpa aktivasi masukkan deskripsi gambar di sini

y = h2 * W3 + b3 
  = (h1 * W2 + b2) * W3 + b3
  = h1 * W2 * W3 + b2 * W3 + b3 
  = (x * W1 + b1) * W2 * W3 + b2 * W3 + b3 
  = x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3 
  = x * W' + b'

Kita dapat melakukan langkah terakhir karena kombinasi beberapa transformasi linier dapat diganti dengan satu transformasi dan kombinasi beberapa suku bias hanyalah satu bias. Hasilnya sama bahkan jika kita menambahkan beberapa aktivasi linier.

Jadi kita bisa mengganti jaringan saraf ini dengan jaringan saraf tiruan satu lapisan yang dapat diperluas ke nlapisan. Ini menunjukkan penambahan lapisan tidak meningkatkan daya aproksimasi jaringan neural linier sama sekali. Kita membutuhkan fungsi aktivasi non-linier untuk mendekati fungsi non-linier dan sebagian besar masalah dunia nyata sangat kompleks dan non-linier. Faktanya ketika fungsi aktivasi non-linier, maka jaringan saraf dua lapis dengan jumlah unit tersembunyi yang cukup besar dapat dibuktikan sebagai penduga fungsi universal.

xashru
sumber
5

"Makalah ini menggunakan Teorema Stone-Weierstrass dan cosine squasher of Gallant and White untuk menetapkan bahwa arsitektur jaringan feedforward multilayer standar yang menggunakan fungsi squashing dapat mendekati hampir semua fungsi yang diinginkan dengan tingkat akurasi yang diinginkan, asalkan cukup banyak yang tersembunyi unit tersedia. " ( Hornik et al., 1989, Neural Networks )

Fungsi squashing misalnya fungsi aktivasi nonlinier yang dipetakan ke [0,1] seperti fungsi aktivasi sigmoid.

alfa
sumber
3

Ada kalanya jaringan linier murni dapat memberikan hasil yang bermanfaat. Katakanlah kita memiliki jaringan tiga lapisan dengan bentuk (3,2,3). Dengan membatasi lapisan tengah menjadi hanya dua dimensi, kita mendapatkan hasil yaitu "bidang yang paling sesuai" di ruang tiga dimensi asli.

Tetapi ada cara yang lebih mudah untuk menemukan transformasi linier dari bentuk ini, seperti NMF, PCA dll. Namun, ini adalah kasus di mana jaringan multi-lapis TIDAK berperilaku dengan cara yang sama seperti perceptron satu lapis.

markemus
sumber
2

Untuk memahami logika di balik fungsi aktivasi non-linier, pertama Anda harus memahami mengapa fungsi aktivasi digunakan. Secara umum masalah dunia nyata membutuhkan solusi non linier yang tidak sepele. Jadi kita membutuhkan beberapa fungsi untuk menghasilkan non-linearitas. Pada dasarnya apa yang dilakukan fungsi aktivasi adalah menghasilkan non-linearitas ini sambil memetakan nilai input ke dalam rentang yang diinginkan.

Namun, fungsi aktivasi linier dapat digunakan dalam rangkaian kasus yang sangat terbatas di mana Anda tidak memerlukan lapisan tersembunyi seperti regresi linier. Biasanya, tidak ada gunanya membuat jaringan saraf untuk masalah semacam ini karena terlepas dari jumlah lapisan tersembunyi, jaringan ini akan menghasilkan kombinasi input linier yang dapat dilakukan hanya dalam satu langkah. Dengan kata lain, ini berperilaku seperti satu lapisan.

Ada juga beberapa sifat yang lebih diinginkan untuk fungsi aktivasi seperti diferensiabilitas berkelanjutan . Karena kami menggunakan propagasi mundur, fungsi yang kami hasilkan harus dapat dibedakan di titik mana pun. Saya sangat menyarankan Anda untuk memeriksa halaman wikipedia untuk fungsi aktivasi dari sini untuk lebih memahami topiknya.

Alican Şafak Özdek
sumber
2

Beberapa jawaban bagus ada di sini. Ada baiknya untuk menunjukkan buku "Pengenalan Pola dan Pembelajaran Mesin" oleh Christopher M. Bishop. Ini adalah buku yang layak untuk dirujuk untuk mendapatkan wawasan yang lebih dalam tentang beberapa konsep terkait ML. Kutipan dari halaman 229 (bagian 5.1):

Jika fungsi aktivasi dari semua unit tersembunyi dalam jaringan dianggap linier, maka untuk jaringan semacam itu kita selalu dapat menemukan jaringan yang setara tanpa unit tersembunyi. Ini mengikuti dari fakta bahwa komposisi transformasi linier berurutan itu sendiri merupakan transformasi linier. Namun, jika jumlah unit tersembunyi lebih kecil daripada jumlah unit input atau output, maka transformasi yang dapat dihasilkan jaringan bukanlah transformasi linier yang paling umum dari input ke output karena informasi hilang dalam pengurangan dimensi di unit tersembunyi. Dalam Bagian 12.4.2, kami menunjukkan bahwa jaringan unit linier memunculkan analisis komponen utama. Secara umum, bagaimanapun, ada sedikit minat dalam jaringan multilayer dari unit linier.

Hari
sumber
1

Seingat saya - fungsi sigmoid digunakan karena turunannya yang sesuai dengan algoritma BP mudah dihitung, sesuatu yang sederhana seperti f (x) (1-f (x)). Saya tidak ingat persis matematika. Sebenarnya fungsi apapun dengan turunannya bisa digunakan.

Anton
sumber
7
Fungsinya tetap ingin ditingkatkan secara monoton, seingat saya. Jadi, tidak ada fungsi apapun .
Novak
1

NN berlapis dari beberapa neuron dapat digunakan untuk mempelajari masalah yang tak terpisahkan secara linier. Misalnya fungsi XOR dapat diperoleh dengan dua lapisan dengan fungsi aktivasi langkah.

David
sumber
1

Penting untuk menggunakan fungsi aktivasi nonlinier di jaringan saraf, terutama di NN yang dalam dan propagasi mundur. Menurut pertanyaan yang diajukan dalam topik, pertama saya akan mengatakan alasan perlunya menggunakan fungsi aktivasi nonlinier untuk propagasi mundur.

Sederhananya: jika fungsi aktivasi linier digunakan, turunan dari fungsi biaya adalah konstanta terhadap input (wrt), sehingga nilai input (ke neuron) tidak mempengaruhi pembaharuan bobot . Artinya, kami tidak dapat mengetahui bobot mana yang paling efektif dalam memberikan hasil yang baik dan oleh karena itu kami terpaksa mengubah semua bobot secara merata.

Lebih Dalam: Secara umum, bobot diperbarui sebagai berikut:

W_new = W_old - Learn_rate * D_loss

Artinya bobot baru sama dengan bobot lama dikurangi turunan fungsi biaya. Jika fungsi aktivasi adalah fungsi linier, maka masukan wrt turunannya adalah konstanta, dan nilai masukan tidak berpengaruh langsung pada pembaruan bobot.

Misalnya, kami bermaksud memperbarui bobot neuron lapisan terakhir menggunakan propagasi mundur. Kita perlu menghitung gradien dari fungsi bobot wrt bobot. Dengan aturan rantai kami memiliki:

masukkan deskripsi gambar di sini

h dan y adalah (perkiraan) keluaran neuron dan nilai keluaran aktual, masing-masing. Dan x adalah masukan dari neuron. grad (f) diturunkan dari fungsi aktivasi input wrt. Nilai yang dihitung di atas (dengan faktor) dikurangi dari bobot saat ini dan bobot baru diperoleh. Sekarang kita dapat membandingkan kedua jenis fungsi aktivasi ini dengan lebih jelas.

1- Jika fungsi pengaktifannya adalah fungsi linier , seperti: F (x) = 2 * x

kemudian:

masukkan deskripsi gambar di sini

bobot barunya adalah:

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, semua bobot diperbarui secara merata dan tidak peduli berapa nilai inputnya !!

2- Tetapi jika kita menggunakan fungsi aktivasi non-linier seperti Tanh (x) maka:

masukkan deskripsi gambar di sini

dan:

masukkan deskripsi gambar di sini

dan sekarang kita dapat melihat efek langsung dari input dalam memperbarui bobot! nilai masukan yang berbeda membuat bobot yang berbeda berubah .

Saya rasa hal di atas sudah cukup untuk menjawab pertanyaan tentang topik tetapi ada gunanya menyebutkan manfaat lain dari penggunaan fungsi aktivasi non-linier.

Seperti yang disebutkan dalam jawaban lain, non-linearitas memungkinkan NN memiliki lebih banyak lapisan tersembunyi dan NN yang lebih dalam. Urutan lapisan dengan fungsi penggerak linier dapat digabungkan sebagai lapisan (dengan kombinasi fungsi sebelumnya) dan praktis merupakan jaringan saraf dengan lapisan tersembunyi, yang tidak memanfaatkan manfaat NN yang dalam.

Fungsi aktivasi non-linier juga dapat menghasilkan keluaran yang dinormalisasi.

mohammad javad
sumber
1

Jaringan Neural digunakan dalam pengenalan pola. Dan penemuan pola adalah teknik yang sangat non-linear.

Misalkan untuk argumen kita menggunakan fungsi aktivasi linier y = wX + b untuk setiap neuron tunggal dan mengatur sesuatu seperti jika y> 0 -> kelas 1 lain kelas 0.

Sekarang kita dapat menghitung kerugian kita menggunakan kerugian kesalahan persegi dan menyebarkannya kembali sehingga model belajar dengan baik, benar?

SALAH.

  • Untuk lapisan tersembunyi terakhir, nilai yang diperbarui adalah w {l} = w {l} - (alpha) * X.

  • Untuk lapisan tersembunyi terakhir kedua, nilai yang diperbarui adalah w {l-1} = w {l-1} - (alpha) * w {l} * X.

  • Untuk lapisan tersembunyi terakhir ke engan, nilai yang diperbarui adalah w {i} = w {i} - (alpha) * w {l} ... * w {i + 1} * X.

Hal ini menyebabkan kita mengalikan semua matriks bobot sehingga menghasilkan kemungkinan: A) w {i} hampir tidak berubah karena hilangnya gradien B) w {i} berubah secara dramatis dan tidak akurat karena gradien C yang meledak) w {i} berubah dengan baik cukup untuk memberi kami skor kecocokan yang baik

Jika C terjadi, itu berarti masalah klasifikasi / prediksi kami kemungkinan besar adalah regresi linier / logistik sederhana dan tidak pernah memerlukan jaringan saraf sejak awal!

Tidak peduli seberapa kuat atau baik hyper-tuned NN Anda, jika Anda menggunakan fungsi aktivasi linier, Anda tidak akan pernah bisa mengatasi masalah pengenalan pola non-linier.

Kaustubh J
sumber
-3

Itu sama sekali bukan persyaratan. Faktanya, fungsi aktivasi linier yang diperbaiki sangat berguna dalam jaringan neural yang besar. Menghitung gradien jauh lebih cepat, dan itu menyebabkan ketersebaran dengan menyetel batas minimum pada 0.

Lihat berikut ini untuk detail lebih lanjut: https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


Edit:

Telah terjadi beberapa diskusi mengenai apakah fungsi aktivasi linier yang diperbaiki dapat disebut sebagai fungsi linier.

Ya, secara teknis ini adalah fungsi nonlinier karena tidak linier pada titik x = 0, namun tetap benar untuk mengatakan bahwa ia linier di semua titik lain, jadi menurut saya tidak berguna untuk melakukan nitpick di sini,

Saya bisa saja memilih fungsi identitas dan itu akan tetap benar, tetapi saya memilih ULT sebagai contoh karena popularitasnya baru-baru ini.

eski
sumber
9
Fungsi aktivasi linier yang diperbaiki juga non-linier (terlepas dari namanya). Ini hanya linier untuk nilai positif
Plankalkül
4
Anda benar secara teknis, ini tidak linier di seluruh domain, khususnya pada x = 0 (sebenarnya linier untuk x <0, karena f (x) = 0 adalah fungsi linier). Ini juga tidak dapat dibedakan sehingga fungsi gradien juga tidak dapat dihitung sepenuhnya, tetapi dalam praktiknya, hal-hal teknis ini mudah diatasi.
eski
4
Dia tidak hanya benar secara teknis, dia juga benar dalam praktiknya (atau semacamnya). Non-linearitas ULT yang membuatnya berguna. Jika mereka linier, mereka akan memiliki fungsi aktivasi pada formulir f(x) = a*x(karena itu adalah satu-satunya jenis fungsi aktivasi linier yang ada), yang tidak berguna sebagai fungsi aktivasi (kecuali jika Anda menggabungkannya dengan fungsi aktivasi non-linier ).
HelloGoodbye
11
Rectified Linear Unit (ReLU) tidak linier, dan bukan hanya "detail kecil" yang sering direcoki orang, ini adalah alasan penting yang signifikan mengapa ini berguna untuk memulai. Jaringan saraf dengan matriks identitas atau unit linier biasa yang digunakan sebagai fungsi aktivasi tidak akan dapat memodelkan fungsi non linier. Hanya karena itu linier di atas 0 tidak berarti itu secara praktis merupakan fungsi linier. ReLU yang bocor adalah "linier" di bawah 0 juga, tetapi ini masih bukan fungsi linier dan pasti tidak bisa diganti begitu saja oleh fungsi identitas. Nonlinier jelas merupakan persyaratan.
Essam Al-Mansouri
3
Ini sebenarnya sebuah konsep yang disebut fungsi linier sepotong-sepotong.
eski