Подтвердить что ты не робот

Как обновить предвзятость в back backppagation нейронной сети?

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

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

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

4b9b3361

Ответ 1

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

∂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 или на другое значение. Если я правильно помню, более низкие значения предпочтительны, хотя я не уверен в теоретическом обосновании этого.

Ответ 2

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

∂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/∂ (индекс смещения в сети).