Jadi saya mencoba untuk belajar sendiri jaringan saraf (untuk aplikasi regresi, bukan mengklasifikasikan gambar kucing).
Eksperimen pertama saya adalah melatih jaringan untuk mengimplementasikan filter FIR dan Discrete Fourier Transform (pelatihan pada sinyal "sebelum" dan "setelah"), karena keduanya adalah operasi linier yang dapat diimplementasikan oleh satu lapisan tanpa fungsi aktivasi. Keduanya bekerja dengan baik.
Jadi saya ingin melihat apakah saya bisa menambahkan abs()
dan membuatnya belajar spektrum amplitudo. Pertama saya berpikir tentang berapa banyak node yang dibutuhkan di lapisan tersembunyi, dan menyadari bahwa 3 ReLU cukup untuk perkiraan kasar abs(x+jy) = sqrt(x² + y²)
, jadi saya menguji operasi itu sendiri pada bilangan kompleks tunggal (2 input → 3 node ReLU hidden layer → 1 keluaran). Kadang-kadang berhasil:
Tetapi sebagian besar waktu saya mencobanya, macet di minimum lokal dan gagal menemukan bentuk yang tepat:
Saya sudah mencoba semua pengoptimal dan varian ReLU di Keras, tetapi mereka tidak membuat banyak perbedaan. Apakah ada hal lain yang bisa saya lakukan untuk membuat jaringan sederhana seperti ini bertemu secara andal? Atau apakah saya hanya mendekati ini dengan sikap yang salah, dan Anda seharusnya hanya membuang lebih banyak node daripada yang diperlukan pada masalah dan jika setengah dari mereka mati itu tidak dianggap sebagai masalah besar?
Jawaban:
Hasilnya tampaknya sangat menunjukkan bahwa satu atau lebih neuron Anda mati (atau mungkin hyperplane of weight untuk dua neuron Anda telah bergabung). Anda dapat melihat bahwa dengan 3 Relu, Anda mendapatkan 3 bayangan terpisah di tengah ketika Anda bertemu dengan solusi yang lebih masuk akal. Anda dapat dengan mudah memverifikasi apakah ini benar dengan memeriksa nilai output masing-masing neuron untuk melihat apakah tetap mati untuk sebagian besar sampel Anda. Atau, Anda dapat memplot semua 2x3 = 6 bobot neuron, dikelompokkan berdasarkan masing-masing neuron, untuk melihat apakah dua neuron runtuh ke pasangan bobot yang sama.
Saya menduga bahwa salah satu kemungkinan penyebabnya adalah ketika condong ke arah satu koordinat, misalnya , dalam hal ini Anda mencoba mereproduksi identitas, saat itu . Tidak banyak yang dapat Anda lakukan di sini untuk memperbaiki ini. Salah satu opsi adalah menambahkan lebih banyak neuron saat Anda sudah mencoba. Pilihan kedua adalah mencoba aktivasi terus menerus, seperti sigmoid, atau mungkin sesuatu yang tidak terikat seperti eksponensial. Anda juga dapat mencoba dropout (misalnya, probabilitas 10%). Anda bisa menggunakan implementasi dropout reguler dalam keras, yang diharapkan cukup pintar untuk mengabaikan situasi ketika ketiga neuron Anda keluar.x ≫ y a b s ( x + i y ) ≈ xx + i y x ≫ y a b s ( x + i y) ≈ x
sumber
3 shadowy splits in the center when you converge to the more reasonable solution.
Ya, itulah perkiraan kasar yang saya maksud; piramida heksagonal terbalik.or perhaps something unbounded like an exponential
Saya memang mencoba elu dan selu, yang tidak bekerja lebih baik.two neurons collapse to the same pair of weights
Ah, saya belum memikirkan itu; Saya hanya berasumsi mereka sudah mati.