深度学习之反向传播算法

直观理解反向传播

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

上一集中提到一点,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(a(L)−y)2。对于这个样本,我们把这个代价值标记为C0C0。

之前讲过,最终层的激活值公式:a(L)=σ(w(L)a(L−1)+b(L))a(L)=σ(w(L)a(L−1)+b(L))

换个标记方法:

z(L)=(w(L)a(L−1)+b(L))z(L)=(w(L)a(L−1)+b(L))

a(L)=σ(z(L))a(L)=σ(z(L))

整个流程就是这样的:

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

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

根据链式法则:

∂C0∂w(L)=∂z(L)∂w(L)∂a(L)∂z(L)∂C0∂a(L)∂C0∂a(L)=2(a(L)−y)∂a(L)∂z(L)=σ′(z(L))∂z(L)∂w(L)=a(L−1)∂C0∂w(L)=∂z(L)∂w(L)∂a(L)∂z(L)∂C0∂a(L)∂C0∂a(L)=2(a(L)−y)∂a(L)∂z(L)=σ′(z(L))∂z(L)∂w(L)=a(L−1)

所以

∂z(L)∂w(L)∂a(L)∂z(L)∂C0∂a(L)=a(L−1)σ′(z(L))2(a(L)−y)∂z(L)∂w(L)∂a(L)∂z(L)∂C0∂a(L)=a(L−1)σ′(z(L))2(a(L)−y)

∂C∂w(L)=1n∑k=0n−1∂Ck∂w(L)∂C∂w(L)=1n∑k=0n−1∂Ck∂w(L)

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

∂C0∂b(L)=∂z(L)∂b(L)∂a(L)∂z(L)∂C0∂a(L)=1σ′(z(L))2(a(L)−y)∂C0∂b(L)=∂z(L)∂b(L)∂a(L)∂z(L)∂C0∂a(L)=1σ′(z(L))2(a(L)−y)

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

参考链接:

  • Vedio
  • Blog

个性签名:时间会解决一切

深度学习之反向传播算法相关推荐

  1. 神经网络与深度学习-chapter2 反向传播算法

    英语原文:Neural Networks and Deep Learning(Michael Nielsen) 中文译文:神经网络与深度学习(Michael Nielsen) 第2章 反向传播算法如何 ...

  2. 深度学习-误差反向传播算法

    文章目录 一.误差反向传播算法是干什么的? 二.计算图 (一) 了解计算图的写法 (二)局部计算 (三) 计算图的优点 三. 误差反向传播算法的具体实现 一.误差反向传播算法是干什么的? 通过数值微分 ...

  3. 深度学习中反向传播算法简单推导笔记

    反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...

  4. 深度学习(3)--反向传播算法

    由上一节的内容中我们知道了随机梯度下降算法,我们通过下面两个公式来进行更新,最重要的就是对两个变量weights和biases的更新,我们通过backpropagation来计算偏导数. Backpr ...

  5. 深度学习之——反向传播

    反向传播算法(BP): 前向传播通过训练数据和权重参数计算输出结果:反向传播通过导数链式法则计算损失函数对各参数的梯度,并根据梯度进行参数的更新. 1.前向传播 在前面的:全连接神经网络--前向传播中 ...

  6. 机器学习深度学习中反向传播之偏导数链式法则

    前记    无论是机器学习还是深度学习,都是构造目标函数,这个目标函数内部有很多未知变量,我们的目标就是求得这些未知变量.    那么如何构造目标函数?这是一个非常优美的话题(本文未讲,先欠着).美好 ...

  7. 深度学习中反向传播得到的损失是一个标量

    创建一个标量,损失loss就是标量 import torch a=torch.tensor(1.) print(a.type()) print(a.dim())标量的dim为0 print(a.sha ...

  8. 深度学习——误差反向传播法

    前言 通过数值微分的方法计算了神经网络中损失函数关于权重参数的梯度,虽然容易实现,但缺点是比较费时间,本章节将使用一种高效的计算权重参数梯度的方法--误差方向传播法 本文将通过①数学式.②计算图,这两 ...

  9. 学习笔记84—[深度学习]神经网络反向传播(BackPropagation)

    神经网络反向传播实例推导过程: 说到神经网络,大家看到这个图应该不陌生: 这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,我们现在手里有 ...

最新文章

  1. 解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
  2. python源码学习_【Python学习】Python源码阅读(一)
  3. php+mssql 分页,一个PHP+MSSQL分页的例子
  4. SQLServer—端口概念
  5. 基于EM的多直线拟合实现及思考
  6. 推荐两本移动开发挺火的书
  7. 链栈和递归实现迷宫算法
  8. Leetcode每日一题:107.binary-tree-level-order-traversal-ii(二叉树的层次遍历)
  9. 如何有效看文献(一)
  10. 数组string 转 long
  11. Android点击通知栏信息后返回正在运行的程序,而不是一个新Activity
  12. 苹果库乐队怎么玩_iPhone实用技巧:怎么将抖音上的背景音乐制作成手机铃声
  13. 如何学好游戏编程 二
  14. ASII码:小写字符比大写字符大32
  15. 手机功能测试抓log方式(四种)
  16. 火山PC自绘高级表格及超级列表框
  17. 1.1 项目经理是干什么的
  18. 微信吸粉技巧:微信群怎么玩?
  19. 基于neo4j构建西游记知识图谱
  20. 天梯赛HBU训练营—— 敲笨钟(运行时错误)

热门文章

  1. ubuntu下如何安装两个版本OpenCV?
  2. 计算器html js php代码,JavaScript计算器网页版实现代码分享
  3. mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程
  4. Ajax---使用json数据格式输出数据
  5. day8 动态导入模块、socket进阶
  6. Centos 7.5安装配置MongoDB 4.0.5
  7. Fuzzy Hashing 算法工具ssdeep 使用
  8. matlab画CDF曲线
  9. Anaconda入门使用指南(二)
  10. iMeta | 宏基因组生物信息期刊-创刊背景和简介