前向传播和反向传播

  • 推导出前向传播算法和反向传播算法公式

f_{i+1}=f\left(f_{i} * w_{i}+1\right) ,根据梯度下降法,以目标的负梯度对目标进行更新。w \leftarrow w+\Delta w ,其中\Delta w=-\alpha \frac{\partial L o s s}{\partial w}

如果要更新第二层的权重,\Delta w_{1}=\frac{\partial L o s s}{\partial w_{2}}=\frac{\partial L o s s}{\partial f_{4}} \frac{\partial f_{4}}{\partial f_{3}} \frac{\partial f_{3}}{\partial f_{2}} \frac{\partial f_{2}}{\partial w_{2}}\frac{\partial f_{4}}{\partial f_{3}} 就是对激活函数求导,如果此部分大于1,随着层数的增多就会发生梯度爆炸,如果此部分小于1,就会发生梯度消失

  • 反向传播具体过程

每一层的线性变换是:z^{(l)}=W^{(l)} x^{(l)}+b^{(l)} ,输出为:\boldsymbol{a}^{(l)}=f\left(z^{(l)}\right) 其中 f 为非线性变换(如 sigmoid、tanh、relu),输出直接作为下一层输入

通过梯度下降法对参数进行更新: {W_{j i}^{(l)}=W_{j i}^{(l)}-\alpha \frac{\partial}{\partial W_{j i}^{(l)}} J(W, b)} \\ {b_{j}^{(l)}=b_{j}^{(l)}-\alpha \frac{\partial}{\partial b_{j}^{(l)}} J(W, b)}

为得到递推公式,先计算损失函数对隐藏层的偏导: \frac{\partial}{\partial z_{j}^{(l)}} J(\boldsymbol{W}, \boldsymbol{b})=\sum_{k=1}^{s_{l+1}}\left(\frac{\partial J(\boldsymbol{W}, \boldsymbol{b})}{\partial z_{k}^{(l+1)}} \frac{\partial z_{k}^{(l+1)}}{\partial z_{j}^{(l)}}\right)

其中 s_{l+1}是第 l+1层的节点数,而 \frac{\partial z_{k}^{(l+1)}}{\partial z_{j}^{(l)}}=\frac{\partial\left(\sum_{j^{\prime}=1}^{s_{l}} W_{k j^{\prime}}^{(l+1)} \cdot x_{j^{\prime}}^{(l+1)}+b_{k}^{(l+1)}\right)}{\partial z_{j}^{(l)}} ,其中x^{(l+1)}=a^{(l)}=f\left(z^{(l)}\right) ,所以\frac{\partial z_{k}^{(l+1)}}{\partial z_{j}^{(l)}}=W_{k j}^{(l+1)} f^{\prime}\left(z_{j}^{(l)}\right)

\frac{\partial}{\partial z_{j}^{(l)}} J(\boldsymbol{W}, \boldsymbol{b})\delta_{j}^{(l)} ,从而递推公式可以表示为\delta_{j}^{(l)}=\left(\sum_{k=1}^{s_{l+1}} W_{k j}^{(l+1)} \delta_{k}^{(l+1)}\right) f^{\prime}\left(z_{j}^{(l)}\right)

所以\begin{array}{l}{\frac{\partial}{\partial W_{j i}^{(l)}} J(W, b)=\frac{\partial J(W, b)}{\partial z_{j}^{(l)}} \frac{\partial z_{j}^{(l)}}{\partial W_{j i}^{(l)}}=\delta_{j}^{(l)} x_{i}^{(l)}=\delta_{j}^{(l)} a_{i}^{(l-1)}} \\ {\frac{\partial}{\partial b_{j}^{(l)}} J(W, b)=\delta_{j}^{(l)}}\end{array}

对两种不同的损失函数计算最后一层的残差:

平方损失误差:\begin{array}{c}{J(W, b)=\frac{1}{2}\left\|y-a^{(L L)}\right\|^{2}=\frac{1}{2}\left\|y-f\left(z_{j}^{(L)}\right)\right\|^{2}} \\ {\delta^{(L)}=-\left(y-a^{(L)}\right) f^{\prime}\left(z^{(L)}\right)}\end{array}

交叉熵损失:

J(W, b)=-\sum_{k=1}^{n} y_{k} \ln a_{k}^{(L)}=-\sum_{k=1}^{n} y_{k} \ln f\left(z_{k}^{(L)}\right)

在分类问题中,y_k仅在一个类别 k 时取值为1,其余为0,所以\begin{array}{c}{J(\boldsymbol{W}, \boldsymbol{b})=-\ln a_{\tilde{k}}^{(L)}} \\ {\delta_{k}^{(L)}=-\frac{1}{a_{\tilde{k}}^{(L)}} \cdot \frac{\partial a_{\tilde{k}}^{(L)}}{\partial z_{k}^{(L)}}}\end{array}

a_{k}^{(L)}=f_{k}\left(z^{(L)}\right) 取 SoftMax 激活函数时,有:

\delta_{k}^{(L)}=a_{k}^{(L)}-y_{k}=\left\{\begin{array}{lr}{a_{\tilde{k}}^{(L)}-1,} & {k=\tilde{k}} \\ {a_{k}} & {, k \neq \tilde{k}}\end{array}\right.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在求出前向传播和反向传播前要先确定参数和输入输出符号的表达形式 最普通的DNN就可以看做是一个多层感知机MLP,感...
    yi_cloud阅读 16,643评论 1 5
  • 前向传播和反向传播是神经网络中的重要基础。两者存在一些联系,所以本文将两者一起讲述,有利于大家理解。同时反向传播是...
    格物致知Lee阅读 3,241评论 2 12
  • 英文原文深度学习---反向传播的具体案例BP(反向传播算法)公式推导及例题解析 前向传播 input ->输入到-...
    云上听风阅读 709评论 0 0
  • 此时 老公牵着我的手 我牵着儿子的手 漫步在珠海的情侣路上 记得很多年前 我的初恋和我说过这条情侣路 说这条路很浪...
    幸福氧花阅读 721评论 0 3
  • 1、工作复盘 01、别做自以为是的服务。 02、思考问题背后的问题。 03、为什么我愿意帮你?因为你是我值得我信赖...
    橙乐_阅读 135评论 0 0

友情链接更多精彩内容