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?
Jawaban:
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 .x h y f x h g h y
Jadi aktivasi lapisan tersembunyi adalah dan output dari jaringan adalah .f(x) g(f(x))
Mengapa memiliki dua fungsi ( dan ) alih-alih hanya satu?f g
Jika tingkat kompleksitas per fungsi terbatas, maka dapat menghitung hal-hal yang tidak dapat dilakukan secara terpisah oleh dan .g(f(x)) f g
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:f g
Fungsi lapisan pertama:
Fungsi lapisan kedua:
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.
sumber
f(x) = max(x, 0)
("unit linear yang diperbaiki") sering bekerja lebih baik, meskipun tidak memiliki banyak properti tersebut.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.
sumber
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
Ini berarti bahwa nilai
hidden_1
sangat sensitif terhadap nilaiinput_1
, sama sekali tidak sensitif terhadapinput_2
dan hanya sedikit sensitif terhadapinput_3
.Jadi Anda bisa mengatakan bahwa
hidden_1
menangkap aspek tertentu dari input, yang Anda sebutinput_1
aspek "penting".Output dari
hidden_1
biasanya 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 bahwainput_1
itu 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_1
penting, TETAPI JUGAinput_2
menghilangkan begitu pentingnya":atau
input_1
daninput_3
telah "berbagi" pentingnya: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_1
arah.Mari kita tengok
hidden_1
lagi, dari atas. Setelah nilainyainput_1
cukup besar, output dari fungsi aktivasi sigmoid hanya akan tetap pada 1, itu tidak akan menjadi lebih besar . Dengan kata lain, semakin banyak tidakinput_1
akan 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
sumber
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, ...)
sumber