反向传播四公式

张一极

公众号:视觉迷航

本文共1516个字,涉及数学内容只有大一水平,可以放心食用:

引:

请熟悉前向传播规则 & 线性代数矩阵运算相关基础。


BP1

目的是求出最后一层的损失的梯度,这里的梯度,拆分成单个元素来看,就是:

代表的是最后一层的损失函数针对第j个神经元的偏导数,通过链式法则,

其中 代表的是最后一层的输出(未经历激活函数),代表的是,最后一层激活后的函数,所以:

那么对于最后一层的某一个神经元来说,梯度应该是这样的:

扩展到整个层的梯度,就是:

代表的是两个矩阵每一个位置的元素对应相乘)

参数:

 


BP2:

目的:计算前面每一层的梯度。

我们依旧先从单个元素入手,设z为未激活的输出,也就是那一层的W*input的结果,那么代表的是,某一层()对于损失的梯度,C代表的是cost,C对的偏导数,代表了l层第j个神经元的梯度:

这里有几个需要注意的地方,第一个就是关于这个 ,它代表的是,层的所有神经元的梯度,因为l层的第j个神经元连接着下一层的所有神经元, ,这个部分代表的是层的输出,对上一层的输出的一个梯度,可以进一步简化:

结果就是层的权重,最后一部分的,这三部分结合起来,就是公式2的结果:

 

归纳到整个层的结果:就是

Code:


BP3:

解释:

单个神经元而言,对于第层的j和下一层的i相连的这个权重(w)而言,他的梯度就是上一层的输出(或者说这一层的输入)乘以下一层的j神经元的梯度。


BP4:

bias的梯度,可直接使用当前层的梯度。

这是我自己实现的框架尝试实现的反向传播,可以帮助理解: