Bagaimana jaringan saraf mengenali gambar?


25

Saya mencoba mempelajari bagaimana Neural Network bekerja pada pengenalan gambar. Saya telah melihat beberapa contoh dan menjadi semakin bingung. Dalam contoh pengenalan huruf dari gambar 20x20, nilai setiap piksel menjadi lapisan input. Jadi 400 neuron. Kemudian lapisan neuron yang tersembunyi dan 26 neuron keluaran. Kemudian latih jaringannya, dan kemudian itu berfungsi, tidak sempurna.

Yang membingungkan saya tentang Neural Network adalah, bagaimana ia belajar tentang apa yang ada di gambar. Anda tidak perlu melakukan thresholding, atau segmentasi, atau pengukuran, entah bagaimana jaringan belajar untuk membandingkan gambar dan mengenali. Itu bagaikan keajaiban bagiku sekarang. Di mana untuk mulai belajar jaringan saraf?


1
Jika saya mengerti dengan benar, jaringan saraf hanya permukaan multidimensi dalam beberapa ruang abstrak, yang ekstrem lokal mengarah pada pilihan yang mungkin. Mengajar jaringan saraf hanya menyesuaikan permukaan abstrak ini dengan tugasnya. Ini pemahaman noobish saya.

Jadi Anda ingin penjelasan ATAU sumber daya untuk mulai bekerja dengan NN? Akan menyenangkan untuk diklarifikasi.

2
(Saat ini) ada kursus gratis yang bagus tentang coursera yang didedikasikan untuk pertanyaan Anda. coursera.org/course/neuralnets
pat

Kelas Coursera NN sepertinya akan maju, tidak sebagus perkenalan. Andrew Ng memiliki beberapa perkenalan yang lebih lembut yang dapat Anda temukan, misalnya, di Youtube.
Douglas Zare

Sebenarnya, kursus Coursera memang semakin maju, tetapi tentu saja membangun dan akan menjawab pertanyaan OP dengan cukup baik. Ini juga memiliki banyak contoh dalam pengenalan angka.
Chris A.

Jawaban:


24

Wawasan besar tentang bagaimana jaringan saraf dapat belajar untuk mengklasifikasikan sesuatu yang kompleks seperti data gambar yang diberikan hanya contoh dan jawaban yang benar datang kepada saya saat mempelajari karya Profesor Kunihiko Fukushima tentang neokognitif pada tahun 1980-an. Alih-alih hanya menunjukkan jaringannya banyak gambar, dan menggunakan back-propagation untuk membiarkannya memikirkan hal-hal itu sendiri, ia mengambil pendekatan yang berbeda dan melatih jaringannya lapis demi lapis, dan bahkan simpul demi simpul. Dia menganalisis kinerja dan operasi dari masing-masing node jaringan dan secara sengaja memodifikasi bagian-bagian itu untuk membuat mereka merespons dengan cara yang diinginkan.

Misalnya, dia tahu dia ingin jaringan dapat mengenali garis, jadi dia melatih lapisan dan simpul tertentu untuk mengenali tiga garis horizontal piksel, garis vertikal 3 piksel dan variasi garis diagonal khusus di semua sudut. Dengan melakukan ini, ia tahu persis bagian mana dari jaringan yang dapat diandalkan untuk menembak ketika pola yang diinginkan ada. Kemudian, karena setiap lapisan sangat terhubung, seluruh neokognitron secara keseluruhan dapat mengidentifikasi masing-masing bagian komposit yang ada dalam gambar di mana pun mereka berada secara fisik. Jadi, ketika segmen garis tertentu ada di suatu tempat di gambar, akan selalu ada simpul khusus yang akan diaktifkan.

