- Почему узлы смещения используются в нейронных сетях?
- Сколько вы должны использовать?
- В каких слоях вы должны их использовать: все скрытые слои и выходной слой?
Ответы:
Узел смещения в нейронной сети - это узел, который всегда включен. То есть его значение устанавливается равным без учета данных в данном шаблоне. Он аналогичен перехвату в регрессионной модели и выполняет ту же функцию. Если нейронная сеть не имеет узла смещения в данном слое, она не сможет производить вывод в следующем слое, который отличается от (в линейном масштабе, или значения, которое соответствует преобразованию при прохождении через функция активации), когда значения функции равны .0 0 0
Рассмотрим простой пример: у вас есть перцептрон с прямой связью с 2 входными узлами и и 1 выходным узлом . и являются двоичными функциями и установлены на их эталонном уровне, . Умножьте эти 2 на любые веса, которые вам нравятся, и , продукты и пропустите их через любую функцию активации, которую вы предпочитаете. Без узла смещения возможно только одно выходное значение, что может привести к очень плохой подгонке. Например, используя функцию логистической активации, должно бытьx 2 y x 1 x 2 x 1 = x 2 = 0 0 w 1 w 2 y .5, что было бы ужасно для классификации редких событий.
Узел смещения обеспечивает значительную гибкость для модели нейронной сети. В приведенном выше примере единственная прогнозируемая пропорция, возможная без узла смещения, составляла , но с узлом смещения любая пропорция в может подходить для шаблонов, где . Для каждого уровня , в который добавляется узел смещения, узел смещения будет добавлять дополнительных параметров / весов для оценки (где - количество узлов в слое( 0 , 1 ) x 1 = x 2 = 0 j N j + 1 N j + 1 j + 1). Больше параметров, которые будут установлены, означает, что обучение нейронной сети будет занимать пропорционально больше времени. Это также увеличивает вероятность переоснащения, если у вас нет значительно большего количества данных, чем веса, которые нужно изучить.
Имея это в виду, мы можем ответить на ваши конкретные вопросы:
Простые, короткие ответы:
В нескольких экспериментах в моей магистерской диссертации (например, на странице 59) я обнаружил, что смещение может быть важным для первого (ых) слоя (ов), но особенно в полностью связанных слоях в конце оно, похоже, не играет большой роли. Следовательно, они могут быть на первых нескольких слоях, а не на последних. Просто обучите сеть, нанесите на график распределение весов узлов смещения и обрежьте их, если веса кажутся слишком близкими к нулю.
Это может сильно зависеть от сетевой архитектуры / набора данных.
1
значение в предыдущем слое и один вес (одно значение смещения) для каждого из нейронов следующих слоев.
В контексте нейронных сетей Batch Normalization в настоящее время является золотым стандартом для создания умных «узлов смещения». Вместо того, чтобы фиксировать значение смещения нейрона, вы вместо этого настраиваете на ковариацию входа нейрона. Таким образом, в CNN вы должны применить пакетную нормализацию только между сверточным слоем и следующим полностью подключенным слоем (скажем, ReLus). Теоретически, все полностью связанные слои могут извлечь выгоду из нормализации партии, но на практике это становится очень дорогим для реализации, поскольку каждая нормализация партии имеет свои собственные параметры.
Что касается того, почему, большинство ответов уже объяснили, что, в частности, нейроны чувствительны к насыщенным градиентам, когда ввод толкает активацию до крайности. В случае ReLu это будет сдвигаться влево, давая градиент 0. В общем, когда вы тренируете модель, вы сначала нормализуете входы в нейронную сеть. Пакетная нормализация - это способ нормализации входов внутри нейронной сети, между слоями.