如何更新神经网络反向传播中的偏差?


75

有人可以向我解释在整个反向传播过程中如何更新偏差吗?

我已经读了很多书,但是找不到偏差更新!

我了解到,偏见是1的额外输入,并带有权重(对于每个神经元)。必须有一个公式。


4
这是一个大问题,但答案却令人遗憾。这是一个不错的起点:ftp.sas.com/pub/neural/FAQ2.html#A_bias
msw

1
像其他所有人一样使用梯度下降训练这种重量
pberkes

需要偏置项,偏置值允许您将激活函数(S型函数)向左或向右移动。偏差项中使用的权重将在反向传播算法中更改,并将使用梯度下降或高级优化技术(如Octave / Matlab中的fminunc函数)进行优化。
Goyal Vicky

Answers:


70

按照Rojas 1996第7章的说明,反向传播计算误差函数的偏导数E(即成本,即损失)

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

其中,w[i,j]是神经元i和之间的连接权重jj是网络中比更高的一层io[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],对神经元的偏倚权重为j1,显然可以省略与1的乘法,并且gamma_bias可以设置为gamma或设置为其他值。如果我没记错的话,最好使用较低的值,尽管我不确定这样做的理论依据。


人们是否1l这一层的激活中包括了层的偏见()?我的意思是,如果是这样,则可以将layer中权重的更新(l包括其偏差的权重)写为一个公式:w(l) -= gamma * dot( delta(l+1), o(l)),对吗?
杰森

8

您更改每个单独的权重和偏差的量将是成本函数相对于每个单独的权重和每个偏差的偏导数。

∂C/∂(index of bias in network)

由于您的成本函数可能并不明确地取决于各个权重和值(例如,成本可能等于(网络输出-预期输出)^ 2),因此您需要将每个权重和偏差的偏导数与您所需要的东西相关联知道,即神经元的激活值(输出)。这是执行此操作的绝佳指南:

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

本指南阐明了如何清楚地执行这些操作,但有时可能缺乏解释。当我阅读上面链接的指南时,我发现阅读本书的第一章和第二章非常有帮助:

http://neuralnetworksanddeeplearning.com/chap1.html (提供回答问题的必要背景)

http://neuralnetworksanddeeplearning.com/chap2.html (回答您的问题)

基本上,偏差的更新方法与权重的更新方法相同:更改是基于多维点上成本函数的梯度确定的。

考虑一下您的网络试图解决的问题,因为它是多维丘陵和山谷(渐变)的景观。这种情况是权重和偏差不断变化时成本变化的图形表示。神经网络的目标是到达此景观中的最低点,从而找到最小的成本并使错误最小化。如果您将网络想象成试图到达这些梯度底部的旅行者(即“梯度下降”),那么将改变每个权重(和偏差)的量与倾斜度(函数的梯度)有关旅行者当前正在下降。旅行者的确切位置由多维坐标点(weight1,weight2,weight3,... weight_n)给出,在该坐标点上,偏差可以视为另一种重量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.