Menjaga gambar ini selalu ada, pertimbangkan regresi linier yang hanya menemukan rumus (atau garis) melalui jumlah kesalahan kuadrat, yang melewati paling dekat melalui data Anda, itu cukup mudah untuk dipahami. Untuk menemukan "garis" lengkung, kita dapat melakukan perhitungan jumlah produk yang sama, kecuali sekarang kita menambahkan beberapa parameter x ^ 2 atau x ^ 3 atau bahkan polinomial pesanan lebih tinggi. Sekarang Anda memiliki classifier regresi logistik. Penggolong ini dapat menemukan hubungan yang tidak linier. Faktanya, regresi logistik dapat mengungkapkan hubungan yang kompleks semena-mena, tetapi Anda masih perlu secara manual memilih jumlah fitur daya yang benar untuk melakukan pekerjaan dengan baik dalam memprediksi data.

Salah satu cara untuk memikirkan jaringan saraf adalah dengan mempertimbangkan lapisan terakhir sebagai klasifikasi regresi logistik , dan kemudian lapisan tersembunyi dapat dianggap sebagai "penyeleksi fitur" otomatis . Ini menghilangkan pekerjaan memilih secara manual jumlah dan kekuatan fitur input yang benar. Dengan demikian, NN menjadi pemilih fitur daya otomatis dan dapat menemukan hubungan linear atau non-linear atau berfungsi sebagai pengelompokan set kompleks yang sewenang-wenang ** (ini, hanya mengasumsikan, bahwa ada cukup lapisan dan koneksi tersembunyi untuk mewakili kompleksitas model yang perlu dipelajari). Pada akhirnya, NN yang berfungsi dengan baik diharapkan untuk belajar tidak hanya "hubungan" antara input dan output, tetapi sebaliknya kami berusaha untuk abstraksi atau model yanggeneralisasi dengan baik.

Sebagai aturan praktis, jaringan saraf tidak dapat mempelajari apa pun yang manusia yang cukup cerdas tidak bisa secara teoritis belajar diberikan waktu yang cukup dari data yang sama, namun,

  • mungkin bisa belajar sesuatu yang belum ada yang tahu
  • untuk masalah besar, bank komputer yang memproses jaringan saraf dapat menemukan solusi yang sangat baik jauh lebih cepat daripada tim orang (dengan biaya yang jauh lebih rendah)
  • Begitu NN yang terlatih akan menghasilkan hasil yang konsisten dengan input yang telah mereka latih dan harus digeneralisasikan dengan baik jika di-tweak dengan benar
  • NN tidak pernah bosan atau terganggu

1
+1 untuk paragraf tentang bagaimana lapisan terakhir melakukan regresi logistik di atas pemilihan fitur lapisan tersembunyi. Itu cara yang bagus untuk berpikir tentang NNs.
jlund3

Terima kasih, tetapi saya harus mengklarifikasi bahwa saya tidak benar-benar mengatakan bahwa lapisan terakhir dari setiap JST sebenarnya adalah lapisan regresi logistik, tetapi hanya bahwa ini adalah salah satu konfigurasi yang mungkin bisa menyelesaikan banyak masalah. Karena sebagian besar cara acak kami biasanya melatih JST yang paling mungkin setiap regresi yang dihasilkan tersebar di banyak node dan lapisan dengan cara yang sangat acak. Seseorang dapat melatih sub jaringan untuk merespon dengan cara tertentu dan kemudian memompa output dari mereka ke dalam lapisan regresi untuk memberikan jaringan khusus untuk masalah khusus. Membuat JST sangat efisien dalam memori dan kecepatan.
mcstar

1
Jawaban ini terus mendapatkan pandangan, jadi saya pikir saya akan menunjukkan bahwa sudah lebih dari 5 tahun sekarang, dan hanya mempertimbangkan umpan maju jaringan yang terhubung penuh. Meskipun wawasan konseptual di sini masih valid, mereka tidak memberikan praktisi cukup untuk memahami konsep NN mendalam yang telah menjadi standar dalam dekade terakhir. CNN (convolution neural network) adalah adaptasi modern yang sangat penting yang memberikan kekuatan super pada jaringan yang dalam dengan memungkinkan mereka untuk menemukan tepi, kontras, ketajaman, ruang warna, bayangan dan banyak lagi dan menggunakannya untuk menentukan konteks fitur tingkat rendah.
mcstar

10

