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, maxnorm
memiliki axis
argumen, 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 tf
pemesanan 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 keras
kode, ini tampaknya bekerja sangat baik dalam kombinasi dengan dropout
layer. Info lebih lanjut lihat bab 5.1 dalam makalah ini
axis=0
.