原创 【零基础】看懂神经网络中的反向传播

2019-10-14 10:19 1375 21 2 分类: 机器人/ AI 文集: AI

一、序言

  反向传播在神经网络中用于优化权重w和阈值b,是神经网络优化的核心算法。经过数日的学习终于看明白了一点反向传播的原理,这里作文记录心得。

  本文先介绍一下基本的数学计算方法,然后根据“损失计算公式”推导出优化参数的反向传播方法。

二、基本数学原理

  神经网络中优化参数w、b的方法称为反向传播,反向传播的具体实施方法称为“梯度下降”,梯度下降涉及两个基本的数学知识:求导、链式法则。

  1)求导

  假设有以下式:

  

  上式对x求导:

  

 

   实例:

  

 

   2)链式法则

  

 

   链式法则的意义在于将z对x的求导转化为z对y的求导和y对x的求导,示例如下:

  

 

   

 

  求y对z的导数

   

 

   已知:

  

 

  所以:

  

 

  3)求导的数学意义

  

 

  如上图所示,y对于x的导数本质上是求得x0处的斜率,若我们将x0增大一点点Δx,就可求得y轴上增大了多少Δy:

  Δy = Δx*(x0处的斜率)

  若我们想让y值趋向于最小,可以用y减去Δy:

  y = y0-Δy = y0-Δx*(x0处的斜率)

  其中y0、Δx、x0处的斜率都是已知的,我们就可以逐步趋近最小的y值。需要注意的是Δy只是一个近似的y轴增大量,不是实际的,但我们可以通过这个方法不断“逼近”y 的最小值。

三、损失计算

  考虑一个简单的传播函数:

  y = wx + b

  其中w是权重、b是阈值、x是输入、y是预测输出,我们可以用预测输出减去实际输出得到损失(预测与实际之间的差异):

 

   实际操作中我们会取误差的平方,因为平方差使得导出回归线更容易。只是为了降低运算难度,使用误差或误差的平方来衡量损失本质上没有区别。

 

  实际使用时,Y其实是个常数(label值),引入传播函数(Y撇)=wx+b

  Cost = (wx+b - Y)^2

 

四、梯度下降

  看上面的损失计算公式,会发现其实它是个抛物线,可以简化为y = x^2:

 

  让预测结果趋向于实际结果,本质上就是要找到一个最小的cost,也就是使上图中y趋向于0。有一点需要注意的是,在下式中:

  Cost = (wx+b - Y)^2

  我们期望的是找到一个最佳的w和b来求得最小的Cost,其中x和Y其实都是已知的。所以我们是对w和b求导求得Δw和Δb。为便于计算,我们可以做以下变化:

  Cost = (Error)^2

  Error = wx+b-Y

  

 

   

 

   根据链式法则,我们就可以得到:

  

 

  所以Δw = 2*error*x

  类似地可以推导出Δb=2*error

  在实际使用时,error值、x值都是已知的所以我们可以求得Δw和Δb

 

   上述反向传播的实现代码中,img即是x,Y-label即是error,除以m是因为实际操作时是一次对m个图片进行处理,这里求dw、db时需要取平均值所以除以m。其次实际代码中我们把Δw = 2*error*x的常数2忽略了,对实际操作没有影响。

五、总结

  最后在优化参数时,我们会用Δw和Δb乘以一个非常小的浮点数如0.001称为步幅(learning rate),再用w-Δw、b-Δb。所以本质上来说Δw和Δb只是指明了梯度下降的方向,比如在下面的函数图形中,在x轴左侧应当增大x值,在x轴右侧则应该减小x值,我们通过斜率就可以知道具体应该减少还是增大了。

请关注公众号“零基础爱学习”一起AI学习。

作者: 布兰姥爷, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3887969.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论1条评论)

登录后参与讨论

curton 2019-10-15 19:51

学习了
相关推荐阅读
布兰姥爷 2023-04-21 23:07
跟姥爷深度学习4 从数学计算看神经网络
一、前言我们前面简单的做了一个气温预测,经过反复调试,效果还不错。实际上在这个方向上我们还可以更进一步优化,但因为我们是学习嘛,主要还是看广度而不是深度。考虑到后面要开始学习卷积网络,我们必须把更基础...
布兰姥爷 2023-04-21 23:04
跟姥爷深度学习3 神经网络的调试实操
一、前言前面我们做了一次天气预测的模型,训练的结果都还好,网络好歹是“拟合”了,但预测数据不合预期让我一直耿耿于怀。所以我又花了很长时间来研究为什么,我的理论依据明明没有问题(今日平均温度与近一周平均...
布兰姥爷 2023-04-21 23:02
跟姥爷深度学习2 TensorFlow的基本用法
一、前言前面我们浅用TensorFlow做了个天气预测,虽然效果不咋样,但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍,在接口文件的基础上了解各参数的简单含...
布兰姥爷 2023-04-11 22:22
跟姥爷深度学习1,浅用tensorflow做个天气预测
一、前言最近人工智能、深度学习又火了,我感觉还是有必要研究一下。三年前浅学了一下原理没深入研究框架,三年后感觉各种框架都成熟了,现成的教程也丰富了,所以我继续边学边写。原教程链接:https://ww...
布兰姥爷 2023-03-29 12:41
AI为啥要用显卡
一、前言GPT的发布让AI再次热了起来,与上次阿尔法狗不同的是,现在人人都可以跟聊上几句,给它出出难题,还能调戏下。同期英伟达发布了针对AI领域的全新GPU H100,有的童鞋会疑惑,这个英伟达不是做...
布兰姥爷 2019-11-04 21:09
【零基础】使用Tensorflow实现神经网络
一、序言  前面已经逐步从单神经元慢慢“爬”到了神经网络并把常见的优化都逐个解析了,再往前走就是一些实际应用问题,所以在开始实际应用之前还得把“框架”翻出来,因为后面要做的工作需要我们将精力集中在业务...
我要评论
1
21
关闭 站长推荐上一条 /2 下一条