链式法则
微积分中的求导法则,用于求一个复合函数的导数
数学公式
示例
求的导数
根据链式法则分解成两个函数嵌套:
规范神经网络中的参数
权重
我们用 表示连接
层第
个神经元至
层第
个神经元的权重,以下这个例子展示了第二层到第三层连接的权重
开始时这种表示方法很麻烦。但是只要您仔细想一下,就会发现这个符号的定义是非常简单而自然的。一个奇怪的地方就是
和
的索引顺序。您可能会认为,使用
来指代输入神经元,使用
来指代输出神经元,更加符合习惯,实际上是这样。我会在下面解释这种奇怪的原因
偏置项
对于网络中的偏置项,我们使用类似的表示法。明确地说,我们将 表示第
层中第
个神经元的偏置项。我们将
表示第
层中第
个神经元的偏置项。下图显示了使用中的这些符号的示例
其他
表示激活函数,如sigmod
表示
,表示权重的总和加偏置项,未经过激活函数的中间值
表示
这个神经元的激活值或输入值
总结
利用这些符号,通过等式,第 层中的第
个神经元的激活值
与第
层中的激活有关
反向传播需要的两个假设
反向传播的目的是求出损失函数各权重和偏置项的偏导和
,损失函数我们使用二次损失函数:
其中:n是训练样本的总数,x; y = y(x)是相应的实际输出; L表示网络中的层数;当输入x时, =
是从网络输出的激活值
那么为了可以应用反向传播,我们需要对成本函数C做哪些假设?
- 第一个假设是,对于单个训练示例
,损失函数可以写成平均值的形式
。
就是单个训练样本的损失函数,由此得知二次损失函数单个样本的损失函数为
,我们之所以需要这个假设,是因为反向传播实际上让我们做的是为单个训练示例计算偏导数
和
。然后,我们通过对样本进行均匀的训练来获得全局的
和
。
- 第二个假设是,它可以通过神经网络的输出写成一个函数,例如二次损失函数写成
反向传播的四个方程及证明
反向传播是用于了解网络中权重和偏置项的变化如何改变损失函数输出的值。最终,这意味着需要计算偏导数 和
。
但是为了计算这些误差,我们首先引入一个中间量,我们称其为第
层第
个神经元的误差。
反向传播将为我们提供计算误差 的过程,然后将
与
和
关联起来
要了解误差的定义方式,请考虑以下的这个故事
有一个神经网络,每次输入0就能输出1,输入1就能输出0,突然这个神经网络来了个恶魔,他占据了第 层的第
个神经元,这个恶魔非常调皮,恶魔在这个神经元的加权值输出
增加了一点变化
,因此神经元原本激活输出
)变为
。因为这个神经元值的变化,后面连接的神经元也产生了变化,原本输入0会输出1,现在输出0.8,原本输入1会输出0,现在输出0.4
突然一天这个恶魔变好了,并且正试图帮助您减小误差,但他忘记神经元的增加值,因此无法直接调整这个神经元的输出使神经网络的输出变为输入0就能输出1,但他很聪明,他找的了一个方法来使神经网络输出正确,他找到了微分公式,通过微分公式他得知最终的误差变化为
,通过间接改变
来使输出正确,原本
因为
的变化变得非常大,因此,恶魔可以通过选择
具有与
相反的符号来最终误差。相对的,如果
接近零,那么该恶魔就无法改变
来减小误差了。
通过这个故事我们可以感受到 与
的关系,我们可以定义
层中
神经元的误差
为
输出层的误差方程
证明:
通过链式法则得出
矩阵表达式:
二次损失函数:
根据误差计算上一层的误差
这是 层所有误差的矩阵表达式,证明只需证单个神经元
证明:
通过链式法则得出
网络中任何偏置项的变化率
证明:
通过链式法则得出
网络中任何权重的变化率
证明:
通过链式法则得出
这四个公式组成了反向传播
参考链接: