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

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

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

Ответ 1

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

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

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

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

И activity_regularizer:

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

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

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

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

Ответ 2

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

Ответ 3

Регуляторы веса используются для регуляции весов в нейронной сети. это будет постоянно снижать вес.

Регуляризаторы активности, однако, используются для регуляризации вывода нейронной сети. Регулятор активности будет стремиться сделать вывод слоя меньшим. Что это означает для весов, зависит от сети (нелинейности, топология) и ее конфигурации (весовые значения). Если вы используете его в выходном слое, это сместит распределение выходов. С другой стороны,