1. 误差反馈

1.1 误差反馈校正权重矩阵

可以理解,输出和误差都是多个节点共同作用的结果,那么该如何更新链接权重?

思考一下,得到误差后,该怎么分配?平均分的话是否会有失公平?毕竟我们在之前的学习中了解到,前一层每个节点的贡献都是不一样的。考虑极端情况,当某权重为0时,它对下一个节点的贡献为0;这时如果误差仍然平均分配显然是不那么合适的。
但我们很容易想到这个标准:较大链接权重的连接分配更多的误差。

将同样的思想扩展到多个节点。如果我们拥有100个节点链接到输出节点,那么我们要在这100条链接之间,按照每条链接对误差所做贡献的比例(由链接权重的大小表示),分割误差。
我们使用权重,将误差从输出向后传播到网络中。我们称这种方法为反向传播。

1.2 多个输出节点反向传播误差


第一个输出节点的误差标记为e1 = ( t1 - o1)。
按照所连接链接的比例,也就是权重w 1,1 和w2,1 ,对误差e 1 进行分割。同理,按照权重w 1,2 和w 2,2 的比例分割e2 。


1.3 反向传播误差到更多层中


将输出误差标记为eoutput ,将在输出层和隐藏层之间的链接权重标记为who 。通过将误差值按权重的比例进行分割,我们计算出与每条链接相关的特定误差值。采用与隐藏层节点相关联的这些误差ehidden ,再次将这些误差按照输入层和隐藏层之间的链接权重wih 进行分割。

如果神经网络具有多个层,那么我们就从最终输出层往回工作,对每一层重复应用相同的思路。


具有实际数字的3层网络中,误差如何向后传播:


进一步向后工作:

1.神经网络通过调整链接权重进行学习。这种方法由误差引导,误差就是训练数据所给出正确答案和实际输出之间的差值。
2.简单地说,在输出节点处的误差等于所需值与实际值之间的差值。
3.与内部节点相关联的误差并不显而易见。一种方法是按照链路权重的比例来分割输出层的误差,然后在每个内部节点处重组这些误差。

1.4 使用矩阵乘法进行反向传播误差

计算的起始点是在神经网络最终输出层中出现的误差。

为隐藏层的误差构建矩阵。


可以观察到,最重要的事情是输出误差与链接权重wij 的乘法。这些分数的分母是一种归一化因子。如果我们忽略了这个因子,那么我们仅仅失去后馈误差的大小。也就是说,可以使用简单得多的
e1* w1,1 来代替e1* w1,1/ ( w1,1 + w2,1)。


因此,我们得到所希望的矩阵,使用矩阵的方法来向后传播误差:

反向传播误差可以表示为矩阵乘法。
无论网络规模大小,这使我们能够简洁地表达反向传播误差。
前向馈送信号和反向传播误差都可以使用矩阵计算而变得高效。

2.更新权重

2.1 梯度下降法

目前我们已经完成了让误差反向传播到网络的每一层,我们的目的是要使用误差来指导如何调整链接权重,从而使得神经网络更适合这个样本集,输出更准确的答案。
如果我们将复杂困难的函数当作网络误差,那么找到最小值就意味着最小化误差。这样我们就可以改进网络输出。如此我们就可以理解要用梯度下降法来更新权重的意义所在了。
可以从梯度的物理意义上直观理解,就像是在三维地形中,在曲面的任意一点放置一个静止的小球,在重力作用下小球会向下滚动,那么初始时刻,小球滚动的方向一定是该点周围下降最明显的地方,即负梯度方向。但最终小球会在摩擦力和重力作用下停下,可以想象,这必是一个“凹谷”,也就是这个三维曲面的(局部)极小值。

但如果这个地形非常复杂,我们掉入的仅仅是这个点周围某个“凹谷”,而非整个地形中最低(即我们所要求的最小值)呢?该如何解决这个问题?

首先,采用梯度下降法,我们必须选择一个起点。


这一次,我们所在之处的斜率为正,因此我们向左移动。
为了避免超调,避免在最小值的地方来回反弹,就要改变步子大小,这是一个必要的优化。

回想刚刚的问题,如果恰好掉入了错误的山谷怎么办?记得我们刚刚讲的随机选择起点吗?我们可以随机取,并且多次取,尽可能地,把错误的结果过滤掉。多次训练神经网络,确保并不总是终止于错误的山谷。
不同的起始点意味着选择不同的起始参数,在神经网络的情况下,这意味着选择不同的起始链接权重。

像这样的尝试,终究会带领我们走进正确的山谷。

