Mengapa menambahkan lebih banyak lapisan ke jaringan saraf ini memperburuk keluarannya?

Saya baru saja memulai dengan jaringan saraf dan menggunakan Synaptic untuk memulai (saya tahu, saya tahu, jaringan saraf dalam JavaScript , terkesiap!).

Ini adalah contoh kode yang diberikan di bagian ini untuk membuat jaringan saraf guna mempelajari fungsi XOR:

var myPerceptron = new Architect.Perceptron(2, 3, 1);
var myTrainer = new Trainer(myPerceptron);

myTrainer.XOR();

console.log(myPerceptron.activate([0, 0])); // 0.0268581547421616
console.log(myPerceptron.activate([1, 0])); // 0.9829673642853368
console.log(myPerceptron.activate([0, 1])); // 0.9831714267395621
console.log(myPerceptron.activate([1, 1])); // 0.02128894618097928

Saya bereksperimen dengan menambahkan lebih banyak lapisan dan melihat apa yang terjadi. Menambahkan satu lapisan tersembunyi tambahan tidak banyak berpengaruh, tetapi menambahkan 2 lapisan membuat keluarannya identik, apa pun masukannya.

var myPerceptron = new Architect.Perceptron(2, 3, 3, 3, 1);
var myTrainer = new Trainer(myPerceptron);

myTrainer.XOR();

console.log(myPerceptron.activate([0, 0])); // 0.521076904986927
console.log(myPerceptron.activate([1, 0])); // 0.5210769149857782
console.log(myPerceptron.activate([0, 1])); // 0.5210769118775331
console.log(myPerceptron.activate([1, 1])); // 0.5210769209325651

Mengapa ini terjadi? Apakah ini hanya karena jaringan yang lebih kompleks memerlukan lebih banyak pelatihan, atau karena jaringan semacam ini pada dasarnya tidak cocok untuk masalah seperti ini?


person Aron    schedule 06.01.2016    source sumber
comment
Menurut saya, sulit untuk mempelajari jaringan saraf multi-level. Sejauh yang saya tahu, tidak ada mekanisme langsung untuk mempelajari jaringan tersebut menuju optimalitas.   -  person Willem Van Onsem    schedule 06.01.2016
comment
Sulit untuk mengatakannya sebelum melihat jenis data yang Anda miliki, cara jaringan dilatih, regularisasi yang digunakan, dan ... . Secara umum, semakin kompleks modelnya, semakin banyak data yang Anda perlukan untuk mempelajari fungsi kanan.   -  person Amir    schedule 06.01.2016


Jawaban (1)


Saya tidak begitu paham dengan Synaptic (tapi memang terlihat keren), namun berikut beberapa masalah umum yang dapat Anda perhatikan:

  • Inisialisasi bobot itu penting. Inisialisasi bobot yang tepat memungkinkan gradien kami melakukan propagasi mundur melalui jaringan kami dan terjadinya pembelajaran. Apakah ada opsi untuk menginisialisasi bobot di jaringan Anda? Skema inisialisasi yang umum adalah Inisialisasi Xavier Glorot yang diberikan dalam Memahami kesulitan melatih jaringan saraf feedforward dalam dan yang terbaru di Mendalami Penyearah: Melampaui Kinerja Tingkat Manusia pada Klasifikasi ImageNet.

  • Apakah ukuran langkah alias kecepatan pembelajaran Anda terlalu besar? Sepertinya jaringan Anda mengeluarkan nilai konstan. Jika Anda menggunakan nonlinier jenuh (yaitu fungsi aktivasi terbatas seperti sigmoid atau tanh) maka pembelajaran yang besar mungkin dapat menyebabkan nonlinier Anda jenuh dan pembelajaran terhenti secara efektif dan ini dapat mengakibatkan keluaran nilai konstan.

  • Terkait dengan poin sebelumnya: jenis nonlinier apa yang Anda gunakan di lapisan tersembunyi Anda? Sekali lagi, jika nonliniernya jenuh, hal ini mungkin menghambat pelatihan Anda. Anda dapat mencoba meluruskan satuan linier (ReLU) yang berbentuk $f(x) = \max(0,x)$. Mereka tidak terbatas, sehingga tidak jenuh dan memiliki gradien sama dengan 1 ketika $x > 0$. Mereka memiliki interpretasi "mengaktifkan" ketika input lebih besar dari 0. Dalam hal ini mereka bertindak seperti saklar dan memungkinkan gradien menyebar.

Mungkin ada masalah lain yang diharapkan dapat dikomentari oleh orang lain juga. Inilah 3 hal yang langsung terlintas di benak saya.

Saya tidak akrab dengan Synaptic jadi saya tidak yakin seberapa besar kontrolnya atau apa pengaturan atau parameter defaultnya.

Semoga ini membantu!

person Indie AI    schedule 06.01.2016