Mengapa tidak overfitting jaringan saraf yang merusak untuk klasifikasi MNIST?

8

Saya memiliki jaringan saraf sederhana (NN) untuk klasifikasi MNIST. Ini termasuk 2 lapisan tersembunyi, masing-masing dengan 500 neuron. Oleh karena itu dimensi NN adalah: 784-500-500-10. ReLU digunakan di semua neuron, softmax digunakan pada output, dan cross-entropy adalah fungsi loss.

Apa yang membingungkan saya adalah mengapa overfitting tampaknya tidak menghancurkan NN?

Pertimbangkan jumlah parameter (bobot) NN. Ini kira-kira

784×500+500×500+500×10=647000.
Namun, dalam percobaan saya, saya hanya menggunakan 6000contoh (sepersepuluh dari set pelatihan MNIST) untuk melatih NN. (Ini hanya untuk menjaga jangka waktu yang singkat. Pelatihan & kesalahan pengujian akan turun jika saya menggunakan lebih banyak contoh pelatihan.) Saya mengulangi percobaan 10 kali. Keturunan gradien stokastik polos digunakan (tidak ada RMS prop atau momentum); tidak ada regularisasi / drop-out / penghentian dini yang digunakan. Kesalahan pelatihan dan kesalahan pengujian yang dilaporkan adalah:

No.12345678910Etrain(%)7.810.39.111.08.79.29.38.310.38.6Etest(%)11.713.913.214.112.113.213.311.913.412.7

Perhatikan bahwa dalam semua 10 percobaan (masing-masing dengan inisialisasi parameter acak independen), kesalahan pengujian berbeda dari kesalahan pelatihan hanya sekitar. 4%, meskipun saya menggunakan contoh 6K untuk melatih parameter 647K. Dimensi VC dari jaringan saraf adalah pada urutanO(|E|log(|E|)) setidaknya di mana |E|adalah jumlah tepi (bobot). Jadi mengapa kesalahan tes tidak jauh lebih tinggi (misalnya 30% atau 50%) daripada kesalahan pelatihan? Saya akan sangat menghargai jika seseorang dapat menunjukkan di mana saya merindukan. Terima kasih banyak!

[EDIT 2017/6/30]

Untuk memperjelas efek penghentian awal, saya melakukan 10 percobaan lagi, masing-masing sekarang dengan 20 zaman pelatihan. Tingkat kesalahan ditunjukkan pada gambar di bawah ini:

masukkan deskripsi gambar di sini

Kesenjangan antara tes dan kesalahan pelatihan memang meningkat karena zaman lebih banyak digunakan dalam pelatihan. Namun, ujung kesalahan pengujian tetap hampir datar setelah kesalahan pelatihan didorong ke nol. Selain itu, saya melihat tren serupa untuk ukuran lain dari set pelatihan. Tingkat kesalahan rata-rata pada akhir 20 zaman pelatihan diplot terhadap ukuran pelatihan yang ditetapkan di bawah ini:

masukkan deskripsi gambar di sini

Jadi overfitting memang terjadi, tetapi tampaknya tidak menghancurkan NN. Mempertimbangkan jumlah parameter (647K) yang kita butuhkan untuk kereta dan jumlah contoh pelatihan yang kita miliki (<60K), pertanyaannya tetap: mengapa tidak overfitting dengan mudah membuat NN tidak berguna? Selain itu, apakah ini benar untuk ReLU NN untuk semua tugas klasifikasi dengan output softmax dan fungsi objektif lintas-entropi? Adakah yang melihat contoh tandingan?

syeh_106
sumber
Saya tidak dapat melihat komentar tentang jumlah zaman yang digunakan. Sudahkah Anda mencoba menjalankan lebih / kurang zaman untuk melihat efek yang dimilikinya? Anda menyebutkan tidak menggunakan penghentian awal, tetapi mungkin Anda memutuskan untuk berhenti entah bagaimana? Apakah Anda menjalankan sejumlah besar zaman, sedemikian rupa sehingga jaringan tampaknya telah menyatu?
Neil Slater
@ NeilSlater Saya hanya menggunakan 1 zaman dalam percobaan, dan mengakhiri SGD setelahnya. (Ini untuk menjaga jangka waktu yang singkat, karena saya melakukannya di Matlab untuk kontrol & visibilitas yang lebih baik). Melihat nilai fungsi kerugian dalam SGD (ukuran batch mini = 1), bagaimanapun, itu memang tampak konvergen, yaitu output softmax max melayang di dekat 1. Saya sudah mencoba 60K contoh (1 zaman) juga, dan melihat tren yang sama, yaitu kesalahan pelatihan ~ 3% dan kesalahan tes ~ 4%.
syeh_106
Saya pikir jawaban yang mengikuti eksperimen Anda yang diperluas adalah kombinasi antara jawaban saya dan Bashar. Mungkin membantu jika Anda berpikir dalam hal uji rasio kesalahan: kereta api - kesalahan pelatihan 0% dengan kesalahan tes 7% bukan kinerja yang baik - ini terlalu pas. Bahkan tingkat kesalahan 2,5% Anda pada contoh pelatihan 60k adalah 10 kali lebih buruk daripada tingkat kesalahan canggih pada masalah ini. Namun, saya kira pertanyaan Anda adalah "mengapa jaringan tidak mundur ke tingkat kesalahan 50% atau bahkan 90%"? Yang mencakup jawaban Bashar, meskipun saya masih bertanya-tanya apakah kesalahan pengujian akan meningkat dengan zaman yang lebih banyak lagi
Neil Slater
1
@NeilSlater Tentu, ukuran langkah SGD = 0,001. Bobot diinisialisasi secara acak dan seragam pada [-0.2, +0.2] pada 2 lapisan pertama, [-1, + 1] pada lapisan output.
syeh_106
1
Saya memperbarui jawaban saya dengan beberapa penyelidikan tambahan. Ini pada dasarnya setuju dengan temuan Anda dan menawarkan beberapa konteks dan penjelasan yang melambaikan tangan
Neil Slater

