精华内容
下载资源
问答
  • 反向传播算法是用来求那个复杂到爆的梯度的。 上一集中提到一点,13000维的梯度向量是难以想象的。换个思路,梯度向量每一项的大小,是在说代价函数对每个参数有多敏感。 如上,我们可以这样里理解,第一个...

    直观理解反向传播

    反向传播算法是用来求那个复杂到爆的梯度的。

    上一集中提到一点,13000维的梯度向量是难以想象的。换个思路,梯度向量每一项的大小,是在说代价函数对每个参数有多敏感。

    如上图,我们可以这样里理解,第一个权重对代价函数的影响是是第二个的32倍。

     

    我们来考虑一个还没有被训练好的网络。我们并不能直接改动这些激活值,只能改变权重和偏置值。但记住,我们想要输出层出现怎样的变动,还是有用的。


    我们希望图像的最后分类结果是2,我们期望第3个输出值变大,其余输出值变小,并且变动的大小应该与现在值和目标值之间的差成正比。举个例子,增大数字2神经元的激活值,就应该‘比减少数字8神经元的激活值来得重要,因为后者已经很接近它的目标了。

     

    进一步,就来关注数字2这个神经元,想让它的激活值变大,而这个激活值是把前一层所有激活值的加权和加上偏置值。

    所以要增加激活值,我们有3条路可以走,一增加偏置,二增加权重,或者三改变上一层的激活值。

    先来看如何调整权重,各个权重它们的影响力各不相同,连接前一层最亮的神经元的权重,影响力也最大,因为这些权重与大的激活值相乘。增大这几个权重,对最终代价函数造成的影响,就比增大连接黯淡神经元的权重所造成的影响,要大上好多倍。

    请记住,说到梯度下降的时候,我们并不只看每个参数是增大还是变小,我们还看改变哪个参数的性价比最大。

    不过别忘了,从全局上看,只只不过是数字2的神经元所期待的变化,我们还需要最后一层其余的每个输出神经元,对于如何改变倒数第二层都有各自的想法。

    我们会把数字2神经元的期待,和别的输出神经元的期待全部加起来,作为如何改变倒数第二层的指示。这些期待变化不仅是对应的权重的倍数,也是每个神经元激活值改变量的倍数。

     

    我们对其他的训练样本,同样的过一遍反向传播,记录下每个样本想怎样修改权重和偏置,最后再去一个平均值。

    这里一系列的权重偏置的平均微调大小,不严格地说,就是代价函数的负梯度,至少是其标量的倍数。

     

    实际操作中,我们经常使用随机梯度下降法。

    首先把训练样本打乱,然后分成很多组minibatch,每个minibatch就当包含了100个训练样本好了。然后你算出这个minibatch下降的一步,这不是代价函数真正的梯度,然而每个minibatch会给一个不错的近似,计算量会减轻不少。

    反向传播的微积分原理

    我们从一个最简单的网络讲起,每层只有一个神经元,图上这个网络就是由三个权重和三个偏置决定的,我们的目标是理解代价函数对这些变量有多敏感。这样我们就知道怎么调整这些变量,才能使代价函数下降的最快。

    我们先来关注最后两个神经元,我们给最后一个神经元一个上标L,表示它处在第L层。

    给定一个训练样本,我们把这个最终层激活值要接近的目标叫做y,y的值为0/1。那么这个简易网络对于单个训练样本的代价就等于$(a^{(L)}-y)^2$。对于这个样本,我们把这个代价值标记为$C_0$。

    之前讲过,最终层的激活值公式:$a^{(L)} = \sigma (w^{(L)}a^{(L-1)}+b^{(L)})$

    换个标记方法:

    $$z^{(L)} = (w^{(L)}a^{(L-1)}+b^{(L)})$$

    $$a^{(L)} = \sigma (z^{(L)})$$

    整个流程就是这样的:

    当然了,$a^{(L-1)}$还可以再向上推一层,不过这不重要。

    这些东西都是数字,我们可以想象,每个数字都对应数轴上的一个位置。我们第一个目标是来理解代价函数对权重$w^{(L)}$的微小变化有多敏感。换句话说,求$C_0$对$w^{(L)}$的导数。

    根据链式法则:

    $$\frac{\partial C_0}{\partial w^{(L)}} = \frac{\partial z^{(L)}}{\partial w^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}\\\frac{\partial C_0}{\partial a^{(L)}}=2(a^{(L)}-y)\\\frac{\partial a^{(L)}}{\partial z^{(L)}}={\sigma }' (z^{(L)})\\\frac{\partial z^{(L)}}{\partial w^{(L)}}=a^{(L-1)}\\$$

    所以

    $$\frac{\partial z^{(L)}}{\partial w^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}=a^{(L-1)}{\sigma }' (z^{(L)})2(a^{(L)}-y)\\$$

    $$\frac{\partial C}{\partial w^{(L)}} = \frac{1}{n}\sum _{k=0}^{n-1}\frac{\partial C_k}{\partial w^{(L)}}$$

    当然了,对偏置求导数也是同样的步骤。

    $$\frac{\partial C_0}{\partial b^{(L)}} = \frac{\partial z^{(L)}}{\partial b^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}=1{\sigma }' (z^{(L)})2(a^{(L)}-y)\\$$

    到这里,我们可以看每层不止一个神经元的情况了。


     

     

    参考链接:

     

    转载于:https://www.cnblogs.com/lfri/p/10336199.html

    展开全文
  • 神经网络-反向传播算法神经网络的学习神经网络模型特征和直观理解多类分类神经网络参数的反向传播代价函数反向传播算法反向传播算法直观理解展开参数梯度检验综合起来(使用神经网络步骤)自主驾驶 神经网络的学习...

    神经网络的学习

    无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大,这时候我们需要神经网络

    神经网络模型

    神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。
    神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
    在这里插入图片描述
    引入z:

    在这里插入图片描述
    下面是一个例子:
    在这里插入图片描述
    在这里插入图片描述

    特征和直观理解

    神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑与(AND)、逻辑或(OR)。
    我们可以用这样的一个神经网络表示 AND 函数
    在这里插入图片描述
    其中𝛩0 = −30,𝛩 1 = 20𝛩2 = 20 我们的输出函数ℎ 𝜃 (𝑦)即为:ℎ 𝛩 (𝑦) = g(−30 + 20𝑦 1 +20𝑦 2)

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    or函数
    在这里插入图片描述
    XNOR
    在这里插入图片描述
    然后将表示 AND 的神经元和表示(NOT x 1 )AND(NOT x 2 )的神经元以及表示 OR 的神经元进行组合:
    在这里插入图片描述

    多类分类

    当我们有不止两种分类时(也就是𝑧 = 1,2,3….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。
    输入向量𝑦有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现
    在这里插入图片描述

    神经网络参数的反向传播

    代价函数

    首先引入一些便于稍后讨论的新标记方法:
    在这里插入图片描述
    代价函数:
    在这里插入图片描述
    这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同结果,然后在利用循环在K个预测中选择可能性最高的一个,将其与y中的实际数据进行比较。
    在这里插入图片描述

    反向传播算法

    在这里插入图片描述
    在这里插入图片描述

    反向传播算法的直观理解

    在这里插入图片描述
    详情还是多看看视频会理解些吧【捂脸】

    展开参数

    把你的参数从矩阵展开成向量,以便我们在高级最优化步骤中的使用需要。
    在这里插入图片描述
    DVec:取出所要的,变成向量,在用reshape又可以变成矩阵

    在这里插入图片描述

    梯度检验

    当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    与DVec(在反向传播中得到的导数)与等于,就是正确的
    注意:一旦通过检验确定反向传播的实现是正确的,就应该关掉梯度验证,不再去使用它,因为在每一次循环中都用梯度检验代码之后,代码就会变得非常慢,一定要在训练之前,关闭它

    综合起来(使用神经网络步骤)

    小结一下使用神经网络时的步骤:
    网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。第一层的单元数即我们训练集的特征数量。最后一层的单元数是我们训练集的结果的类的数量。如果隐藏层数大于 1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。
    我们真正要决定的是隐藏层的层数和每个中间层的单元数。
    训练神经网络:

    1. 参数的随机初始化
    2. 利用正向传播方法计算所有的ℎ 𝜃 (𝑦)
    3. 编写计算代价函数 𝐾 的代码
    4. 利用反向传播方法计算所有偏导数
    5. 利用数值检验方法检验这些偏导数
    6. 使用优化算法来最小化代价函数

    自主驾驶

    大概了解一下他的应用吧

    使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶。 ALVINN (Autonomous Land Vehicle In a
    Neural Network)是一个基于神经网络的智能系统,通过观察人类的驾驶来学习驾驶,ALVINN 能够控制
    NavLab,装在一辆改装版军用悍马,这辆悍马装载了传感器、计算机和驱动器用来进行自动驾驶的导航试验。
    第一步,是对它进行训练,也就是训练一个人驾驶汽车。 然后让 ALVINN 观看,ALVINN
    每两秒将前方的路况图生成一张数字化图片,并且记录驾驶者的驾驶方向,得到的训练集图片被压缩为 30x32 像素,并且作为输入提供给
    ALVINN 的三层神经网络,通过使用反向传播学习算法,ALVINN
    会训练得到一个与人类驾驶员操纵方向基本相近的结果。一开始,我们的网络选择出的方向是随机的,大约经过两分钟的训练后,我们的神经网络便能够准确地模拟人类驾驶者的驾驶方向,对其他道路类型,也重复进行这个训练过程,当网络被训练完成后,操作者就可按下运行按钮,车辆便开始行驶了。
    然后让 ALVINN 观看,ALVINN 每两秒将前方的路况图生成一张数字化图片,并且记录驾驶者的驾驶方向,得到的训练集图片被压缩为
    30x32 像素,并且作为输入提供给 ALVINN 的三层神经网络,通过使用反向传播学习算法,ALVINN
    会训练得到一个与人类驾驶员操纵方向基本相近的结果。一开始,我们的网络选择出的方向是随机的,大约经过两分钟的训练后,我们的神经网络便能够准确地模拟人类驾驶者的驾驶方向,对其他道路类型,也重复进行这个训练过程,当网络被训练完成后,操作者就可按下运行按钮,车辆便开始行驶了。

    展开全文
  • 反向传播算法中的矩阵求导

    千次阅读 2018-10-07 20:41:48
    反向传播中的梯度计算矩阵求导多条链接 在神经网络算法中,可以把复杂的网络结构看作一个复合函数。即用一个函数表征输入与输出之间的关系。误差的反向传递,提供了确定这个函数的方法。这里的误差,指的就是梯度...

    反向传播中的梯度


    在神经网络算法中,可以把复杂的网络结构看作一个复合函数。即用一个函数表征输入与输出之间的关系。误差的反向传递,提供了确定这个函数的方法。这里的误差,指的就是梯度。所以,BP算法就是根据复合函数求导的链式法则一步步求得。

    计算图

    在这里插入图片描述
    为了更直观的理解这个函数,我们用 m=a+b 、n=c+d 显然,
    f=mn
    在这里插入图片描述
    本例中前向传播的过程中,f=4.5,
    a若增加0.001,则m增加0.001,则f增加0.001
    n。使用链式法则可以求得对a\b\c\d的偏导数。
    在这里插入图片描述

    矩阵求导

    前馈神经网络嵌入层中,每一层要学习的参数都是一个矩阵。如前一层的神经元个数为n1,本层神经元个数为n2。不计偏置的话,本层的要学习的参数是一个n2*n1的矩阵。此时就涉及到了矩阵求导。其实矩阵求导的实质还是多元函数,只不过把结果写成了矩阵的形式。从原理上讲,完全可以逐元素求导。
    在这里插入图片描述

    多条链接

    与最后一层softmax层(多分类神经网络)不同的是,中间的嵌入层,相邻的神经元独立的影响着最终的结果,如计算图中的m和n的关系。但是softmax层中,变量有多条影响函数值的路径。则需要对每条路径求导再加和。

    展开全文
  •  本文旨在描述反向传播算法在多层神经网络训练中的过程,为了直观描述此过程,我们用到了包含两个输入和一个输出的三层神经网络,如下所示:    每个神经元由两个单元组成。第一单元把权重和输入信号的积相加...

      本文翻译自http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html,大概介绍下反向传播的基本原理。
      本文旨在描述反向传播算法在多层神经网络训练中的过程,为了直观描述此过程,我们用到了包含两个输入和一个输出的三层神经网络,如下图所示:
      
    1

      每个神经元由两个单元组成。第一单元把权重和输入信号的积相加,第二单元是被称为神经元激活函数的非线性函数。信号e是第一单元的输出信号,而y=f(e)是非线性函数的输出信号。信号y也是神经元的输出信号。
    1b

      我们需要训练数据集来训练神经网络,训练数据包含输入信号(x1x2)和相应的目标结果z组成。神经网络训练是个迭代的过程。在每次迭代中,每个节点的权重系数根据训练数据做出修正.
      修正算法描述如下:每步训练都是从训练数据集中取两个输入信号开始,此阶段结束后,我们就可以确定每层神经网络中每个神经元的输出信号。下图展示了信号如何在神经网络中传播,符号w(xm)表示网络中输入值xm和神经元n之间连接的权重,yn表示神经元n的输出信号。
    2
    3
    4

      信号的传播通过隐藏层。符号wmn表示输出神经元m和下一层输入神经元n之间链接的权重。
    5
    6

      信号传播通过输出层。
    7

      在算法下一步中,神经网络的输出信号y会和来自训练集中的预期输出值(目标值)做比较, 其差值被称为输出神经元的误差信号d
    8

      我们不可能直接计算出内部神经元的误差信号,因为那些神经元的输出值是未知的。多年以来,我们一直没找到有效的多层神经网络的训练方法,只有上个世纪80年代的反向传播算法独树一帜。其思想是把训练误差 d 传递给那些处理输入信号得到输出信号的神经元。
    9
    10

      权重系数wmn 被用来反向传递误差值,只从数据流方向传递误差(误差从接受信号的节点传递给产生信号的节点),此方法适用于所有的神经元节点。如果误差来自多个神经元,则该节点收到的所有误差做累加。 过程如下图所示。
    11
    12
    13

      当每个神经元的误差被计算完成后, 每个输入节点的神经元权值系数可能被调整。我们用公式df(e)/e 表示神经元激活函数的导数(用来修改权重系数)。
    14
    15
    16
    17
    18
    19

      系数h 表示神经网络的学习速率。有几种选择参数的方法, 第一种,初始较大的参数值,当权重关系逐渐建立起来的时候参数也会逐渐减小。第二种稍微复杂些,从小参数开始训练,训练过程中随着训练进度参数逐渐增大,然后在最终阶段减小。从小参数开始训练可以确定权重系数的符号。

    References
    Ryszard Tadeusiewcz “Sieci neuronowe”, Kraków 1992

    展开全文
  • 深度学习入门笔记(六):误差反向传播算法

    千次阅读 多人点赞 2020-07-15 21:37:04
    误差反向传播法——能够高效计算权重参数的梯度的方法。要正确理解误差反向...因此,本章希望大家通过计算直观地理解误差反向传播法。然后,再结合实际的代码加深理解,相信大家一定会有种“原来如此!”的感觉。
  • 反向传播算法的原理 我们先直观的看一下反向传播的原理,假设有一个网络: 这是一个三层的神经网络,我们以这个网络为例子,展示下BP算法的过程。 其中,每个神经元有两个单元,第一个单元是对其输入信号和对应的...
  • 原文:Principles of training multi-layer neural network using backpropagation ... 翻译内容: 本文描述了使用反向传播算法训练多层神经网络的过程。为了更直观的说明该训练过程,使用如下所示
  • 而一般直观上理解反向传播算法就是求导的一个链式法则而已。但是偏偏理解这部分和其中的细节对于神经网络的设计和调整优化又是有用的,所以硬着头皮写写吧。 问题描述与动机: 大家都知道的,其实我们就是在...
  • 本文作者曾介绍一些现代变分推理理论。这些方法经常可用于深度神经网络并构造深度生成模型(例如 VAE 等),或者使用便于探索的随机控制来丰富确定性...不过在这些结点中做反向传播的方式并不是简单与直观的,本文将介
  • 算法4随后说明了将反向传播应用于该所需的相关计算。 算法3和算法4是简单而直观的演示。然而,它们专门针对特定的问题。之后我们会介绍现在的软件实现所基于的一般形式的反向传播,它可以通过明确地操作用于表示...
  • 参考文章: ...“反向传播算法”过程及公式推导(超直观好懂的Backpropagation) https://blog.csdn.net/ft_sunshine/article/details/90221691 非极大值抑制(non-maximum suppression)的理解 htt
  • 而神经网络中的反向传播就是自动微分的反向模式。事实上,我们还可以用“前向传播”来计算神经网络中的梯度值,但是由于效率原因这个方法并没有被采用。 我们首先考虑下面这个计算 <img src="...
  • 反向传播算法直观理解4. 实现注意:展开参数5. 梯度下降6. 随机初始化7. 综合起来8. 自动驾驶   神经网络是当下最强大的学习算法之一。接下来讨论一个能在给定训练集时为神经网络拟合参数的学习算法。 1. 代价...
  • 9.3 反向传播算法直观理解 9.4 实现注意:展开参数 9.5 梯度检验 9.6 随机初始化 9.7 综合起来 9.8 自主驾驶 第六周 十、应用机器学习的建议(Advice for Applying Machine Learning) 10.1 决定下一步做什么 10.2...
  • 深度学习实战教程(三):神经网络和反向传播算法 深度学习实战教程(四):卷积神经网络 深度学习实战教程(五):循环神经网络 深度学习实战教程(六):长短时记忆网络(LSTM) 深度学习实战教程(七):递归神经网络 工具 ...
  • 深度学习实战教程(三):神经网络和反向传播算法 深度学习实战教程(四):卷积神经网络 深度学习实战教程(五):循环神经网络 深度学习实战教程(六):长短时记忆网络(LSTM) 深度学习实战教程(七):递归神经网络 工具 ...
  • 第五章:深度学习基础-多层感知机 05.1-感知机 05.2-多层感知机 05.3-多层感知机与神经网络 05.4-激活函数 05.5-正向传播 05.6-反向传播 05.7-正向传播和反向传播 05.8-批大小 05.9-实验09-从零实现MLP 05.10-实验...
  • 3.2.1 前向传播和反向传播 95 3.2.2 如何计算神经网络的输出 96 3.2.3 如何计算卷积神经网络输出值 97 3.2.4 如何计算池化层输出值 100 3.2.5 反向传播实例 101 3.2.6 神经网络更“深”的意义 104 3.3 激活函数 104 ...
  • Youtube频道3Blue1Brown关于神经网络的第3部分,这个视频主要介绍了偏导数和反向传播法。 B站视频在这里。 反向传播法演算 | 深度学习,第4章 | 第38天 Youtube频道3Blue1Brown关于神经网络的第3部分,这个视频主要...
  • pytorch教程

    2019-01-18 00:34:18
     这样建立了一个计算, 这个结构可以复用多次, 每次调用相当于计算定义时的相同参数做一次前向传播, 我们不用自己编写反向传播.  定义完模型, 来定义损失函数, 常见的损失函数都定义在 nn 中. 这样我们就能...
  • 3.10(选修)直观理解反向传播(Backpropagation intuition) 3.11 随机初始化(Random+Initialization) 第四周:深层神经网络(Deep Neural Networks) 4.1 深层神经网络(Deep L-layer neural network) 4.2 前向...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

反向传播算法直观图