Menciptakan neural net untuk fungsi xor

8

Ini adalah fakta yang diketahui bahwa jaringan 1-layer tidak dapat memprediksi fungsi xor, karena tidak dapat dipisahkan secara linear. Saya mencoba membuat jaringan 2-layer, menggunakan fungsi sigmoid logistik dan backprop, untuk memprediksi xor. Jaringan saya memiliki 2 neuron (dan satu bias) pada lapisan input, 2 neuron dan 1 bias di lapisan tersembunyi, dan 1 neuron output. Yang mengejutkan saya, ini tidak akan bertemu. jika saya menambahkan layer baru, maka saya memiliki jaringan 3-layer dengan input (2 +1), hidden1 (2 +1), hidden2 (2 +1), dan output, itu berfungsi. Juga, jika saya menyimpan jaringan 2-layer, tapi saya meningkatkan ukuran layer tersembunyi menjadi 4 neuron + 1 bias, itu juga menyatu. Apakah ada alasan mengapa jaringan 2-layer dengan 3 atau kurang neuron tersembunyi tidak dapat memodelkan fungsi xor?

pengguna
sumber
2
Anda dapat memprediksi XOR menggunakan struktur itu. Bahkan Anda bahkan tidak membutuhkan bias (lihat di sini ).
krychu
Apakah saya perlu menginisialisasi bobot saya dengan cara khusus apa pun untuk mendapatkan konvergensi? Saya mencoba jaring saraf sederhana dengan bobot antara (-1,1) diinisialisasi secara acak, tetapi saya tidak bisa mendapatkannya untuk menyatu (bahkan menggunakan bias)
pengguna
Sebenarnya, menggunakan sigmoid logistik itu memang konvergen kadang-kadang, tetapi tidak setiap saat, itu tergantung pada pilihan awal bobot acak.
pengguna
Kisaran Anda tampaknya cukup besar, coba (-0.1, 0,1). Kalau tidak, Anda berisiko sinyal input ke neuron mungkin besar dari awal di mana belajar untuk neuron itu lambat. Anda mungkin juga ingin mengurangi tingkat belajar dan meningkatkan jumlah iterasi.
krychu
Sebaliknya, nilai yang lebih besar membuatnya konvergen lebih cepat. Saya telah mencoba tingkat belajar yang lebih kecil dan banyak iterasi. Saya pikir jawaban Neil Slater di bawah ini merangkum masalah, meskipun saya masih tidak yakin mengapa.
pengguna

Jawaban:

7

Ya, ada alasannya. Ini ada hubungannya dengan bagaimana Anda menginisialisasi bobot Anda.

Ada 16 minimum lokal yang memiliki probabilitas konvergen tertinggi antara 0,5 - 1.

masukkan deskripsi gambar di sini

Berikut ini adalah makalah yang menganalisis masalah xor.

Emil
sumber
2
Muncul tautan rusak.
Adam Kingsley
@ Emil Jadi, jika bobotnya sangat kecil, Anda mengatakan bahwa itu tidak akan pernah bertemu? Saya juga memperbaiki tautannya untuk Anda.
pengguna
@user Benar.
Emil
6

Jaringan dengan satu lapisan tersembunyi yang mengandung dua neuron harus cukup untuk memisahkan masalah XOR. Neuron pertama bertindak sebagai gerbang OR dan yang kedua sebagai gerbang NOT AND. Tambahkan kedua neuron dan jika mereka melewati treshold itu positif. Anda bisa menggunakan neuron keputusan linier untuk ini dengan menyesuaikan bias untuk treshold. Input dari gerbang NOT AND harus negatif untuk input 0/1. Gambaran ini harus membuatnya lebih jelas, nilai-nilai pada koneksi adalah bobot, nilai-nilai dalam neuron adalah bias, fungsi keputusan bertindak sebagai keputusan 0/1 (atau hanya fungsi tanda bekerja dalam kasus ini juga).

Jaringan Saraf XOR

Gambar berkat "blog Abhranil"

Jan van der Vegt
sumber
Terima kasih, maka ini tidak mungkin dilakukan dengan menggunakan sigmoid logistik, karena membatasi nilai menjadi (0,1)
pengguna
Tidak harus masih mungkin untuk mempelajari ini dengan sigmoid logistik, itu hanya harus mempelajari ambang batas / berat secara berbeda
Jan van der Vegt
Bias di gerbang NAND harus . +1.5
Marc
4

Jika Anda menggunakan penurunan gradien dasar (tanpa optimasi lainnya, seperti momentum), dan jaringan minimal 2 input, 2 neuron tersembunyi, 1 neuron output, maka sangat mungkin untuk melatihnya untuk mempelajari XOR, tetapi bisa juga cukup rumit dan tidak bisa diandalkan.

  • Anda mungkin perlu menyesuaikan tingkat belajar. Kesalahan yang paling umum adalah mengaturnya terlalu tinggi, sehingga jaringan akan berosilasi atau menyimpang alih-alih belajar.

  • Diperlukan waktu yang sangat besar untuk melatih jaringan minimal menggunakan keturunan atau gradien online. Mungkin beberapa ribu zaman akan diperlukan.

  • Dengan jumlah bobot yang rendah (hanya 6), terkadang inisialisasi acak dapat membuat kombinasi yang mudah macet. Jadi, Anda mungkin perlu mencoba, memeriksa hasil, lalu memulai kembali. Saya sarankan Anda menggunakan generator nomor acak unggulan untuk inisialisasi, dan menyesuaikan nilai benih jika nilai kesalahan macet dan tidak membaik.

Neil Slater
sumber
Ya, itulah yang saya amati, dengan beberapa nilai seed yang konvergen, yang lain tidak. Juga, jika saya menggunakan garis singgung hiperbolik alih-alih sigmoid ia berfungsi dengan baik sepanjang waktu, dengan sigmoid itu bergantung pada benih, seperti yang Anda amati. Apa alasannya agar begitu rumit?
pengguna
Saya tidak sepenuhnya yakin apa alasan matematika itu, ini hanya dari pengalaman saya menulis test suite sekitar belajar xor. Dalam kasus saya, menambahkan momentum sangat membantu, tetapi saya pikir cukup banyak penyesuaian dari jaringan yang paling sederhana dan / atau optimizer membantu.
Neil Slater