Aqui está um exemplo de código keras que o 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)))
Aqui está um exemplo de código keras que o 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)))
Em http://cs231n.github.io/neural-networks-2/#reg :
Restrições máximas de norma. Outra forma de regularização é impor um limite superior absoluto à magnitude do vetor de peso para cada neurônio e usar a descida projetada do gradiente para impor a restrição. Na prática, isso corresponde a executar a atualização de parâmetros normalmente e, em seguida, impor a restrição fixando o vetor de peso de cada neurônio para satisfazerOs valores típicos de estão nas ordens de 3 ou 4. Algumas pessoas relatam melhorias ao usar esta forma de regularização. Uma de suas propriedades atraentes é que a rede não pode "explodir" mesmo quando as taxas de aprendizado são muito altas porque as atualizações são sempre limitadas.
Eu encontrei uma resposta de McLawrence em outra pergunta para ser muito útil. Reproduzido abaixo:
O que faz uma restrição de peso
max_norm
?
maxnorm(m)
, se a norma L2 de seus pesos excederm
, dimensionará toda a sua matriz de pesos por um fator que reduz a norma am
. Como você pode encontrar no código keras emclass 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
Adicionalmente,
maxnorm
possui umaxis
argumento, ao longo do qual a norma é calculada. No seu exemplo, você não especifica um eixo; portanto, a norma é calculada sobre toda a matriz de pesos. Se, por exemplo, você deseja restringir a norma de todos os filtros convolucionais, supondo que você esteja usando atf
ordenação de dimensões, a matriz de pesos terá a forma(rows, cols, input_depth, output_depth)
. Calcular a normaaxis = [0, 1, 2]
excederá cada filtro à norma especificada.Por que fazer isso?
Restringir a matriz de pesos diretamente é outro tipo de regularização. Se você usar um termo simples de regularização L2, penalizará pesos altos com sua função de perda. Com essa restrição, você regulariza diretamente. Como também está vinculado no
keras
código, isso parece funcionar especialmente bem em combinação com umadropout
camada. Mais informações, consulte o capítulo 5.1 deste documento.
axis=0
.