Anda mungkin pernah mendengarnya mengatakan bahwa jaringan saraf adalah " penduga fungsi universal ". Pada dasarnya, teorema Cybenko mengatakan bahwa untuk setiap pemetaan fungsi real ke real, Anda dapat memperkirakannya dengan jaringan saraf dengan fungsi aktivasi sigmoid. Bahkan, ternyata jaringan saraf memungkinkan Anda untuk menghitung fungsi apa pun yang dapat dihitung oleh mesin Turing (yaitu apa pun yang Anda dapat menulis algoritma untuk menghitung). Sayangnya, bukti-bukti ini hanya mengatakan bahwa untuk beberapa konfigurasi neuron dan bobot yang terbatas, Anda dapat mendekati fungsi apa pun.

Teorinya bagus dan keren, tetapi pertanyaan Anda tampaknya lebih sejalan dengan bagaimana sebenarnya menyandikan perhitungan beberapa fungsi menjadi satu set neuron dan bobot. Untuk menggambarkan, pertimbangkan contoh sederhana - eksklusif-atau. XOR mengambil dua input, melewati input tersebut. Ketika satu dan hanya satu dari input yang diaktifkan, maka simpul output diaktifkan. Dengan kedua atau tidak ada input yang diaktifkan, maka simpul output tidak diaktifkan.

Tiga lapisan Perceptron net mampu menghitung XOR yang dipinjam dari wikipedia.

Perhatikan bahwa ketiga node tersembunyi melakukan hal yang berbeda. Node paling kiri dan paling kanan hanya melewati aktivasi input node respek. Neuron tengah mengambil dua input dan entah bagaimana meniadakannya jika keduanya aktif. Kombinasi dan rekombinasi input yang cerdas ini pada dasarnya adalah bagaimana pekerjaan dalam jaringan saraf dilakukan.

Jelas untuk fungsi yang lebih kompleks, penggabungan dan penggabungan kembali harus dilakukan dengan cara yang lebih pintar dan rumit, tetapi ini pada dasarnya adalah apa yang terjadi pada level rendah. Yang gila adalah ini benar-benar semua yang Anda butuhkan untuk menghitung fungsi yang dapat dihitung! Kemudian lagi, mesin turing juga ternyata sangat sederhana ...

Masalahnya adalah kita tidak benar-benar memiliki cara untuk secara ajaib menghasilkan jaringan saraf yang menghitung beberapa fungsi sewenang-wenang. Buktinya hanya memberi tahu kami bahwa ada beberapa jaringan di luar sana yang bisa melakukannya. Ketika kita melatih jaringan saraf kita, kita hanya berusaha menemukan jaringan yang cukup dekat.

Dalam konteks pengenalan gambar, Anda bisa membayangkan pola pengkodean ke dalam jaringan. Misalnya, untuk mengenali angka '1', Anda dapat membayangkan simpul tersembunyi yang mengharapkan sebagian besar piksel diaktifkan atau semua kolom diaktifkan, dengan piksel tetangga dimatikan. Simpul tersembunyi ini bisa cukup baik mengenali garis lurus di kolom tertentu. Masukkan cukup semua ini bersama-sama dan segera Anda punya banyak node yang melakukannya di cukup tempat gambar Anda bahwa jika saya menunjukkan satu jaringan, cukup node garis lurus tersembunyi akan diaktifkan, menunjukkan '1'. Masalahnya tentu saja menjadi generalisasi jaringan sehingga dapat mengenali beragam input.

Semoga ini membantu Anda memahami lebih kurang konsep tentang bagaimana jaringan saraf dapat melakukan komputasi. Namun, Anda telah menemukan titik yang agak penting tentang jaringan saraf: secara umum sulit untuk memahami mengapa jaringan memuntahkan output tertentu, terutama ketika Anda mempertimbangkan bahwa untuk sesuatu seperti pengenalan gambar, jaringan umumnya cukup besar sehingga manusia sulit memahami setiap bagian mesin yang bergerak. Lebih rumitnya masalah ini adalah bahwa secara umum sebagian besar jaringan saraf tidak benar-benar memiliki satu simpul tersembunyi untuk setiap fitur kecil yang dapat dipelajari jaringan tentang data tersebut. Sebagai gantinya, mendeteksi sesuatu seperti garis lurus untuk mengklasifikasikan angka '1' akan dilakukan secara non-terpusat pada banyak node tersembunyi. Algoritma lainnya,

