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

Kat*_*tya 68 math artificial-intelligence machine-learning neural-network

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

我读了不少书,但找不到偏见更新!

我知道偏差是1的额外输入,附加了一个重量(对于每个神经元).必须有一个公式.

谢谢,

@msw

最有趣的.谢谢,我认为有两个好点:1."如果省略偏差项,多层感知器的"通用近似"属性与最常用的隐藏层激活函数不成立.但Hornik(1993)证明了没有偏差的通用逼近性质的充分条件是激活函数的衍生物在原点处没有消失,这意味着利用通常的S形激活函数,可以使用固定的非零偏置项代替可训练的偏差.2.偏差项可以像其他权重一样学习."所以我要么增加'恒定权重',要么像所有其他权重一样使用梯度下降训练这个权重.

我理解对吗?

Fre*_*Foo 66

遵循罗哈斯1996年的第7章,反向传播计算误差函数的偏导数E(又称成本,又称损失)

?E/?w[i,j] = delta[j] * o[i]
Run Code Online (Sandbox Code Playgroud)

其中w[i,j]是神经元之间的连接的权重ij,j作为网络比一层更高i,和o[i]是的输出(活化)i(在"输入层"的情况下,这仅仅是特征的值i的训练样本中下考虑).如何确定delta在任何教科书中给出并取决于激活功能,所以我在此不再重复.

然后可以将这些值用于重量更新,例如

// update rule for vanilla online gradient descent
w[i,j] -= gamma * o[i] * delta[j]
Run Code Online (Sandbox Code Playgroud)

gamma学习率在哪里.

偏差权重的规则非常相似,只是前一层没有输入.相反,偏差是(概念上)由来自具有固定激活1的神经元的输入引起的.因此,偏差权重的更新规则是

bias[j] -= gamma_bias * 1 * delta[j]
Run Code Online (Sandbox Code Playgroud)

其中bias[j]是神经元上的偏差的权重,j显然可以省略与1的乘法,并且gamma_bias可以设置为gamma或不同的值.如果我没记错的话,较低的值是首选,但我不确定理论上的理由.


H F*_*dge 7

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

?C/?(index of bias in network)
Run Code Online (Sandbox Code Playgroud)

由于您的成本函数可能并不明确地依赖于各个权重和值(例如,成本可能等于(网络输出-预期输出)^ 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)给出,在该坐标点上,偏差可以视为另一种重量。