Apa yang disembunyikan oleh lapisan tersembunyi dalam jaringan saraf?

187

Saya yakin banyak orang akan merespons dengan tautan ke 'biarkan saya mencari Google untuk Anda', jadi saya ingin mengatakan bahwa saya telah mencoba untuk mencari tahu ini jadi tolong maafkan kurangnya pemahaman saya di sini, tapi saya tidak tahu bagaimana caranya implementasi praktis dari jaringan saraf benar-benar berfungsi.

Saya memahami lapisan input dan cara menormalkan data, saya juga memahami unit bias, tetapi ketika datang ke lapisan tersembunyi, apa perhitungan aktual di lapisan itu, dan bagaimana memetakan ke output hanya sedikit berkabut. Saya telah melihat diagram dengan tanda tanya di lapisan tersembunyi, fungsi boolean seperti AND / OR / XOR, fungsi aktivasi, dan input node yang memetakan ke semua unit tersembunyi dan input node yang memetakan masing-masing ke beberapa unit tersembunyi masing-masing. Saya hanya punya beberapa pertanyaan tentang aspek praktis. Tentu saja, penjelasan sederhana tentang seluruh proses jaringan saraf seperti yang akan Anda jelaskan kepada seorang anak, akan luar biasa.

Komputasi apa yang dilakukan di lapisan tersembunyi?

Bagaimana perhitungan itu dipetakan ke lapisan output?

Bagaimana cara kerja lapisan ouput? De-normalisasi data dari lapisan tersembunyi?

Mengapa beberapa lapisan dalam lapisan input terhubung ke lapisan tersembunyi dan ada juga yang tidak?

