Aquí hay un ejemplo de código keras que lo usa:
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)))
Aquí hay un ejemplo de código keras que lo usa:
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)))
De http://cs231n.github.io/neural-networks-2/#reg :
Restricciones de la norma máxima. Otra forma de regularización es imponer un límite superior absoluto en la magnitud del vector de peso para cada neurona y usar el descenso de gradiente proyectado para imponer la restricción. En la práctica, esto corresponde a realizar la actualización de parámetros de forma normal y luego hacer cumplir la restricción sujetando el vector de peso de cada neurona para satisfacerLos valores típicos de están en órdenes de 3 o 4. Algunas personas informan mejoras cuando usan esta forma de regularización. Una de sus propiedades atractivas es que la red no puede "explotar" incluso cuando las tasas de aprendizaje son demasiado altas porque las actualizaciones siempre están limitadas.
Encontré una respuesta de McLawrence en otra pregunta muy útil. Reproducido a continuación:
¿Qué hace una restricción de peso
max_norm
?
maxnorm(m)
Si la norma L2 de sus pesos excedem
, escalará toda su matriz de peso por un factor que reduce la norma am
. Como puede encontrar en el código keras enclass 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
Además,
maxnorm
tiene unaxis
argumento, a lo largo del cual se calcula la norma. En su ejemplo, no especifica un eje, por lo tanto, la norma se calcula sobre toda la matriz de peso. Si, por ejemplo, desea restringir la norma de cada filtro convolucional, suponiendo que esté utilizando eltf
ordenamiento de dimensiones, la matriz de peso tendrá la forma(rows, cols, input_depth, output_depth)
. Calcular la norma sobreaxis = [0, 1, 2]
limitará cada filtro a la norma dada.¿Por qué hacerlo?
Restringir la matriz de peso directamente es otro tipo de regularización. Si usa un término de regularización L2 simple, penaliza los pesos altos con su función de pérdida. Con esta restricción, se regulariza directamente. Como también está vinculado en el
keras
código, esto parece funcionar especialmente bien en combinación con unadropout
capa. Más más información, consulte el capítulo 5.1 de este documento
axis=0
.