Відповіді:
З http://cs231n.github.io/neural-networks-2/#reg :
Максимальні обмеження норми. Іншою формою регуляризації є встановлення абсолютної верхньої межі величини вагового вектора для кожного нейрона та використання прогнозованого градієнтного спуску для забезпечення обмеження. На практиці це відповідає виконанню оновлення параметрів як звичайному, а потім примусовому виконанню обмеження, затискаючи вектор ваги кожного нейрона для задоволенняТипові значення - на замовлення 3 або 4. Деякі люди повідомляють про поліпшення при використанні цієї форми регуляризації. Однією з його привабливих властивостей є те, що мережа не може «вибухнути», навіть якщо рівень навчання встановлений занадто високим, оскільки оновлення завжди обмежені.
Я знайшов відповідь McLawrence в іншому питанні дуже корисною. Відтворено нижче:
Що означає обмеження ваги
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 цього документу
axis=0
.