Jawaban:

7

Saya telah mereplikasi hasil Anda menggunakan Keras, dan mendapat nomor yang sangat mirip sehingga saya tidak berpikir Anda melakukan kesalahan.

Karena ketertarikan, saya berlari untuk banyak zaman untuk melihat apa yang akan terjadi. Keakuratan hasil tes dan kereta api tetap cukup stabil. Namun, nilai kerugiannya semakin terpisah jauh dari waktu ke waktu. Setelah sekitar 10 zaman, saya mendapatkan akurasi kereta 100%, akurasi uji 94,3% - dengan nilai kerugian masing-masing sekitar 0,01 dan 0,22. Setelah 20.000 zaman, keakuratannya hampir tidak berubah, tetapi saya mengalami kehilangan pelatihan 0,000005 dan pengujian kehilangan 0,36. Kerugian juga masih menyimpang, meskipun sangat lambat. Menurut saya, jaringannya jelas terlalu pas.

Jadi pertanyaannya dapat diutarakan kembali: Mengapa, meskipun terlalu pas, apakah jaringan saraf dilatih untuk set data MNIST masih menggeneralisasi tampaknya cukup baik dalam hal akurasi?

Perlu membandingkan akurasi 94,3% ini dengan apa yang mungkin dilakukan dengan menggunakan pendekatan yang lebih naif.

Sebagai contoh, regresi softmax linier sederhana (pada dasarnya jaringan saraf yang sama tanpa lapisan tersembunyi), memberikan akurasi stabil cepat kereta 95,1%, dan tes 90,7%. Ini menunjukkan bahwa banyak data terpisah secara linier - Anda dapat menggambar hyperplanes dalam dimensi 784 dan 90% gambar digit akan berada di dalam "kotak" yang benar tanpa memerlukan penyempurnaan lebih lanjut. Dari ini, Anda mungkin mengharapkan solusi non-linear berlebih untuk mendapatkan hasil yang lebih buruk dari 90%, tetapi mungkin tidak lebih buruk dari 80% karena secara intuitif membentuk batas yang terlalu kompleks di sekitar misalnya "5" ditemukan di dalam kotak untuk "3" hanya akan salah menetapkan sejumlah kecil manifold naif 3 ini. Tapi kami lebih baik daripada perkiraan 80% batas bawah ini dari model linear.

Model naif lain yang mungkin adalah pencocokan templat, atau tetangga terdekat. Ini adalah analogi yang masuk akal untuk apa yang dilakukan pemasangan berlebihan - ini menciptakan area lokal yang dekat dengan setiap contoh pelatihan di mana ia akan memprediksi kelas yang sama. Masalah dengan over-fitting terjadi di ruang di antara di mana nilai-nilai aktivasi akan mengikuti apa pun yang dilakukan jaringan "secara alami". Catat kasus terburuk, dan apa yang sering Anda lihat dalam diagram penjelas, adalah permukaan yang nyaris kacau dan melengkung yang bergerak melalui klasifikasi lain. Tapi sebenarnya itu mungkin lebih alami untuk jaringan saraf untuk lebih lancar interpolasi antara titik - apa yang sebenarnya dilakukannya tergantung pada sifat kurva urutan yang lebih tinggi bahwa jaringan menggabungkan ke dalam perkiraan, dan seberapa baik mereka sudah sesuai dengan data.

