Saya baru saja belajar tentang regularisasi sebagai pendekatan untuk mengontrol over-fitting, dan saya ingin memasukkan ide tersebut ke dalam implementasi sederhana backpropagation dan Multilayer perceptron (MLP) yang saya kumpulkan.
Saat ini untuk menghindari pemasangan berlebihan, saya melakukan validasi silang dan menjaga jaringan dengan skor terbaik sejauh ini pada set validasi. Ini berfungsi baik, tetapi menambahkan regularisasi akan menguntungkan saya dalam pilihan yang benar dari algoritma regularisasi dan parameter akan membuat jaringan saya menyatu pada model non-overfit lebih sistematis.
Formula yang saya miliki untuk jangka waktu pembaruan (dari kursus Coursera ML) dinyatakan sebagai pembaruan batch misalnya untuk setiap berat, setelah menjumlahkan semua delta yang berlaku untuk seluruh pelatihan yang ditetapkan dari perbanyakan kesalahan, penyesuaian lambda * current_weight
ditambahkan sebelum penggabungan delta dikurangi pada akhir bets, di mana lambda
adalah parameter regularisasi.
Implementasi backpropagation saya menggunakan pembaruan berat per-item. Saya khawatir bahwa saya tidak bisa hanya menyalin pendekatan batch, meskipun terlihat OK secara intuitif bagi saya. Apakah istilah regularisasi yang lebih kecil per item berfungsi dengan baik?
Misalnya di lambda * current_weight / N
mana N adalah ukuran set pelatihan - sekilas ini terlihat masuk akal. Saya tidak dapat menemukan apa pun tentang masalah ini, dan saya ingin tahu apakah itu karena regularisasi tidak berfungsi dengan baik dengan pembaruan per-item, atau bahkan menggunakan nama yang berbeda atau formula yang diubah.
sumber
Untuk melengkapi apa dikatakan insys :
Regularisasi digunakan saat menghitung backpropagation untuk semua bobot dalam MLP Anda. Oleh karena itu, alih-alih menghitung gradien sehubungan dengan semua input dari set pelatihan (
batch
) Anda hanya menggunakan beberapa / satu item (stochastic or semi-stochastic
). Anda akhirnya akan membatasi hasil pembaruan sehubungan dengan satu item dan bukan semua yang juga benar.Juga, jika saya ingat dengan benar, Andrew NG digunakan
L2-regularization
. Itu/N
dalamlambda * current_weight / N
tidak wajib, itu hanya membantu rescaling input. Namun jika Anda memilih untuk tidak menggunakannya, Anda akan memiliki (dalam sebagian besar kasus) untuk memilih nilai lainlambda
.Anda juga dapat menggunakan algoritma Grid-search untuk memilih nilai terbaik untuk
lambda
( hyperparameter => yang Anda harus pilih).sumber