2.2 误差函数

那么,梯度下降法所作用的误差函数应该如何构造呢?像我们之前那样,目标值 - 真实值 = 误差?但这种情况下的误差会有正负,一旦我们求和,就有可能得到非常趋近于0的结果,这会让我们误以为误差很小。
误差函数如何构造?看下表:

第三种选择是差的平方,即(目标值-实际值)^ 2 。我们更喜欢使用第三种误差函数,而不喜欢使用第二种误差函数,原因有以下几点:

  • 使用误差的平方,我们可以很容易使用代数计算出梯度下降的斜率。
  • 误差函数平滑连续,这使得梯度下降法很好地发挥作用——没有间断,也没有突然的跳跃。
  • 越接近最小值,梯度越小,这意味着,如果我们使用这个函数调节步长,超调的风险就会变得较小。

下图显示了两个链接权重,这次,误差函数是三维曲面,这个曲面随着两个链接权重的变化而变化。


这个表达式表示了当权重wj,k 改变时,误差E是如何改变的。这是误差函数的斜率,也就是我们希望使用梯度下降的方法到达最小值的方向。

下为推导过程:


第一部分就是(目标值-实际值)。在sigmoid中的求和表达式也很简单,就是进入最后一层节点的信号,我们可以称之为ik ,这样它看起来比较简单。这是应用激活函数之前,进入节点的信号。最后一部分是前一隐藏层节点j的输出。
同理,得到输入层和隐藏层之间权重调整:

权重改变的方向与梯度方向相反,我们用数学的形式来表达这个因子。

(和之前在线性分类器里学到的是不是原理相同?

new A = old A + ΔA)

更新后的权重wj,k 是由刚刚得到误差斜率取反来调整旧的权重而得到的。正如我们先前所看到的,如果斜率为正,我们希望减小权重,如果斜率为负,我们希望增加权重,因此,我们要对斜率取反。符号α是一个因子,这个因子可以调节这些变化的强度,确保不会超调。我们通常称这个因子为学习率。同理,这个表达式不仅适用于隐藏层和输出层之间的权重,而且适用于输入层和隐藏层之间的权重。
由于学习率只是一个常数,并没有真正改变如何组织矩阵乘法,因此我们省略了学习率α。

1.神经网络的误差是内部链接权重的函数。
2.改进神经网络,意味着通过改变权重减少这种误差。
3.直接选择合适的权重太难了。另一种方法是,通过误差函数的梯度下降,采取小步长,迭代地改进权重。所迈出的每一步的方向都是在当前位置向下斜率最大的方向,这就是所谓的梯度下降。
4.使用微积分可以很容易地计算出误差斜率。

2.3 误差更新成功范例


更新隐藏层和输出层之间的权重w1,1 。当前,这个值为2.0。

  1. 第一项(tk-ok )得到误差e 1 = 0.8。
  2. S函数内的求和Σj wj,k oj 为(2.0×0.4)+(3.0 * 0.5)= 2.3。
  3. sigmoid 1/(1 + e-2.3) 为0.909。中间的表达式为0.909 *(1-0.909)=0.083。
  4. 由于我们感兴趣的是权重w1,1 ,其中j=1,因此最后一项oj 也很简单,也就是oj = 1 。此处,oj 值就是0.4。
  5. 将这三项相乘,最后我们得到-0.0265。

如果学习率为0.1,那么得出的改变量为- (0.1 * -0.02650)= +0.002650。因此,新的w1,1 就是原来的2.0加上0.00265等于2.00265。

