O que é restrição maxnorm? Como é útil em redes neurais convolucionais?

12

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)))
Jatin
fonte

Respostas:

16

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.ww2<c.c

Franck Dernoncourt
fonte
8

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 exceder m, dimensionará toda a sua matriz de pesos por um fator que reduz a norma a m. Como você pode encontrar no código keras em 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

Adicionalmente, maxnormpossui um axisargumento, 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 a tfordenação de dimensões, a matriz de pesos terá a forma (rows, cols, input_depth, output_depth). Calcular a norma axis = [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 kerascódigo, isso parece funcionar especialmente bem em combinação com uma dropoutcamada. Mais informações, consulte o capítulo 5.1 deste documento.

jeremysprofile
fonte
Boa resposta, mas cuidado: "No seu exemplo, você não especifica um eixo; portanto, a norma é calculada em toda a matriz de pesos". - Isso não parece ser verdade (pelo menos a partir de agora). Em vez disso, a norma é calculada sobre o padrão axis=0.
Bobson Dugnutt
Concordo que a norma máxima é tomada como o comprimento dos pesos que se abrangem em um nó em uma camada oculta, ou seja, . Além disso, você notou que, para a regularização do abandono, a norma máxima foi usada para todas as execuções (consulte o último parágrafo na página 1934 de cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf ). ||w||
NXG Logic