04依赖反向传播改进神经网络数据处理的精确度

1、反向传播简介

前面说过,神经网络模型中,需要修正的参数是神经元链路之间的权重值,问题在于如何修改,如下图,假定最后神经元输出结果跟正确结果对比后得到一个误差,那么我们如何根据误差来修正W(1,1)和W(2,1)呢?

神经网络模型的问题在于,任何一个节点链路权重的改变都会对最终结果产生影响。所以当我们拿到计算结果以后,不能仅只改变其中一个的权重,而是所有的权重都要做相应的修改。

所以接下来的问题是我们如何把误差分诶给每个权重进行调整呢?

合理的做法是:根据权重的比值进行相应的调整。于是误差的反向传播模式如下图:

之后这个误差回传机制继续运用到后续节点链路上,这就是所谓的反向传导。上面的模型中,输出节点只有一个,如果输出节点有多个的情况如下:

每个节点拿到误差以后都会根据其节点的链路权重等比例的返回给后面的节点。

如果第一个节点的输出结果为O1,对应的正确结果为T1。则误差就是error1 = T1 - O1。

layer1中的节点1的误差分别来源于对应的layer2的节点,最终加起来layer1的节点1所应该承担的误差为:

节点二的误差同理可得。

如果还有更多的层级,则这个反向传播机制就一直进行下去:

通过反向传播,我们就能把最外层节点获得的误差传导给神经网络每一层的每个节点,每个节点再根据获得的误差调整它与下一层网络节点的链路权重,这个误差回传过程就是神经网络中经常提到的反向传播机制。 下一节我们看看如何使用矩阵快速实现反向传播误差的计算。

2、使用矩阵运算加速实现神经网络误差的反向传播

step(1)处理权重的反函数


从上图看,神经网络在输出层有两个节点,因此它对应两个误差值假设分别为e1,e2,我们用一维向量来表示,并且观察我们发现中间层两个神经元节点的误差运算正好等于下面的矩阵运算:
上面左边大矩阵里,我们可以做进一步的简化,把矩阵每个元素中的分母给去掉,因为分母是固定该行元素的和,并且去掉分母后,神经元对应的误差只不过是做了一次线性变换,因此把分母去掉不影响神经网络迭代运算的正确性。

因为神经网络是一种以迭代方式进行的数值运算,他具体的运算结果并不重要,只要运算结果和最终结果相比足够精确即可。

回想前面我们说过的用矩阵驱动神经网络数据加工链所说的,用矩阵来表示神经元链路的内容,那里提到如何用矩阵运算上一层节点如何把信号传递给下一层节点时,用到了下面公式:
虽然这个是个三行三列的,跟二行二列的对比,但是不难发现。这俩矩阵之间是转置矩阵的关系:

step(2)处理激活函数的反函数

由于神经元的信号是由上一层的多个神经元传入,并且多个信号组合在一起后,还经历了一次非线性的激活函数运算,如果我们要像前面说过的通过分析函数表达式,然后通过误差反向计算出神经元链路修改后的数值,那么这个过程是相当复杂的。

所以我们采取一种方法叫做:梯度下降法

梯度下降法

梯度:一元函数叫导数,多元函数的导数就叫梯度。梯度(gradient)是张量运算的导数。它是导数这一概念向多元函数导数的推广。
我们不管一个函数形成的曲线或曲面有多复杂,我们只要在给定点上做这条曲线或曲面的切线,如果切线的斜率表明切线是向下倾斜的,那么朝着切线的方向增大或减小变量的值,那么根据函数计算出来的值就会相应的变小。

给定一个可微函数,理论上可以用解析法找到它的最小值:函数的最小值是导数为 0 的点, 因此你只需找到所有导数为 0 的点,然后计算函数在其中哪个点具有最小值。
将这一方法应用于神经网络,就是用解析法求出最小损失函数对应的所有权重值。

注意点一:step值大小的选择

但是需要有一点需要注意的是如果改变步伐值时,步伐过大就可能会越过最低点。然后反复跳来跳去找不到最低点。如果取值太小,则沿着曲线的下降需要很多次迭代,而且可能会陷入局部极小点。如果取值太大,则更新权重值之后 可能会出现在曲线上完全随机的位置。
沿着一维损失函数曲线的随机梯度下降(一个需要学习的参数)

上图描述的是一维参数空间中的梯度下降,但在实践中需要在高维空间中使用梯度下降。 神经网络的每一个权重参数都是空间中的一个自由维度,网络中可能包含数万个甚至上百万个参数维度。

沿着二维损失曲面的梯度下降(两个需要学习的参数)

我们要从曲面的顶部下到曲面的最底部,我们只要求出变量x和y所在位置的切线,根据切线斜率觉得两个变量的增减,如果变量y对应的切线斜率是正的,那么我们就适当的减少y的值,如果变量x的斜率是负的,那么我们就适当增加x的值,这样就跟上图所示,从顶部摸索出一条走到底部的路径。

注意点二:避免局部极小点