Saya meminjam kode untuk solusi KNN dari blog ini di MNIST dengan K Nearest Neighbors . Menggunakan k = 1 - yaitu memilih label yang terdekat dari 6000 contoh pelatihan hanya dengan mencocokkan nilai piksel, memberikan akurasi 91%. Tambahan 3% yang dicapai oleh jaringan saraf berlebih tampaknya tidak begitu mengesankan mengingat kesederhanaan penghitungan pixel-match yang dilakukan KNN dengan k = 1.

Saya mencoba beberapa variasi arsitektur jaringan, fungsi aktivasi yang berbeda, jumlah dan ukuran lapisan yang berbeda - tidak ada yang menggunakan regularisasi. Namun, dengan 6.000 contoh pelatihan, saya tidak bisa mendapatkan salah satu dari mereka untuk berpakaian dengan cara di mana akurasi tes turun secara dramatis. Bahkan mengurangi menjadi hanya 600 contoh pelatihan hanya membuat dataran tinggi lebih rendah, dengan akurasi ~ 86%.

Kesimpulan dasar saya adalah bahwa contoh-contoh MNIST memiliki transisi yang relatif mulus antara kelas-kelas dalam ruang fitur, dan bahwa jaringan saraf dapat cocok dengan ini dan interpolasi antara kelas-kelas dengan cara "alami" yang diberikan blok bangunan NN untuk perkiraan fungsi - tanpa menambahkan komponen frekuensi tinggi ke perkiraan yang dapat menyebabkan masalah dalam skenario pakaian berlebih.

Ini mungkin eksperimen yang menarik untuk dicoba dengan set "MNIST berisik" di mana sejumlah noise atau distorsi acak ditambahkan pada contoh pelatihan dan contoh uji. Model yang diregulasi akan diharapkan bekerja dengan baik pada dataset ini, tetapi mungkin dalam skenario itu over-fitting akan menyebabkan masalah yang lebih jelas dengan akurasi.


Ini dari sebelum pembaruan dengan tes lebih lanjut oleh OP.

Dari komentar Anda, Anda mengatakan bahwa hasil pengujian Anda diambil setelah menjalankan satu zaman. Anda pada dasarnya telah menggunakan penghentian dini, meskipun Anda belum menulis, karena Anda telah menghentikan pelatihan sedini mungkin dengan data pelatihan Anda.

Saya akan menyarankan menjalankan lebih banyak zaman jika Anda ingin melihat bagaimana jaringan benar-benar konvergen. Mulailah dengan 10 zaman, pertimbangkan untuk mencapai 100. Satu zaman tidak banyak untuk masalah ini, terutama pada 6000 sampel.

Meskipun peningkatan jumlah iterasi tidak dijamin membuat pakaian jaringan Anda lebih buruk daripada yang sudah ada, Anda belum benar-benar memberinya banyak kesempatan, dan hasil percobaan Anda sejauh ini tidak konklusif.

Sebenarnya saya setengah berharap hasil data pengujian Anda akan meningkat mengikuti zaman ke-2, ke-3, sebelum mulai menjauh dari metrik pelatihan saat jumlah zaman meningkat. Saya juga berharap kesalahan pelatihan Anda mendekati 0% ketika jaringan mendekati konvergensi.

Neil Slater
sumber
Kamu benar. Dengan menjalankan hanya 1 zaman, saya secara implisit menerapkan penghentian awal, secara tidak sengaja. Saya akan mencoba saran Anda dan mungkin memperbarui pertanyaan saya jika perlu.
syeh_106
Jawaban dan hasil investigasi Anda yang diperbarui sangat membantu, memberi lebih banyak cahaya pada pertanyaan ini. Saya sangat menghargainya. Jaringan saraf tiruan terlihat indah & menarik bagi saya. Hanya saja, ketika saya mencoba menjelaskan mengapa / bagaimana / kapan itu berhasil, analisis / teori kuantitatif & keras tampaknya tidak berlimpah.
syeh_106
3

Secara umum, orang berpikir tentang overfitting sebagai fungsi dari kompleksitas model. Yang hebat, karena kompleksitas model adalah salah satu hal yang dapat Anda kendalikan. Pada kenyataannya, ada banyak faktor lain yang berhubungan dengan masalah overfitting: - jumlah sampel pelatihan - jumlah iterasi - dimensi input (dalam kasus Anda, saya percaya ini adalah alasan mengapa Anda tidak overfitting) - the kesulitan masalah: jika Anda memiliki masalah sederhana, dapat dipisahkan secara linear, maka Anda tidak perlu terlalu khawatir tentang overfitting.

Ada demo visual yang disediakan oleh google tensorflow yang memungkinkan Anda untuk mengubah semua parameter ini. http://playground.tensorflow.org Anda dapat mengubah masalah input Anda, jumlah sampel, dimensi input Anda, jaringan, jumlah iterasi.

Saya suka berpikir tentang overfitting sebagai Overfitting = model besar + fitur yang tidak terkait

Bashar Haddad
sumber