BP反向传播公式推导

重点

  • 界定一个节点的输入和输出
    z z 是激励函数的输出

Backpropagation算法(BP)是深度学习的基础,没有BP算法就没有神经网络,也不会有现在如火如荼的深度学习. BP算法并不仅仅适用于神经网络,对于任意系统,抽象成输入/输出/参数三个部分,如果输出对每个参数的导数已知,那么可以用BP算法把该系统调节到最优. 当然上述结论只在理论上成立,实践中会遇到各种问题,比如梯度爆炸/消失等数值问题. 本文通过一个简单的例子,介绍BP算法的推导过程.

卷积网络出现之前,神经网络有若干层组成,每个层有若干节点组成,层和层之间全连接,如下是 k k 层的第 j j 个节点节点示意图:

BP反向传播公式推导_第1张图片

为了后续推导方便,这里把一个节点拆分成两个部分
* 求和
上图左侧的 符号代表的部分,其输入 zk1i z i k − 1 i=0,1,2,...,n i = 0 , 1 , 2 , . . . , n 是前一层 k1 k − 1 层的 n n 个输出, wki w i k 是当前层的权重参数, bkj b j k 是当前节点的偏置参数,其输出是 akj=ni=0wkizk1i+bkj a j k = ∑ i = 0 n w i k z i k − 1 + b j k , 这是一个临时变量,方便后续推导
* 激励
上图右侧的 符号代表激励函数,深度学习之前常见的的sigmoid/tanh,深度学习兴起后比较常见的是relu,激励函数必须是可导的,改进方向一般有
1. 前向传播时对数据的压缩能力
sigmoid把数据压缩到 [0,1] [ 0 , 1 ] ,比relu要好.压缩数据可以避免数据爆炸,加深网络层数
2. 后向传播时对梯度的保持能力
sigmoid之所以被relu替代,就是relu梯度为1(输入大于0时),不会压缩梯度,反向传播时更加有利

假设已知网络输出 J J zkj z j k 的导数 δkj=dJdzkj δ j k = d J d z j k ,BP反向传播时有一下三个值需要求取

  • J J zk1i z i k − 1 的导数 δk1i=dJdzk1i δ i k − 1 = d J d z i k − 1
    链式法则

    dJdzk1i=dJdzkjdzkjdzk1i=δkjdzkjdzk1i=δkjdzkjdakjdakjzk1i=δkjg(akj)dakjzk1i=δkjg(akj)wki d J d z i k − 1 = d J d z j k d z j k d z i k − 1 = δ j k d z j k d z i k − 1 = δ j k d z j k d a j k d a j k z i k − 1 = δ j k ▽ g ( a j k ) d a j k z i k − 1 = δ j k ▽ g ( a j k ) w i k

    所以导数 δ δ k k 层反向传播到 k1 k − 1 层,如下所示
    δk1i=δkjg(akj)wki δ i k − 1 = δ j k ▽ g ( a j k ) w i k

  • J J wki w i k 的导数
    计算这个不是为了反向传播,而是为了应用梯度下降算法更新 wki w i k , 同样利用链式法则

    dJdwki=dJdzkjdzkjdwki=δkjdkjdwki=δkjdzkjdakjdakjwki=δkjg(akj)dakjwki=δkjg(akj)zk1i d J d w i k = d J d z j k d z j k d w i k = δ j k d j k d w i k = δ j k d z j k d a j k d a j k w i k = δ j k ▽ g ( a j k ) d a j k w i k = δ j k ▽ g ( a j k ) z i k − 1

  • J J bkj b j k 的导数
    和上面类似,为了应用梯度下降算法更新 bkj b j k ,继续链式法则

    dJdbkj=dJdzkjdzkjdbkj=δkjdkjdbkj=δkjdzkjdakjdakjbkj=δkjg(akj)dakjbkj=δkjg(akj) d J d b j k = d J d z j k d z j k d b j k = δ j k d j k d b j k = δ j k d z j k d a j k d a j k b j k = δ j k ▽ g ( a j k ) d a j k b j k = δ j k ▽ g ( a j k )

你可能感兴趣的:(三省吾身)