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