Как обновить смещение в обратном распространении нейронной сети? - PullRequest
67 голосов
/ 23 сентября 2010

Может кто-нибудь объяснить мне, как обновить смещение при обратном распространении?

Я прочитал довольно много книг, но не могу найти смещения обновления!

Я понимаю, что смещение - это дополнительный ввод 1 с прикрепленным к нему весом (для каждого нейрона). Там должна быть формула.

Спасибо,

@ msw

Самое интересное. Спасибо, я думаю, что есть два хороших момента: 1. «Свойство« универсальной аппроксимации »многослойных персептронов с наиболее часто используемыми функциями активации скрытого слоя не выполняется, если вы опустите члены смещения. Но Хорник (1993) показывает, что достаточное условие для свойства универсальной аппроксимации без смещений что ни одна производная функции активации не исчезает в начале координат, что подразумевает, что с обычными сигмоидальными функциями активации вместо фиксированного смещения можно использовать фиксированный ненулевой термин смещения ". 2. Термины смещения можно выучить так же, как и другие веса. «Поэтому я либо добавлю« постоянный вес », либо обучу этот вес, как и все остальные, используя градиентный спуск.

Я правильно понимаю?

Ответы [ 2 ]

64 голосов
/ 12 ноября 2012

В соответствии с обозначением Rojas 1996, глава 7 , обратное распространение вычисляет частные производные функции ошибки E (иначе стоимость, то есть потеря)

∂E/∂w[i,j] = delta[j] * o[i]

, где w[i,j] - это вес соединения между нейронами i и j, j на один уровень выше в сети, чем i, а o[i] - это выход (активация) i (в случае «входного слоя» это просто значение функции i в рассматриваемом обучающем примере). Как определить delta дано в любом учебнике и зависит от функции активации, поэтому я не буду повторять это здесь.

Эти значения затем можно использовать в обновлениях веса, например,

// update rule for vanilla online gradient descent
w[i,j] -= gamma * o[i] * delta[j]

, где gamma - скорость обучения.

Правило для весов смещения очень похоже, за исключением того, что нет входных данных от предыдущего слоя. Вместо этого смещение (концептуально) вызвано вводом от нейрона с фиксированной активацией 1. Таким образом, правило обновления для весов смещения составляет

bias[j] -= gamma_bias * 1 * delta[j]

, где bias[j] - это вес смещения нейрона j, умножение на 1, очевидно, может быть опущено, а gamma_bias может быть установлено на gamma или на другое значение. Если я правильно помню, предпочтительнее использовать более низкие значения, хотя я не уверен в теоретическом обосновании этого.

5 голосов
/ 18 октября 2017

Сумма, которую вы изменяете для каждого отдельного веса и смещения, будет частной производной вашей функции стоимости по отношению к каждому отдельному весу и каждому отдельному смещению.

∂C/∂(index of bias in network)

Поскольку ваша функция стоимости, вероятно, явно не зависит от индивидуальных весов и значений (например, стоимость может равняться (выход сети - ожидаемый выход) ^ 2), вам необходимо будет связать частичноепроизводные каждого веса и смещения к чему-то, что вы знаете, то есть значения активации (выходы) нейронов.Вот отличное руководство для этого:

https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d

В этом руководстве говорится, как делать эти вещи четко, но иногда может не хватать объяснений.Мне было очень полезно читать главы 1 и 2 этой книги, когда я читал руководство, указанное выше:

http://neuralnetworksanddeeplearning.com/chap1.html (предоставляет основную информацию для ответа на ваш вопрос)

http://neuralnetworksanddeeplearning.com/chap2.html (отвечает на ваш вопрос)

По сути, смещения обновляются так же, как обновляются весовые коэффициенты: изменение определяется на основе градиента функции стоимости в многомерной точке,

Думайте о проблеме, которую пытается решить ваша сеть, как о ландшафте многомерных холмов и долин (градиентов).Этот ландшафт представляет собой графическое представление того, как изменяются ваши затраты при изменении веса и смещений.Цель нейронной сети - достичь самой низкой точки в этом ландшафте, тем самым найти наименьшую стоимость и минимизировать ошибки.Если вы представляете свою сеть как путешественник, пытающийся достичь дна этих градиентов (т.е. градиентного спуска), то величина, на которую вы будете изменять каждый вес (и смещение), связана с наклоном наклона (градиент функции)что путешественник в настоящее время спускается вниз.Точное местоположение путешественника задается многомерной координатной точкой (weight1, weight2, weight3, ... weight_n), где смещение можно рассматривать как другой вид веса.Думая о весах / смещениях сети как переменных для функции стоимости сети, становится ясно, что следует использовать ∂C / ∂ (индекс смещения в сети).

...