BP反向传播公式推导
重点
- 界定一个节点的输入和输出
是激励函数的输出
Backpropagation算法(BP)是深度学习的基础,没有BP算法就没有神经网络,也不会有现在如火如荼的深度学习. BP算法并不仅仅适用于神经网络,对于任意系统,抽象成输入/输出/参数三个部分,如果输出对每个参数的导数已知,那么可以用BP算法把该系统调节到最优. 当然上述结论只在理论上成立,实践中会遇到各种问题,比如梯度爆炸/消失等数值问题. 本文通过一个简单的例子,介绍BP算法的推导过程.
卷积网络出现之前,神经网络有若干层组成,每个层有若干节点组成,层和层之间全连接,如下是层的第个节点节点示意图:
为了后续推导方便,这里把一个节点拆分成两个部分
* 求和
上图左侧的符号代表的部分,其输入 是前一层层的个输出,是当前层的权重参数,是当前节点的偏置参数,其输出是, 这是一个临时变量,方便后续推导
* 激励
上图右侧的符号代表激励函数,深度学习之前常见的的sigmoid/tanh,深度学习兴起后比较常见的是relu,激励函数必须是可导的,改进方向一般有
1. 前向传播时对数据的压缩能力
sigmoid把数据压缩到,比relu要好.压缩数据可以避免数据爆炸,加深网络层数
2. 后向传播时对梯度的保持能力
sigmoid之所以被relu替代,就是relu梯度为1(输入大于0时),不会压缩梯度,反向传播时更加有利
假设已知网络输出对的导数,BP反向传播时有一下三个值需要求取
-
对的导数
链式法则
所以导数从层反向传播到层,如下所示 -
对的导数
计算这个不是为了反向传播,而是为了应用梯度下降算法更新, 同样利用链式法则 -
对的导数
和上面类似,为了应用梯度下降算法更新,继续链式法则