Jika Anda mencari lebih banyak bacaan, saya sangat merekomendasikan membaca tutorial ini ke junkie ai. Ini menuntun Anda melalui dasar-dasar cara kerja jaringan saraf, dan bahkan memberikan contoh kode sederhana untuk mendapatkan jaringan saraf untuk menggerakkan tangki menuju tujuan. Namun tutorial ini tidak mencakup backpropagation, yang sejauh ini merupakan cara paling umum untuk melatih jaringan saraf, dan sebaliknya menggunakan algoritma genetika sederhana. Begitu dia mulai berbicara genetika, saya kira Anda bisa berhenti membaca ...


Terima kasih untuk semua waktu dan upaya untuk menyatukan semua kata dan pikiran ini. Saya khususnya tertarik pada NN Konvolusional untuk pengenalan gambar. Saya mencoba contoh deteksi wajah di perpustakaan OpenCV, tetapi menemukan bahwa itu hanya baik pada benda-benda kaku. Apakah Neural Network memiliki batas yang sama pada pengenalan derai, yaitu, hanya baik pada benda-benda kaku?
user1731927

Tidak ada alasan teoretis mengapa NN (atau CNN dalam hal ini) akan memiliki batas pengenalan pola, tetapi seperti yang telah Anda temukan, masalah-masalah tertentu lebih mudah dipelajari daripada yang lain. Seperti banyak masalah dalam pembelajaran mesin, Anda mungkin harus mengubah model Anda sedikit sehingga dapat bekerja dengan baik pada jenis masalah spesifik yang Anda coba selesaikan, dan NN tidak terkecuali untuk ini.
jlund3

1
Berikut ini adalah makalah yang menarik tentang bagaimana struktur yang lebih baik NN bersama-sama untuk menyelesaikan masalah grid 2d seperti klasifikasi gambar. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

1
Pada dasarnya, kesulitan dalam mengklasifikasikan objek visual "tidak kaku" dengan benar, atau dengan kata lain, objek yang ujung-ujungnya tidak memiliki garis bersih, adalah persis mengapa bahkan alam telah menentukan bahwa kamuflase adalah strategi penghindaran yang sangat baik. Bahan untuk dipikirkan.
mcstar

2

Itu yang membingungkan Anda

bagaimana ia belajar tentang apa yang ada di gambar.

Apa yang ada dalam suatu gambar secara digital diwakili oleh nilai-nilai dalam piksel gambar. Jika Anda mengambil contoh warna pada gambar. Pixel mungkin memiliki tiga nilai, masing-masing untuk tiga warna utama - Merah, Hijau dan Biru ( RGB). Piksel dengan ( 10,50,100) berarti memiliki elemen warna biru 'kurang' daripada piksel dengan ( 40,50,100). Dengan demikian, dalam gambar piksel pertama mewakili suatu daerah dengan warna biru kurang. Ini adalah informasi yang dipelajari jaringan saraf, dari satu lokasi / wilayah gambar ke yang lain dan akhirnya 'mengetahui' apa yang ada dalam gambar. Prinsip yang sama diterapkan untuk fitur gambar lainnya (selain warna) yang dapat digunakan sebagai input ke jaringan saraf. Lihat ini , dan ini untuk konsep gambar dasar dan kemudian beralih ke ini untuk mempelajari cara kerja jaringan saraf.


1

Semua masalah pembelajaran mesin adalah sama. Anda memiliki beberapa data kereta, pelajari model yang mewakili data ini dan memiliki kemampuan untuk menggeneralisasikan pengetahuan ini dengan cara seperti itu Anda mengelompokkan, mengklasifikasikan, belajar dengan algoritma yang berbeda.

