Что такое ограничение maxnorm? Как это полезно в сверточных нейронных сетях?

Ответы:

16

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

Максимальные ограничения нормы. Другой формой регуляризации является установление абсолютной верхней границы величины вектора веса для каждого нейрона и использование спроецированного градиентного спуска для усиления ограничения. На практике это соответствует выполнению обновления параметра в обычном режиме, а затем обеспечению соблюдения ограничения путем зажима вектора весовых коэффициентов каждого нейрона для удовлетворенияТипичные значения имеют порядки 3 или 4. Некоторые люди сообщают об улучшениях при использовании этой формы регуляризации. Одним из его привлекательных свойств является то, что сеть не может «взорваться», даже если скорость обучения установлена ​​слишком высоко, потому что обновления всегда ограничены.вес| |вес| |2<с,с

Франк Дернонкур
источник
8

Я нашел ответ Маклауренса в другом вопросе очень полезным. Воспроизведено ниже:

Что делает ограничение веса max_norm?

maxnorm(m)будет, если L2-норма ваших весов превысит m, масштабировать всю матрицу весов с коэффициентом, который уменьшает норму до m. Как вы можете найти в коде keras в 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

Кроме того, maxnormесть axisаргумент, по которому вычисляется норма. В вашем примере вы не указываете ось, поэтому норма рассчитывается по всей весовой матрице. Например, если вы хотите ограничить норму каждого сверточного фильтра, предполагая, что вы используете tfупорядочение размеров, матрица весов будет иметь форму (rows, cols, input_depth, output_depth). Вычисление нормы axis = [0, 1, 2]будет ограничивать каждый фильтр данной нормой.

Зачем это делать?

Ограничение матрицы весов напрямую является еще одним видом регуляризации. Если вы используете простой термин регуляризации L2, вы штрафуете большие веса своей функцией потерь. С этим ограничением вы упорядочиваете напрямую. Как также указано в kerasкоде, это работает особенно хорошо в сочетании со dropoutслоем. Подробнее см. Главу 5.1 в этом документе.

jeremysprofile
источник
Хороший ответ, но будьте осторожны: «В вашем примере вы не указываете ось, поэтому норма рассчитывается по всей весовой матрице». - Это не похоже на правду (по крайней мере, на данный момент). Скорее норма тогда вычисляется по умолчанию axis=0.
Бобсон Дугнутт
Я согласен, максимальная норма берется как длина весов, которые разветвляются на узел в скрытом слое, т.е. , Вы также заметили, что для регуляризации отсева max-norm использовался для всех прогонов (см. Последний абзац на странице 1934 cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf ). ||вес||
wrktsj