梯度下降算法是机器学习中最常用的优化算法之一,它可以求得目标函数的最小值,即算法的最优解。而对于复杂的多层神经网络来说,运用梯度下降算法十分复杂,因为其包含求导过程,为此学者将多层神经网络的优化问题简化为反向传播过程,也就是说,将目标函数(输出误差项)层层传递回输入层,求出每个节点的误差项,并根据每个节点的误差项更新各个权值。首先我们复习梯度下降算法,然后详细推导反向传播算法的原理。

梯度下降算法

我们的目标是优化目标函数,即求得目标函数的最小值,根据微积分的知识,求导数为0的点即是极值点。不过计算机可不会解方程,但是它可以凭借强大的计算能力,一步一步的去把函数的极值点『试』出来。

那怎么保证快速地朝下降的方向走到局部最低点呢?这里的奥秘在于,我们每次都是向函数的梯度相反方向走的。梯度是一个向量,它指向函数值上升最快的方向。显然,梯度的反方向当然就是函数值下降最快的方向了。我们每次沿着梯度相反方向去修改的值,当然就能走到函数的最小值附近。

梯度下降算法计算如下:

。                                 (1)

首先计算出最终的误差项(待优化函数),其中y表示目标值,而带上标的代表计算出的实际值。我们用均方误差表示误差项。

接下来对E求导如下,将导数值代入(1)式即得到权值的更新值。

反向传播算法

梯度下降算法在计算单个感知器或线性单元的优化函数时很方便,然而单个感知器功能十分有限。早在1969年,作为人工神经网络创始人的明斯基和佩珀特就论证了简单的线性感知器不能解决如“异或”(XOR )这样的基本问题。因此出现了由多个感知器构成的多层神经网络,可以模拟复杂的非线性函数。但是怎么优化多层神经网络呢?此时仍然可以采用梯度下降算法,只是梯度下降算法包含求导过程,对于多层神经网络而言求导十分复杂,因此学者把多层神经网络的梯度下降问题分解成了反向传播过程

首先我们用传统梯度下降算法计算一个三层神经网络,其中求导部分使用的链式求导法则,关于这个大家可以看看微积分,这里就不赘述了。下面公式预警!(太难打了就手写,见谅)

三层神经网络如图,神经元的激活函数为sigmoid函数。从左到右分别为输入层(i),隐藏层(h),输出层(o),net代表单个神经元的输入,out代表单个神经元的输出。w代表权值。

对于隐藏层第一个神经元h1我们采用梯度下降算法计算其更新后的值,过程如下:主要是在计算误差E对权值w的导数,采用链式求导法(很多次,比较难懂,可以自己写一下),最后得到结果。这个网络只有三层,但是有六项链式求导项,那么更复杂层数更多的的网络计算将非常困难怎么解决这个问题呢?可以将结果分为三部分。第二和第三部分很好理解,一个是sigmoid函数求导,一个是权值。第二部分定义为神经元h1的误差项,记为

经过计算可知,其中,因此更新过程可写为:

即使是非常复杂的神经网络也可以采用这个算法进行权值更新,它被称为反向传播算法的原因可以直观理解为下图:

误差传递:

权值更新:

        这与前向传播过程十分相似,只是前向传播过程将输入层层传输至输出以获得目标函数(误差项),而反向传播过程将误差层层传递至输入层以更新权值矩阵。

前向传播过程如下图所示:

(图片参考自CSDN: “反向传播算法”过程及公式推导(超直观好懂的Backpropagation))

Reference

  1. 零基础入门深度学习: https://www.zybuluo.com/hanbingtao/note/448086
  2. 吴恩达教授,《机器学习》,斯坦福大学
  3. David E. Rumelhart, Geoffrey E. Hinton, Ronald J. Williams, Learning Representations By Back Propagating Errors , Nature 1986
  4. Aurelien Geron, Hands on Machine-Learning with Scikit-Learn, Keras &TensorFlow
  5. CSDN:“反向传播算法”过程及公式推导(超直观好懂的Backpropagation)

