Как обновить предвзятость в back backppagation нейронной сети?
Может кто-нибудь объяснить мне, как обновить смещение во время обратного распространения?
Я прочитал довольно много книг, но не могу найти смещения обновления!
Я понимаю, что смещение - это дополнительный ввод 1 с прикрепленным к нему весом (для каждого нейрона). Там должна быть формула.
Ответы
Ответ 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/∂ (индекс смещения в сети).