FAtBalloon
sumber
13
Orang-orang di sekitar sini baik, saya belum pernah melihat jawaban "biarkan saya mencari Google untuk Anda" tetapi banyak jawaban yang mengejutkan menyeluruh dan berwawasan terhadap apa yang pada awalnya tampak sebagai pertanyaan mendasar. Sayangnya, saya tidak dapat membantu Anda dengan Anda tetapi tampaknya cukup relevan sehingga saya dengan senang hati memberikan suaranya.
Gala
4
Terima kasih atas komentar dan suara Gael, saya mungkin agak letih oleh komunitas SO karena kita semua tahu bagaimana orang-orang itu bisa mendapatkan :) Senang melihat lebih banyak semangat kolaborasi di sini sebagai lawan mencoba untuk mendapatkan lencana dan poin dengan mengedit / menutup pertanyaan.
FAtBalloon
1
Saya tidak ahli dalam jaringan saraf khusus, meskipun saya terlibat dalam aplikasi dan metode mereka. Jawaban saya yang mungkin tidak terlalu membantu adalah bahwa perhitungan spesifik dalam tersembunyi bergantung pada 'fungsi biaya' yang Anda terapkan pada ouput Anda, yaitu, apa yang Anda coba capai. Misalnya, jika Anda ingin mengelompokkan elemen input ke dalam kumpulan berkerumun, Anda akan menghitung jarak antara elemen di lapisan tersembunyi. Ini dapat melalui berbagai iterasi dan siklus optimisasi dalam lapisan ini, sampai Anda memenuhi kriteria kesalahan yang memungkinkan proses untuk `meninggalkan 'lapisan ini.
Lucozade

Jawaban:

230

Versi tiga kalimat:

  • Setiap lapisan dapat menerapkan fungsi apa pun yang Anda inginkan ke lapisan sebelumnya (biasanya transformasi linear diikuti oleh squashing nonlinearity).

  • Tugas lapisan tersembunyi adalah mengubah input menjadi sesuatu yang dapat digunakan lapisan keluaran.

  • Lapisan output mengubah aktivasi lapisan tersembunyi ke skala apa pun yang Anda inginkan.

Seperti Anda 5:

Jika Anda ingin komputer memberi tahu Anda jika ada bus dalam gambar, komputer mungkin akan lebih mudah jika memiliki alat yang tepat.

Jadi pendeteksi bus Anda mungkin terbuat dari pendeteksi roda (untuk membantu memberi tahu Anda bahwa itu kendaraan) dan pendeteksi kotak (karena bus berbentuk seperti kotak besar) dan pendeteksi ukuran (untuk memberitahu Anda bahwa terlalu besar untuk menjadi mobil) ). Ini adalah tiga elemen dari lapisan tersembunyi Anda: mereka bukan bagian dari gambar mentah, mereka adalah alat yang Anda dirancang untuk membantu Anda mengidentifikasi bus.

Jika ketiga detektor itu hidup (atau mungkin jika mereka sangat aktif), maka ada kemungkinan Anda memiliki bus di depan Anda.

Jaring saraf bermanfaat karena ada alat yang bagus (seperti backpropagation) untuk membangun banyak detektor dan menyatukannya.


Seperti kamu sudah dewasa

Jaringan saraf umpan maju menerapkan serangkaian fungsi pada data. Fungsi yang tepat akan tergantung pada jaringan saraf yang Anda gunakan: paling sering, fungsi-fungsi ini masing-masing menghitung transformasi linear dari lapisan sebelumnya, diikuti oleh non-linear squashing. Kadang-kadang fungsi akan melakukan sesuatu yang lain (seperti menghitung fungsi logis dalam contoh Anda, atau rata-rata lebih dari piksel yang berdekatan dalam suatu gambar). Jadi peran dari berbagai lapisan dapat bergantung pada fungsi apa yang sedang dihitung, tetapi saya akan mencoba untuk menjadi sangat umum.

Mari kita sebut vektor input , aktivasi lapisan tersembunyi , dan aktivasi keluaran . Anda memiliki beberapa fungsi yang memetakan dari ke dan fungsi lain yang memetakan dari ke . xhyfxhghy

Jadi aktivasi lapisan tersembunyi adalah dan output dari jaringan adalah .f(x)g(f(x))

Mengapa memiliki dua fungsi ( dan ) alih-alih hanya satu?fg

Jika tingkat kompleksitas per fungsi terbatas, maka dapat menghitung hal-hal yang tidak dapat dilakukan secara terpisah oleh dan . g(f(x))fg


Contoh dengan fungsi logis:

Misalnya, jika kami hanya mengizinkan dan menjadi operator logis sederhana seperti "AND", "OR", dan "NAND", maka Anda tidak dapat menghitung fungsi lain seperti "XOR" hanya dengan salah satunya. Di sisi lain, kita dapat menghitung "XOR" jika kita ingin melapisi fungsi-fungsi ini di atas satu sama lain:fg

Fungsi lapisan pertama:

  • Pastikan bahwa setidaknya satu elemen adalah "BENAR" (menggunakan OR)
  • Pastikan mereka tidak semuanya "BENAR" (menggunakan NAND)

Fungsi lapisan kedua:

  • Pastikan kedua kriteria lapisan pertama terpenuhi (menggunakan DAN)

Output jaringan hanyalah hasil dari fungsi kedua ini. Lapisan pertama mengubah input menjadi sesuatu yang dapat digunakan lapisan kedua sehingga seluruh jaringan dapat melakukan XOR.


Contoh dengan gambar:

Geser 61 dari pembicaraan ini - juga tersedia di sini sebagai gambar tunggal - menunjukkan (satu cara untuk memvisualisasikan) apa yang dicari oleh lapisan tersembunyi dalam jaringan saraf tertentu.

Lapisan pertama mencari potongan tepi pendek pada gambar: ini sangat mudah ditemukan dari data piksel mentah, tetapi mereka tidak terlalu berguna dengan sendirinya untuk memberi tahu Anda jika Anda melihat wajah atau bus atau gajah. .

Lapisan berikutnya menyusun tepi: jika tepi-tepi dari lapisan tersembunyi disatukan dengan cara tertentu, maka salah satu pelindung mata di tengah kolom paling kiri mungkin menyala. Akan sulit untuk membuat satu lapisan yang sangat bagus dalam menemukan sesuatu yang begitu spesifik dari piksel mentah: detektor mata jauh lebih mudah untuk dibangun dari detektor tepi daripada dari piksel mentah.

Lapisan berikutnya menyusun detektor mata dan detektor hidung menjadi wajah. Dengan kata lain, ini akan menyala ketika detektor mata dan detektor hidung dari lapisan sebelumnya menyala dengan pola yang tepat. Ini sangat bagus dalam mencari jenis wajah tertentu: jika satu atau lebih dari mereka menyala, maka layer output Anda harus melaporkan bahwa wajah hadir.

Ini berguna karena detektor wajah mudah dibangun dari detektor mata dan detektor hidung, tetapi sangat sulit dibangun dari intensitas piksel.

Jadi setiap layer membuat Anda semakin jauh dari piksel mentah dan lebih dekat ke tujuan akhir Anda (misalnya deteksi wajah atau deteksi bus).


Jawaban untuk berbagai macam pertanyaan lainnya

"Mengapa beberapa lapisan di lapisan input terhubung ke lapisan tersembunyi dan ada yang tidak?"

Node yang terputus dalam jaringan disebut node "bias". Ada penjelasan yang sangat bagus di sini . Jawaban singkatnya adalah mereka seperti mencegat istilah dalam regresi.

"Dari mana gambar" eye detector "dalam contoh gambar berasal?"

Saya belum memeriksa ulang gambar-gambar spesifik yang saya tautkan, tetapi secara umum, visualisasi ini menunjukkan sekumpulan piksel pada lapisan input yang memaksimalkan aktivitas neuron yang sesuai. Jadi jika kita menganggap neuron sebagai detektor mata, ini adalah gambar yang dianggap paling mirip mata oleh neuron. Orang biasanya menemukan kumpulan piksel ini dengan prosedur pengoptimalan (mendaki bukit).

Dalam makalah ini oleh beberapa orang Google dengan salah satu jaring saraf terbesar di dunia, mereka menunjukkan neuron "detektor wajah" dan neuron "detektor kucing" dengan cara ini, serta cara kedua: Mereka juga menunjukkan gambar aktual yang mengaktifkan neuron paling kuat (gambar 3, gambar 16). Pendekatan kedua bagus karena menunjukkan betapa fleksibel dan nonlinier jaringannya - "detektor" tingkat tinggi ini peka terhadap semua gambar ini, meskipun mereka tidak terlalu mirip pada tingkat piksel.


Beri tahu saya jika ada yang tidak jelas di sini atau ada pertanyaan lain.

David J. Harris
sumber
2
Jadi, apakah hanya ada satu algoritma yang didefinisikan untuk setiap node tunggal pada layer yang diberikan dan bobotnya adalah apa yang membuat outputnya berbeda? Atau dapatkah Anda memprogram setiap node pada layer menjadi berbeda?
FAtBalloon
3
@ GeorgeMcDowd ini menjadi masalah utama: melihat piksel dan mengidentifikasi bus sulit, seperti yang Anda sarankan. Untungnya, melihat piksel dan menemukan tepiannya mudah - itu saja yang coba dilakukan lapisan tersembunyi. Lapisan berikutnya mencoba membuat kesimpulan berdasarkan tepi, yang jauh lebih mudah daripada mencoba melakukannya berdasarkan piksel.
David J. Harris
4
JADI seharusnya memberi Anda beberapa hadiah lain (dari sekadar poin) untuk waktu dan upaya yang Anda berikan dalam jawaban ini!
samsamara
1
@ JoshuaEnfield Saya pikir logika pada 1980-an adalah kombinasi yang mirip dengan cara orang berpikir otak bekerja, bahwa ia dapat dibedakan di mana-mana, dan bahwa nilainya dibatasi seperti yang Anda sebutkan. Sejak itu, orang telah menemukan bahwa f(x) = max(x, 0)("unit linear yang diperbaiki") sering bekerja lebih baik, meskipun tidak memiliki banyak properti tersebut.
David J. Harris
2
Contoh bus dan rangkaian fungsi baru saja berhasil. Tidak mengerti mengapa buku teks tidak bisa deskriptif.
drecute
12

Saya akan mencoba menambahkan deskripsi operasional yang intuitif ...

Cara intuitif yang baik untuk berpikir tentang jaringan saraf adalah dengan memikirkan apa yang coba dilakukan oleh model regresi linier. Regresi linier akan mengambil beberapa input dan menghasilkan model linier yang mengambil setiap nilai input dikalikan dengan beberapa koefisien pembobotan optimal model dan mencoba memetakan jumlah hasil tersebut ke respons output yang sangat sesuai dengan output sebenarnya. Koefisien ditentukan dengan menemukan nilai-nilai yang akan meminimalkan beberapa metrik kesalahan antara nilai output yang diinginkan dan nilai yang dipelajari oleh model. Cara lain untuk mengatakannya adalah bahwa model linier akan mencoba membuat koefisien pengganda untuk setiap input dan menjumlahkan semuanya untuk mencoba menentukan hubungan antara input (berganda) dan (biasanya tunggal) nilai output. Model yang sama hampir dapat dianggap sebagai blok bangunan dasar dari jaringan saraf;

Tetapi unit tunggal perceptron memiliki satu bagian lagi yang akan memproses jumlah data tertimbang secara non-linear. Biasanya menggunakan fungsi squashing (sigmoid, atau tanh) untuk mencapai ini. Jadi Anda memiliki unit dasar dari lapisan tersembunyi, yang merupakan blok yang akan menjumlahkan satu set input berbobot - kemudian meneruskan tanggapan yang dijumlahkan ke fungsi non-linear untuk membuat respons simpul keluaran (lapisan tersembunyi). Unit bias sama seperti dalam regresi linier, offset konstan yang ditambahkan ke setiap node yang akan diproses. Karena blok pemrosesan non-linear, Anda tidak lagi terbatas pada hanya respons linier (seperti pada model regresi linier).

Ok, tetapi ketika Anda memiliki banyak unit perceptron tunggal yang bekerja bersama, masing-masing dapat memiliki pengganda bobot input dan respons yang berbeda (meskipun SEMUA memproses set input yang sama dengan blok non-linear yang sama seperti yang dijelaskan sebelumnya). Apa yang membuat tanggapan berbeda adalah bahwa masing-masing memiliki bobot koefisien yang berbeda yang dipelajari oleh jaringan saraf melalui pelatihan (beberapa bentuk termasuk gradient descent). Hasil dari semua perceptrons kemudian diproses lagi dan diteruskan ke lapisan keluaran, sama seperti masing-masing blok diproses. Pertanyaannya kemudian adalah bagaimana bobot yang benar ditentukan untuk semua balok?

Cara umum untuk mempelajari bobot yang benar adalah dengan memulai dengan bobot acak dan mengukur respons kesalahan antara output aktual yang sebenarnya dan output model yang dipelajari. Kesalahan biasanya akan diteruskan ke belakang melalui jaringan dan algoritma umpan balik akan secara individual menambah atau mengurangi bobot tersebut dengan proporsi terhadap kesalahan. Jaringan akan berulang kali mengulangi dengan meneruskan, mengukur respons keluaran, lalu memperbarui (meneruskan penyesuaian berat mundur) dan mengoreksi bobot sampai beberapa tingkat kesalahan yang memuaskan tercapai. Pada saat itu Anda memiliki model regresi yang bisa lebih fleksibel daripada model regresi linier, inilah yang biasa disebut sebagai penduga fungsi universal.

Salah satu cara yang benar-benar membantu saya untuk belajar bagaimana jaringan saraf benar-benar beroperasi adalah mempelajari kode implementasi jaringan saraf dan membangunnya. Salah satu penjelasan kode dasar terbaik dapat ditemukan di bab jaringan saraf dari (yang tersedia secara bebas) 'The Scientist and Engineer's guide to DSP' Ch. 26. Sebagian besar ditulis dalam bahasa yang sangat dasar (saya pikir itu fortran) yang benar-benar membantu Anda untuk melihat apa yang sedang terjadi.

menepuk
sumber
12

Saya akan menjelaskan pandangan saya tentang ini dalam dua langkah: Langkah input ke tersembunyi dan langkah tersembunyi ke output. Saya akan melakukan langkah hidden-to-output terlebih dahulu karena tampaknya kurang menarik (bagi saya).

Tersembunyi-ke-Output

Output dari layer tersembunyi bisa menjadi hal yang berbeda, tetapi untuk sekarang mari kita anggap bahwa mereka keluar dari fungsi aktivasi sigmoidal . Jadi mereka adalah nilai antara 0 dan 1, dan untuk banyak input mereka mungkin hanya 0 dan 1.

Saya suka berpikir tentang transformasi antara output neuron tersembunyi ini dan lapisan output hanya sebagai terjemahan (dalam arti linguistik, bukan arti geometris). Ini tentu benar jika transformasi tidak dapat dibalik , dan jika tidak maka ada sesuatu yang hilang dalam terjemahan. Tetapi pada dasarnya Anda hanya memiliki output neuron tersembunyi dilihat dari perspektif yang berbeda.

Input-to-Hidden

Katakanlah Anda memiliki 3 neuron input (supaya saya dapat dengan mudah menulis beberapa persamaan di sini) dan beberapa neuron tersembunyi. Setiap neuron tersembunyi mendapat input sejumlah input tertimbang , jadi misalnya mungkin

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Ini berarti bahwa nilai hidden_1sangat sensitif terhadap nilai input_1, sama sekali tidak sensitif terhadap input_2dan hanya sedikit sensitif terhadap input_3.

Jadi Anda bisa mengatakan bahwa hidden_1menangkap aspek tertentu dari input, yang Anda sebut input_1aspek "penting".

Output dari hidden_1biasanya dibentuk dengan melewatkan input melalui beberapa fungsi, jadi katakanlah Anda menggunakan fungsi sigmoid . Fungsi ini mengambil nilai antara 0 dan 1; jadi anggap itu sebagai saklar yang mengatakan bahwa input_1itu penting atau tidak.

Jadi itulah yang dilakukan lapisan tersembunyi! Ini mengekstrak aspek , atau fitur dari ruang input.

Sekarang bobot juga bisa negatif! Yang berarti Anda bisa mendapatkan aspek seperti " input_1penting, TETAPI JUGA input_2menghilangkan begitu pentingnya":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

atau input_1dan input_3telah "berbagi" pentingnya:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Lebih Banyak Geometri

Jika Anda tahu beberapa aljabar linier, Anda dapat berpikir secara geometris dalam hal memproyeksikan sepanjang arah tertentu. Dalam contoh di atas, saya memproyeksikan sepanjang input_1arah.

Mari kita tengok hidden_1lagi, dari atas. Setelah nilainya input_1cukup besar, output dari fungsi aktivasi sigmoid hanya akan tetap pada 1, itu tidak akan menjadi lebih besar . Dengan kata lain, semakin banyak tidak input_1akan membuat perbedaan pada output. Demikian pula, jika bergerak dalam arah yang berlawanan (yaitu negatif), maka setelah titik output tidak akan terpengaruh.

Baiklah. Tetapi misalkan kita tidak menginginkan sensitivitas dalam arah ketidakterbatasan dalam arah tertentu, dan kami ingin itu diaktifkan hanya untuk rentang tertentu pada suatu garis. Berarti untuk nilai yang sangat negatif tidak ada efek, dan untuk nilai yang sangat positif tidak ada efek, tetapi untuk nilai antara katakan, 5 dan 16 Anda ingin bangun. Di sinilah Anda akan menggunakan fungsi basis radial untuk fungsi aktivasi Anda.

Ringkasan

Lapisan tersembunyi mengekstrak fitur-fitur ruang input, dan lapisan output menerjemahkannya ke dalam konteks yang diinginkan. Mungkin ada lebih dari itu, apa dengan jaringan multi-layer dan semacamnya, tapi ini yang saya mengerti sejauh ini.

EDIT: Halaman ini dengan grafik interaktifnya yang luar biasa melakukan pekerjaan yang lebih baik daripada yang bisa dilakukan oleh jawaban panjang dan rumit saya di atas: http://neuralnetworksanddeeplearning.com/chap4.html

Rohit Chatterjee
sumber
1
Seperti OP, saya agak bingung tentang lapisan tersembunyi di jaringan saraf. Dalam contoh Anda, bagaimana algoritma NN menemukan bobot untuk neuron hidden_1, hidden_2, dan hidden_3? Dan karena hidden_1, hidden_2, dan hidden_3 diturunkan dari variabel input yang sama, bukankah bobot akan menyatu dengan solusi yang sama?
RobertF
5

Mari kita ambil contoh klasifikasi. Apa yang ingin dilakukan oleh lapisan keluaran adalah memperkirakan probabilitas bersyarat bahwa sampel Anda termasuk dalam kelas tertentu, yaitu seberapa besar kemungkinan sampel tersebut menjadi milik kelas tertentu. Dalam istilah geometris, menggabungkan lapisan secara non-linear melalui fungsi ambang batas memungkinkan jaringan saraf untuk memecahkan masalah non-cembung (pengenalan suara, pengenalan objek, dan sebagainya), yang merupakan yang paling menarik. Dengan kata lain, unit output dapat menghasilkan fungsi keputusan non-cembung seperti yang digambarkan di sini .

Satu dapat melihat unit dalam lapisan tersembunyi sebagai pembelajaran fitur kompleks dari data yang memungkinkan lapisan keluaran untuk dapat lebih baik membedakan satu kelas dari yang lain, untuk menghasilkan batas keputusan yang lebih akurat. Misalnya, dalam hal pengenalan wajah, unit di lapisan pertama mempelajari tepi seperti fitur (mendeteksi tepi pada orientasi dan posisi yang diberikan) dan lapisan yang lebih tinggi belajar menggabungkan mereka menjadi detektor untuk fitur wajah seperti hidung, mulut atau mata. Bobot masing-masing unit tersembunyi mewakili fitur-fitur itu, dan outputnya (dengan asumsi itu adalah sigmoid) mewakili probabilitas bahwa fitur tersebut ada dalam sampel Anda.

Secara umum, arti dari output dan lapisan tersembunyi tergantung pada masalah yang Anda coba selesaikan (regresi, klasifikasi) dan fungsi kerugian yang Anda gunakan (lintas entropi, kesalahan kuadrat terkecil, ...)

jpmuc
sumber