牛顿下山法有个问题就是会落入局部最低点。一条曲线或曲面可能有多个低谷,其中只有一个低谷位置是最低的,利用牛顿下山法时,如果进入一个局部低谷,那么可能就再也出不来了,也就是说我们确实走到了低谷,当只是局部低谷,而不是全局低谷。

这种做法对应到神经网络上就是,一开始神经网络每条链路上的权重是随机赋值的,经过第一轮训练后,我们得到一个优化的网络,第二次我们再次随机赋予每条链路随机值,然后再进行一轮新的训练,反复如此操作多次,从多次训练结果中选择最优的结果。

深度学习笔记:04依赖反向传播改进神经网络数据处理的精确度相关推荐

  1. 深度学习笔记三:反向传播(backpropagation)算法

    接上一篇的最后,我们要训练多层网络的时候,最后关键的部分就是求梯度啦.纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法. 反向传播算法应该是神经网络最基本最需要弄懂的方 ...

  2. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation

    目录 0. 前言 1. 从 Logistic Regression 中理解反向传播 2. 两层神经网络中单个样本的反向传播 3. 两层神经网络中多个样本的反向传播 如果这篇文章对你有一点小小的帮助,请 ...

  3. 深度学习笔记(4) 浅层神经网络

    深度学习笔记(4) 浅层神经网络 1. 神经网络概述 2. 激活函数 3. 激活函数的导数 4. 神经网络的梯度下降 5. 随机初始化 1. 神经网络概述 神经网络看起来是如下: 有输入特征x1.x2 ...

  4. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

  5. 深度学习Pytorch--梯度与反向传播笔记

    Pytorch梯度与反向传播 相关概念 导数 偏导数 方向导数 梯度 梯度下降法 自动求梯度 概念 Tensor 反向传播求梯度 相关概念 先来理解一下从导数到梯度的相关概念. 导数 一元函数中导数就 ...

  6. 【深度学习】深度学习入门——BP网络反向传播

    BP网络反向传播 1.原理 2.Code bc.m fc.m bp_batch.m bp_online.m 本博客代码为本人选修<深度学习引论>课程所用,源代码与课件截图属于Zhang Y ...

  7. 神经网络与深度学习(三)——反向传播算法

    1. 基于矩阵计算网络输出 首先给出网络中权重的清晰定义.使用表示从层的个神经元到层的个神经元的链接上的权重.如下图所示,给出了第2个隐藏层的第4个神经元到第3个隐藏层的第2个神经元的链接上的权重. ...

  8. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——深度学习的基础算法——反向传播算法简介

    反向传播算法 Back Propagation Algorithms 在一个链接上的权重的变化会使得下一个神经元获得的值就有相应的变化,这个变化量会随着网络的前向传播影响到下一层的每一个神经元,以此类 ...

  9. 深度学习基础2(反向传播算法)

    反向传播算法 我们先是用链式法则解释.比如如下的神经网络 前向传播 对于节点来说,的净输入如下: 接着对做一个sigmoid函数得到节点的输出: 类似的,我们能得到节点..的输出... 误差 得到结果 ...

最新文章

  1. php 记录用户行为路径,用户行为路径分析方法
  2. 腾讯offer是什么样子_记一次腾讯社招前端面试(已拿到offer入职)
  3. Apache Kafka-初体验Kafka(02)-Centos7下搭建单节点kafka_配置参数详解_基本命令实操
  4. 平衡二叉查找树 AVL 的实现
  5. 2021年11月国产数据库排行榜:openGauss闯入前三,Kingbase流行度与日俱增,TDengine厚积薄发
  6. C++标准(Standard for ProgrammingLanguage C++)
  7. 神经网络API、Kotlin支持,那些你必须了解的Android 8.1预览版和Android Studio 3.0新特性
  8. POJ1061 青蛙的约会【扩展欧几里得算法】
  9. iOS地图 -- 定位初使用
  10. C++赋值运算符重载函数(operator=)
  11. python redis.exceptions.ConnectionError
  12. android定位4g不准,定位不准/失败的处理方法
  13. echart--axisLabel中值太长不自动换行
  14. linux启动速度优化
  15. 浏览器自动化操作(Web Browser Automation)(一)
  16. Win10屏幕截图自动保存方法
  17. fa-cog css,完整的Font Awesome 3.2.1 图标参考
  18. python 打印/输出元素,用 逗号/空格 分隔
  19. Django-admin注册model后一直404,路径都配置的正确
  20. 基于MATLAB的简单手势识别

热门文章

  1. WM与MM的关联及WM的基本概念
  2. L1正则化方法(拉格朗日)和L2(岭回归)正则化方法的不同
  3. 离散化的龙贝格观测器进行无传感器控制模型
  4. 实验二:Lagrange拉格朗日插值法之C语言代码
  5. python创建文件夹A1,并在A1里面再创建文件夹A2,再在A2里面创建文件
  6. 关于JMeter的培训总结
  7. 百度大脑地表识别使用攻略
  8. 如何在手游中实现云渲染的效果?
  9. 我国将建统一的企业信息公示大数据平台 年底上线
  10. Vue2中clearInterval()不生效问题的解决方法