Как может работать классическое правило обучения для ReLU (линейный выпрямитель)?

Я пытаюсь понять, как можно обучить обычный линейный выпрямитель (не дырявый и т. д.). Поскольку его производная равна 0, когда взвешенная сумма входных данных равна ‹ 0, то его правило обучения будет гласить, что если взвешенная сумма входных данных равна ‹ 0, то изменение веса (для любого веса) равно 0. Так как же когда-нибудь научитесь выводить положительное значение для определенного ввода, если он не выводит положительное значение для этого ввода с самого начала?

Интуитивно, если выход равен 0, а цель равна, скажем, 1, то вы захотите увеличить вес ненулевых входов. Но я не понимаю, как это можно оправдать с точки зрения градиента.


person HAK    schedule 02.08.2016    source источник
comment
Используя входной сигнал смещения, который изначально равен > 0.   -  person jorgenkg    schedule 02.08.2016


Ответы (1)


В основном - эта проблема преодолевается:

  1. Хорошая инициализация: с помощью так называемой Инициализации вы снижаете вероятность того, что ваши сетевые устройства будут находиться в регионе, в котором они отключаются мгновенно.
  2. Отключено обнаружение юнитов: легко обнаружить юниты, которые постоянно выводят 0. Вы можете изменить вес таких юнитов, если их слишком много.
  3. Увеличение количества устройств. Одним из простых решений для этого является увеличение количества устройств в вашей сети. Тогда вероятность того, что большая часть блоков будет отключена, уменьшается. Более того - именно для этого и был придуман relu. Вычисления значения relu и градиента намного быстрее, чем классические функции активации, что позволяет увеличить размер вашей сети.
person Marcin Możejko    schedule 02.08.2016