Керас: разница между регуляризаторами ядра и активности


87

Я заметил, что weight_regularizer больше не доступен в Keras и что вместо него есть регуляризатор активности и ядра . Я бы хотел знать:

  • В чем основные различия между регуляризаторами ядра и активности ?
  • Могу ли я использовать activity_regularizer вместо weight_regularizer ?

Ответы:


86

Регуляризатор активности работает как функция вывода сети и в основном используется для регуляризации скрытых единиц, в то время как weight_regularizer, как следует из названия, работает с весами, заставляя их распадаться. В принципе, вы можете выразить потерю регуляризации как функцию output ( activity_regularizer) или весов ( weight_regularizer).

Новые kernel_regularizerзаменяет weight_regularizer- хотя из документации это не очень понятно.

Из определения kernel_regularizer:

kernel_regularizer: функция регуляризатора, применяемая к kernelматрице весов (см. регуляризатор).

И activity_regularizer:

activity_regularizer: функция регуляризатора, применяемая к выходу слоя (его «активация»). (см. регуляризатор).

Важное изменение : обратите внимание, что в activity_regularizer есть ошибка, которая была исправлена ​​только в версии 2.1.4 Keras (по крайней мере, с бэкэндом Tensorflow). Действительно, в более старых версиях функция регуляризатора активности применяется ко входу уровня, а не к выходу (фактическая активация слоя, как предполагалось). Так что будьте осторожны, если вы используете старую версию Keras (до 2.1.4), регуляризация активности, вероятно, может работать не так, как задумано.

Вы можете увидеть коммит на GitHub

Пять месяцев назад Франсуа Шоле предоставил исправление для регулятора активности, которое затем было включено в Keras 2.1.4.


Вы полностью уверены в этой kernel_regularizerзамене weight_regularizer?
Simone

3
Я нашел много примеров с использованием kernel_regularizer, но не для activity_regularizer. Не могли бы вы прокомментировать варианты использования activity_regularizer?
Milad M

1
Зачем вам нужно упорядочивать вывод скрытых слоев? По той же причине, по которой мы нормализуем входные данные до диапазона (-1, 1) или (0, 1). То есть, чтобы входные данные для последующих уровней были меньше, чтобы помочь процессу SGD?
Нагабхушан Бадди

1
@NagabhushanBaddi, посмотрите этот ответ: datascience.stackexchange.com/a/15195/32811
Мишель Тонутти

1
@FinncentPrice Я могу только предположить, что он был там раньше, а теперь его больше нет
Мишель Тонутти

35

Ответ немного запоздалый, но он будет полезен будущим читателям. Итак, как говорится, необходимость - мать изобретательности. Я понимал это только тогда, когда мне это было нужно.
Приведенный выше ответ на самом деле не указывает на разницу, потому что оба они в конечном итоге влияют на веса, так в чем разница между наказанием самих весов или выходом слоя?
Вот ответ: я столкнулся со случаем, когда вес сети небольшой и приятный, в диапазоне от [-0,3] до [+0,3].
Так что я действительно не могу их наказать, с ними все в порядке. Регуляризатор ядра бесполезен. Тем не менее, выход слоя ОГРОМНЫЙ, в 100 единиц.
Имейте в виду, что вход в слой также невелик, всегда меньше единицы. Но эти маленькие значения взаимодействуют с весами таким образом, что производят такие огромные результаты. Здесь я понял, что мне нужен регуляризатор активности, а не регуляризатор ядра. Этим я наказываю слой за эти большие выходы, меня не волнует, малы ли сами веса, я просто хочу удержать его от достижения такого состояния, потому что это насыщает мою сигмовидную активацию и вызывает множество других проблем, таких как исчезновение градиент и застой.


Действительно интуитивно понятный.
Саранг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.