反向传播BP学习算法Gradient Descent的推导过程

作者:Cyril_KI 时间:2022-09-08 09:51:06 

BP算法是适用于多层神经网络的一种算法,它是建立在梯度下降法的基础上的。本文着重推导怎样利用梯度下降法来minimise Loss Function。

给出多层神经网络的示意图:

反向传播BP学习算法Gradient Descent的推导过程

1.定义Loss Function

反向传播BP学习算法Gradient Descent的推导过程

每一个输出都对应一个损失函数L,将所有L加起来就是total loss。

那么每一个L该如何定义呢?这里还是采用了交叉熵,如下所示:

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

最终Total Loss的表达式如下:

反向传播BP学习算法Gradient Descent的推导过程

2.Gradient Descent

L对应了一个参数,即Network parameters θ(w1,w2…b1,b2…),那么Gradient Descent就是求出参数 θ∗来minimise Loss Function,即:

反向传播BP学习算法Gradient Descent的推导过程

梯度下降的具体步骤为:

反向传播BP学习算法Gradient Descent的推导过程

3.求偏微分

从上图可以看出,这里难点主要是求偏微分,由于L是所有损失之和,因此我们只需要对其中一个损失求偏微分,最后再求和即可。

先抽取一个简单的神经元来解释:

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

因为我们并不知道后面到底有多少层,也不知道情况到底有多复杂,我们不妨先取一种最简单的情况,如下所示:

反向传播BP学习算法Gradient Descent的推导过程

4.反向传播

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

l对两个z的偏导我们假设是已知的,并且在这里是作为输入,三角形结构可以理解为一个乘法运算电路,其放大系数为 σ′(z)。但是在实际情况中,l对两个z的偏导是未知的。假设神经网络最终的结构就是如上图所示,那么我们的问题已经解决了:

反向传播BP学习算法Gradient Descent的推导过程

其中:

反向传播BP学习算法Gradient Descent的推导过程

但是假如该神经元不是最后一层,我们又该如何呢?比如又多了一层,如下所示:

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

原理跟上面类似,如下所示:

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

那假设我们再加一层呢?再加两层呢?再加三层呢?。。。,情况还是一样的,还是先求l对最后一层z的导数,乘以权重相加后最后再乘上 σ′(z′′,z′′′,...)即可。

最后给一个实例:

反向传播BP学习算法Gradient Descent的推导过程

它的反向传播图长这样:

反向传播BP学习算法Gradient Descent的推导过程

反向传播BP学习算法Gradient Descent的推导过程

我们不难发现,这种计算方式很清楚明了地体现了“反向传播”四个字。好了,目标达成!!

反向传播BP学习算法Gradient Descent的推导过程

5.总结

反向传播BP学习算法Gradient Descent的推导过程

来源:https://blog.csdn.net/Cyril_KI/article/details/107030538

标签:BP,反向传播,Gradient,Descent,推导
0
投稿

猜你喜欢

  • Python利用shutil模块实现文件夹的复制删除与裁剪

    2023-12-19 04:16:23
  • python之excel文件(.xls文件)处理方式

    2021-08-22 15:58:14
  • Python+matplotlib绘制饼图和堆叠图

    2022-11-17 05:42:40
  • Python异常之常见的Bug类型解决方法

    2022-09-02 15:17:14
  • Python使用文件操作实现一个XX信息管理系统的示例

    2022-07-12 15:28:31
  • pycharm全局修改方式

    2021-10-11 12:51:56
  • python+logging+yaml实现日志分割

    2023-12-18 01:19:08
  • python列表的增删改查实例代码

    2021-08-11 04:06:51
  • Python中支持向量机SVM的使用方法详解

    2021-02-08 00:41:01
  • 打造“前端开发”程序员专用版EditPlus

    2009-01-05 13:04:00
  • Python利用zhdate模块实现农历日期处理

    2023-03-07 22:10:20
  • 详解python第三方库的安装、PyInstaller库、random库

    2023-03-13 06:57:46
  • Ubuntu查看修改mysql的登录名和密码、安装phpmyadmin

    2023-11-21 23:36:59
  • python3实现zabbix告警推送钉钉的示例

    2023-01-16 06:59:04
  • 详解Python变量与注释高级用法

    2022-08-06 08:17:08
  • python+django加载静态网页模板解析

    2022-06-14 16:58:47
  • TensorFlow实现简单线性回归

    2023-09-18 13:23:45
  • python编写俄罗斯方块

    2023-04-02 11:03:06
  • css样式表滤镜全接触

    2007-10-26 12:48:00
  • Python 利用Entrez库筛选下载PubMed文献摘要的示例

    2021-05-27 11:35:01
  • asp之家 网络编程 m.aspxhome.com