神经网络学习4【误差传递与权重更新】相关推荐

  1. PyTorch:tensor、torch.nn、autograd、loss等神经网络学习手册(持续更新)

    PyTorch1:tensor2.torch.nn.autograd.loss等神经网络学习手册(持续更新) 链接:画图.读写图片 文章目录 一.tensor 二.完整训练过程:数据.模型.可学习参数 ...

  2. 【深度学习】Keras加载权重更新模型训练的教程(MobileNet)

    [深度学习]Keras加载权重更新模型训练的教程(MobileNet) 文章目录 1 重新训练 2 keras常用模块的简单介绍 3 使用预训练模型提取特征(口罩检测) 4 总结 1 重新训练 重新建 ...

  3. 2023.2.9,周四【图神经网络 学习记录23】动态图算法 之 SGNN(DGNN):更新组件(update component),传播组件(propagation component)

    路虽远,行则将至. 声明:仅学习使用. 前情提要: 2023.2.9,周四[图神经网络 学习记录22]动态图算法 之 EvolveGCN:离散型动态GNN网络,将GNN和RNN结合到同一层,结合时间和 ...

  4. 卷积神经网络学习心得

    卷积神经网络学习心得 文章目录 卷积神经网络学习心得 一.卷积神经网络 1.卷积 2.池化 3.激活函数 3.全连接层 3.训练过程 二.传播过程 1.卷积神经网络的前向传播过程 1.1卷积层的前向传 ...

  5. 机器学习入门(14)— 神经网络学习整体流程、误差反向传播代码实现、误差反向传播梯度确认、误差反向传播使用示例

    1. 神经网络学习整体流程 神经网络学习的步骤如下所示. 前提 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习.神经网络的学习分为下面 4 个步骤. 步骤1(mini-ba ...

  6. 卷积神经网络中的参数共享/权重复制

    参数共享或权重复制是深度学习中经常被忽略的领域.但是了解这个简单的概念有助于更广泛地理解卷积神经网络的内部.卷积神经网络(cnn)能够使那些通过网络馈送的图像在进行仿射变换时具有不变性. 这个特点提供 ...

  7. 机器学习算法如何调参?这里有一份神经网络学习速率设置指南

    作者:Jeremy Jordan,机器之心编译,参与:黄小天.许迪 每个机器学习的研究者都会面临调参过程的考验,而在调参过程中,学习速率(learning rate)的调整则又是非常重要的一部分.学习 ...

  8. 【论文解读】Graph Normalization (GN):为图神经网络学习一个有效的图归一化

    作者|平安产险视觉计算组 编辑丨极市平台 本文为极市开发者投稿,转载请获授权. 极市专栏 论文推荐:在图神经网络里面,应该如何选择更好的归一化技术?本文将介绍一种为图神经网络学习有效的图归一化的方式. ...

  9. 深度学习最佳实践系列——权重w初始化

    摘要: 本文是深度学习最佳实践系列博客之权重初始化,主要介绍权重初始化的相关问题及方法,文中提及的权重初始化方法均可以应用于普通的神经网络.卷积神经网络和递归神经网络之中. 作为深度学习的初学者,我有 ...

最新文章

  1. 装java 无法应用转换程序_应用程序崩溃“android.app.Application无法强制转换为”...
  2. Python 技术篇-index()字符串倒叙匹配获取索引,字符串切片反向输出,逆向输出字符串
  3. Spring-AOP @AspectJ语法基础
  4. 【Python基础】Pandas数据可视化原来也这么厉害
  5. 计算机专业毕业了,还要不要参加培训班?——Leo网上答疑(8)
  6. android xml获取指定,android:如何从xml文件中获取信息?
  7. vue router传参_新手使用vue-router传参时注意事项
  8. java 十进制 左移,java移位运算符之十进制转二进制
  9. 我的世界自己服务器显示坐标,如何让我的世界一直显示坐标 | 手游网游页游攻略大全...
  10. 苹果mac视觉效果和动态图形设计软件:After Effects 2022 (ae 2022)
  11. python实现PDF文件合并成一个文件
  12. Windows驱动开发(一)WDM/WDF驱动概述
  13. 串口服务器调试助手使用教程,串口服务器如何配置及串口调试6大技巧
  14. Data Whale第20期组队学习 Pandas学习—文本数据
  15. 对于微信二维码相关官方文档的一些注解(微信登录和绑定微信、关注公众号)
  16. ovs-docker实现容器网络vlan隔离
  17. win7网络上计算机进不去,Win7电脑开机进不了系统怎么办?
  18. 直线上最多的点数java
  19. 初试401 英语86分上岸苏州大学经验分享
  20. 配置 sysctl.conf 系统参数详解

热门文章

  1. ps在html中的应用程序,Photoshop在网页设计中的应用
  2. datadog ebpf模块 offset-guess.o 问题排查解决
  3. S3C2440 I2C总线控制
  4. soui edit passwrod模式下禁用输入法
  5. Pytorch3d中的倒角损失函数Chamfer Distance Loss的用法(pytorch3d.loss.chamfer_distance)
  6. 关于在IE8浏览器的环境下页面一直刷新的问题
  7. 华为g9一直显示服务器错误,华为G9青春版失败变砖开不了机了怎么办_G9青春版救砖方法...
  8. mysql sql where or_SQL的WHERE子句中包含多个AND和OR
  9. 紫外线检测仪UVA、UVB、UVC、UVA2紫外线检测仪WKM-UV1
  10. java软件工程师工作业绩_java软件工程师个人简历