Apa batasan maxnorm? Bagaimana ini berguna dalam Neural Networks Konvolusional?

12

Berikut ini adalah contoh kode keras yang menggunakannya:

from keras.constraints import max_norm

model.add(Convolution2D(32, 3, 3, input_shape=(3, 32, 32), 
                        border_mode='same', activation='relu', kernel_constraint=max_norm(3)))
Jatin
sumber

Jawaban:

16

Dari http://cs231n.github.io/neural-networks-2/#reg :

Batasan norma maks. Bentuk lain dari regularisasi adalah untuk menegakkan batas atas absolut pada besarnya vektor berat untuk setiap neuron dan menggunakan proyeksi gradien keturunan untuk menegakkan batasan. Dalam praktiknya, ini berhubungan dengan melakukan pembaruan parameter seperti biasa, dan kemudian menegakkan batasan dengan menjepit vektor bobot dari setiap neuron untuk memenuhiNilai khas dari ada di pesanan 3 atau 4. Beberapa orang melaporkan peningkatan saat menggunakan bentuk regularisasi ini. Salah satu properti yang menarik adalah bahwa jaringan tidak dapat "meledak" bahkan ketika tingkat pembelajaran ditetapkan terlalu tinggi karena pembaruan selalu dibatasi.w2<c.ww2<c.c

Franck Dernoncourt
sumber
8

Saya menemukan jawaban oleh McLawrence dalam pertanyaan lain yang sangat membantu. Diproduksi ulang di bawah ini:

Apa yang dilakukan batasan berat max_norm?

maxnorm(m)akan, jika L2-Norm bobot Anda melebihi m, skala seluruh matriks berat Anda dengan faktor yang mengurangi norma m. Seperti yang dapat Anda temukan dalam kode keras di class MaxNorm(Constraint):

def __call__(self, w):
    norms = K.sqrt(K.sum(K.square(w), axis=self.axis, keepdims=True))
    desired = K.clip(norms, 0, self.max_value)
    w *= (desired / (K.epsilon() + norms))
    return w

Adatively, maxnormmemiliki axisargumen, di mana norma dihitung. Dalam contoh Anda, Anda tidak menentukan sumbu, sehingga norma dihitung atas seluruh matriks bobot. Jika misalnya, Anda ingin membatasi norma setiap filter konvolusional, dengan asumsi bahwa Anda menggunakan tfpemesanan dimensi, matriks bobot akan memiliki bentuk (rows, cols, input_depth, output_depth). Menghitung norma lebih axis = [0, 1, 2]akan membatasi setiap filter dengan norma yang diberikan.

Kenapa melakukannya?

Membatasi matriks bobot secara langsung adalah jenis regularisasi lainnya. Jika Anda menggunakan istilah regularisasi L2 sederhana, Anda akan menghukum bobot tinggi dengan fungsi kerugian Anda. Dengan batasan ini, Anda mengatur secara langsung. Seperti juga ditautkan dalam keraskode, ini tampaknya bekerja sangat baik dalam kombinasi dengan dropoutlayer. Info lebih lanjut lihat bab 5.1 dalam makalah ini

profilprofil
sumber
Jawaban yang bagus, tetapi berhati-hatilah: "Dalam contoh Anda, Anda tidak menentukan sumbu, sehingga norma dihitung atas seluruh matriks bobot." - Ini sepertinya tidak benar (setidaknya sampai sekarang). Sebaliknya, norma kemudian dihitung di atas default axis=0.
Bobson Dugnutt
Saya setuju, max-norm diambil sebagai panjang dari bobot yang fan-in ke sebuah simpul di lapisan tersembunyi, yaitu, . Juga, apakah Anda memperhatikan bahwa untuk regularisasi dropout, max-norm digunakan untuk semua run (lihat paragraf terakhir di halaman 1934 dari cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf ). ||w||
wrktsj