Di Pengenalan gambar, Anda memiliki lagi satu set gambar yang ingin Anda pelajari.

  1. Gambar-gambar ini pertama kali diproses dan beberapa fitur diekstraksi dari gambar (banyak skema fitur gambar yang mungkin seperti SIFT, Bag of WORDS) seperti Anda menggunakan piksel dan nilainya.
  2. Berikan gambar-gambar ini dengan vektor fitur yang sesuai untuk algoritma ML Anda (Neural Net, SVM, atau lainnya).
  3. Pelajari model
  4. Gunakan model ini untuk mengenali objek yang terlihat cukup pada data pelatihan.

Jika Anda ingin mengenali lebih dari satu hal, gunakan multi classifier untuk masing-masing hal.


1

Saya juga ingin menyebutkan sangat populer untuk pengenalan jaringan saraf convolutional. Berikut ini tautan ke penjelasan CNN yang disederhanakan .

Secara singkat, dalam gambar CNN pertama kali dibagi menjadi fitur, seperti tepi, bentuk, koleksi bentuk. Kemudian fitur-fitur ini 'dimasukkan' ke dalam jaringan saraf multi-layer 'biasa' yang terhubung penuh (multi-layer perceptron).

Secara lebih rinci, satu set filter diterapkan untuk mengekstrak fitur dalam bentuk peta fitur. Filter hanyalah sebuah matriks (acak di awal) yang diterapkan pada gambar asli sehingga produk titik dari matriks gambar asli dan matriks filter dihitung dan hasilnya disimpulkan. Filter bergerak sepanjang gambar asli satu piksel (langkah) pada suatu waktu dan matriks peta fitur sedang diisi. Peta fitur dibuat untuk setiap filter. Kemudian non-linearitas diperkenalkan dengan RELU (Rectified Linear Unit) untuk setiap piksel di setiap peta fitur. Pooling, melalui penerapan max (), sum () atau rata-rata (), dilakukan setelah konvolusi. Akhirnya, fitur yang diekstraksi dengan cara ini terlihat seperti potongan 'diperbesar' dari gambar asli. Fitur-fitur ini dimasukkan ke dalam jaringan saraf yang terhubung penuh (semua unit terhubung) dan probabilitas untuk setiap gambar (katakanlah kami melatih jaringan kami pada gambar mobil, pohon, dan kapal) dihitung setelah setiap umpan maju melewati jaringan. Jaringan dilatih, yang berarti bahwa parameter (bobot) dan matriks filter dioptimalkan melalui backpropagation (meminimalkan kesalahan kesalahan klasifikasi). Ketika sebuah gambar baru dimasukkan ke dalam jaringan yang terlatih, hanya umpan ke depan yang diperlukan untuk mengidentifikasi gambar (asalkan jaringan tersebut cukup akurat, yaitu kami melatihnya dengan cukup contoh, dll.) yang berarti bahwa parameter (bobot) dan matriks filter dioptimalkan melalui backpropagation (meminimalkan kesalahan kesalahan klasifikasi). Ketika gambar baru dimasukkan ke dalam jaringan yang terlatih, hanya feedforward yang diperlukan untuk mengidentifikasi gambar (asalkan jaringan itu cukup akurat, yaitu kami melatihnya dengan cukup contoh, dll.) yang berarti bahwa parameter (bobot) dan matriks filter dioptimalkan melalui backpropagation (meminimalkan kesalahan kesalahan klasifikasi). Ketika gambar baru dimasukkan ke dalam jaringan yang terlatih, hanya feedforward yang diperlukan untuk mengidentifikasi gambar (asalkan jaringan itu cukup akurat, yaitu kami melatihnya dengan cukup contoh, dll.)


0

Ada baiknya untuk mengetahui JST dapat membuat fungsi apa pun f (x) atau f (x, y, z, ..) atau multifungsi apa pun dalam hal ini. Tetapi penting juga untuk mengetahui bahwa fungsi memiliki batasan dalam bagaimana mereka dapat mengklasifikasikan data ... ada hubungan yang lebih kompleks dari subset kumpulan objek, yang penting dalam klasifikasi dan ini tidak dijelaskan oleh fungsi tersebut dengan cara yang elegan atau alami, tetapi penting dalam bahasa dan objek klasifikasi. Namun JST dapat mencapai ini juga.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.