梯度下降与反向传播算法的原理与推导相关推荐

  1. 独家 | 数据科学家指南:梯度下降与反向传播算法

    作者:Richmond Alake 翻译:陈之炎 校对:zrx本文约3300字,建议阅读5分钟 本文旨在为数据科学家提供一些基础知识,以理解在训练神经网络时所需调用的底层函数和方法. 标签:神经网络, ...

  2. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现

    梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...

  3. php梯度区间计算,快速计算梯度的魔法--反向传播算法

    2.1 计算梯度的数值方法 第一次实验我留的一个课后作业里问你是否能够想出一个求解梯度的办法,其实不难想到一种简单的办法就是使用"数值法"计算梯度. 办法很简单,就是对于损失函数中 ...

  4. 快速计算梯度的魔法--反向传播算法

    一.实验介绍 1.1 实验内容 第一次实验最后我们说了,我们已经学习了深度学习中的模型model(神经网络).衡量模型性能的损失函数和使损失函数减小的学习算法learn(梯度下降算法),还了解了训练数 ...

  5. 深度学习的基础知识(机器学习、损失函数、梯度下降、反向传播、基础模型一网打尽)

    1.预备信息 1.1了解技术的发展阶段 技术一般存在几个阶段:1.发展期.2.高峰期.3.冰河期.4.应用期 就是先达到一个高峰,但是在达到高峰之后就会被发现很多问题,然后热度就会不断地下降,到达一个 ...

  6. 反向传播算法公式推导,神经网络的推导

    如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法. 其主要思 ...

  7. 【深度学习入门到精通系列】关于梯度下降和反向传播的探索

    文章目录 1 简单理解梯度下降 2 梯度下降作用 3 反向传播 4 图示 1 简单理解梯度下降 梯度下降它是一个函数f(x)找它的最小值x0所在的那个点. 2 梯度下降作用 总之一句话概括就是,梯度下 ...

  8. 深度学习第三次课-梯度下降与反向传播

    梯度下降 损失函数可视化 得分函数   f=W*X 损失函数   c=W*X-y 目标    损失函数最小    最优化过程 可视化 一维 二维   热力图 如果损失函数是一个凸函数,例如SVM. 凸 ...

  9. 【深度学习】梯度下降和反向传播

    声明:本博客只是小白博主自己的记录博客,仅供参考. 导数到底是什么? 引用知乎上的一个回答 那么导数的本质是什么?就是变化率呗,例如小王今年卖了100头猪,去年90头,前年80头,,,也就是说每年增加 ...

最新文章

  1. 11matlab [A rank]=sort (B), P = p(rank,: )的问题 and ~符号运算
  2. ​两院院士评选“2021年中国/世界十大科技进展新闻”揭晓
  3. 太难了!开源项目如何商业化?
  4. Ajax+Node.js前后端交互最佳入门实践(01)
  5. 【计算机算法设计与分析】——排序
  6. 微软75亿收购Github,微软以开发者为中心的初心不变
  7. mysql用时查询_mysql 常用时间查询
  8. 信息学奥赛一本通(1248:Dungeon Master)
  9. 左移寄存器vhdl_VHDL实验代码:8位移位寄存器
  10. PHPWAMP强行脱离依赖,在系统缺失必备组件或DLL受损的情况下依然能正常运行
  11. 使用词和图嵌入来衡量统一医学语言系统概念之间的语义相关性
  12. XDG0062 XAML 与XDG0008 XAML 错误的解决办法
  13. 这个夏天,飞到北纬18°去玩海——带着小样儿去三亚(二)
  14. 一根网线实现双机互联共享文件
  15. 作为数据分析师,这6款数据分析热门工具,你不能错过~
  16. SpringMVC一:概述、环境搭建及开发流程
  17. 我的程序员之路(二) 大四实习
  18. 224、三维形体投影面积
  19. mysql 未指定驱动程序_[ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序...
  20. HTML颜色渐变效果

热门文章

  1. oracle安装与使用
  2. leetcode 滑动窗口1
  3. Android - TextView Ellipsize属性
  4. win7怎么装python_如何在win7上面安装python的包
  5. 藏宝阁显示角色可买服务器,梦幻西游藏宝阁里面买角色时选的可转入服务器是不是一定可以转...
  6. Hadoop---Google MapReduce(转)
  7. Autosar BSW开发必知的“术语”+“缩写”概念-1-诊断通信篇
  8. centos7搭建hexo博客步骤
  9. keras实现一种带桥接的空洞金字塔池化的unet分割模型
  10. 美国知名泄密网站维基揭秘网屡建奇功