直观理解反向传播 | Chapter 3 | Deep Learning | 3Blue1Brown
目录
- 前言
- 1. 简介
- 2. 回顾
- 3. 直观的演绎示例
- 4. 随机梯度下降
- 相关资料
- 结语
前言
3Blue1Brown 视频笔记,仅供自己参考
这个章节主要来直观地理解反向传播算法到底在做什么
官网:https://www.3blue1brown.com
视频:https://www.bilibili.com/video/BV16x411V7Qg
1. 简介
本期我们来讲反向传播,也就是神经网络学习的核心算法
稍微回顾一下我们之前讲到哪里之后,首先我要撇开公式不提,直观地过一遍这个算法到底在做什么,然后如果你们有人想认真看里头的数学,下个章节我会解释这一切背后的微积分
2. 回顾
如果你看了前两章内容,或者你已经有足够背景直接看这一章内容的话,你一定知道神经网络是什么,以及它如何前馈信息的
这里我们考虑的经典例子就是手写数字识别,数字的像素值被输入到网络第一层的 784 个神经元里,这里我展示的是有 2 层 16 个神经元隐含层以及 10 个神经元的输出层,它代表网络最终给出的选择
我也假设你们已经理解了上期说到的梯度下降法,理解了所谓学习就是指,我们要找到特定的权重偏置从而使一个代价函数最小化
稍许提醒一下,计算一个训练样本的代价需要求出网络的输出与期待的输出之间每一项的差的平方和
然后对于成千上万个训练样本都这么算一遍,最后取平均,这就得到了整个网络的代价值
如果你嫌这还不够复杂的话,上章内容也讲到了我们要求的是代价函数的负梯度,它会告诉你如何改变所有连线上的权重偏置才好让代价下降得最快
本章的中心,反向传播算法,正是用来求这个复杂到爆的梯度的
我希望大家能够把上章中提到的一点牢牢记住,毕竟 13000 维的梯度向量说它是难以想象都不为过
所以这里大家请记住另一套思路,梯度向量每一项的大小是在告诉大家代价函数对于每个参数有多敏感
比如说,假设你已经计算好了负梯度,其中某条线上的权重一项等于 3.2,而对应另一条线上的权重等于 0.1
你可以这么来理解,第一个权重对代价函数的值有 32 倍的影响力,如果你稍微改变一下第一个权重,它对代价值造成的变化就是改变第二个权重同等大小的 32 倍
就我个人而言,我刚开始学习反向传播的时候,我觉得最容易搞混的部分就是各种符号和上标下标,不过,一旦你捋清了算法的思路,算法的每一步其实都挺直观的,其实就是把许许多多微小的调整一层接一层地进行下去而已
3. 直观的演绎示例
所以,开始讲解时,我将完全抛弃所有的符号,给大家一步步解释每一个训练样本会对权重偏置的调整造成怎样的影响
因为代价函数牵扯到对成千上万个训练样本的代价取平均值,所以我们调整每一步梯度下降用的权重偏置也会基于所有的训练样本,原理上是这么说,但为了计算效率,之后咱们会讨个巧,从而不必每一步都非得要计算所有的训练样本
还需要注意一点,我们现在只关注一个训练样本,就是上面这张 2,这一个训练样本会对调整权重和偏置造成怎样的影响呢?
现在假设网络还没完全训练好,那么输出层的激活值看起来就很随机,也许就会出现 0.5、0.8、0.2 等等数值,我们并不能直接改动这些激活值,只能改变权重和偏置值
但记住我们想要输出层出现怎样的变动还是很有用的,因为我们希望图像最终的分类结果是 2,我们希望第三个输出值变大,其他数值变小,并且变动的大小应该与现在值和目标值之间的差呈正比
举个例子,增加数字 “2” 神经元的激活值就应该比减少数字 “8” 神经元的激活值来得重要,因为后者已经很接近它的目标了
那好,我们更进一步就来关注下这一个神经元,我们要让这里面的激活值变大,还记得这个激活值是把前一层所有激活值的加权和加上一个偏置,再通过 sigmoid 或 ReLU 之类的压缩函数最后算出来的吧
所以要增加这个激活值我们有三条大路可走,一增加偏置,二增加权重,或者三改变上一层的激活值
先来看如何调整权重,各个权重它们的影响力各不相同,连接前一层最亮的神经元的权重影响力也最大,因为这些权重会与大的激活值相乘,所以至少对于这一个训练样本而言,增大了这几个权重值对最终代价函数造成的影响就比增大连接黯淡神经元的权重所造成的影响要大上好多倍
请记住当我们说到梯度下降的时候,我们并不只看每个参数是该增大还是减小,我们还看修改哪个参数的性价比最高
顺便一提,这有一点点像描述生物中神经元的网络如何学习的一个理论即 “赫布理论”(Hebbian theory),总结起来就是 “一同激活的神经元关联在一起”。这里权重的最大增长即连接变得更强的部分,就会发生在已经最活跃的神经元和想要更多激发的神经元之间,可以说看见一个 2 时激发的神经元会和 “想到一个 2” 时激发的神经元联系地更紧密,
这里解释一下,我个人对人工神经网络是否真的在模仿生物学上的大脑的工作没有什么发言权,“一同激活的神经元关联在一起” 这句话是要打星号注释的,但作为一个粗略的对照我觉得还是挺有意思的
言归正传,第三个能够增加这个神经元激活值的方法就是改变前一层的激活值,更具体地说,如果所有正权重连接的神经元更亮,所有负权重连接的神经元更暗的话,那么数字 2 的神经元就会更强烈地激发
和改变权重的时候类似,我们想造成更大的影响就要依据对应权重的大小对激活值做出呈比例的改变,当然我们并不能直接改变激活值,我们手头只能控制权重和偏置,但就光对最后一层来说,记住我们能期待的变化还是很有帮助的
不过别忘了,从全局上看这只不过是数字 2 的神经元所期待的变化,我们还需要最后一层其余的神经元的激发变弱
但这其余的每个输出神经元对于如何改变倒数第二层都有各自的想法,所以,我们会把数字 2 神经元的期待和别的输出神经元的期待全部加起来作为对如何改变倒数第二层神经元的指示,这些期待变化不仅是对应的权重的倍数,也是每个神经元激活值改变量的倍数
这其实就是在实现 “反向传播” 的理念了,我们把所有期待的改变加起来就得到了一串对倒数第二层改动的变化量,有了这些我们就可以重复这个过程,改变影响倒数第二层神经元激活值的相关参数,从后一层到前一层,把这个过程一直循环到第一层
放眼全局,还记得我们只是在讨论单个训练样本对所有权重偏置的影响吗?如果我们只关注那个 “2” 的要求,最后网络只会把所有图像都分类成是 “2”,所以你要对其他所有的训练样本同样地过一遍反向传播,记录下每个样本想怎样修改权重与偏置,最后再取一个平均值
这里一系列的权重偏置的平均微调大小,不严格地说就是上章内容提到的代价函数的负梯度,至少是其标量的倍数,这里的不严格指的是我还没有准确地解释如何量化这些微调
但如果你清楚我提到的所有改动,为什么有些数字是其他数字的好几倍以及最后要怎么全部加起来,你就懂得了反向传播的真实工作原理
4. 随机梯度下降
顺带一提,实际操作中如果梯度下降的每一步都用上每一个训练样本来计算的话,那么花的时间就太长了
所以我们一般会这么做,首先把训练样本打乱,然后分成很多组 minibatch,每个 minibatch 就当包含 100 个训练样本就好了
然后你算出这个 minibatch 下降的一步,这不是代价函数真正的梯度,毕竟计算真实梯度得用上所有的样本而非这个子集,所以这也不是下山最高效的一步,然而,每个 minibatch 都会给你一个不错的近似,而且更重要的是,你的计算量会减轻不少
你如果想把网络沿代价函数的表面下山的路径画出来的话,它看上去会有点像醉汉漫无目的地溜下山,但起码步伐很快,而不像是细致入微的人踏步之前先准确地算好下坡的方向,然后再向那个方向谨小慎微地慢慢走一步,这个技巧就叫做 “随机梯度下降”
内容挺多地,我们先小结一下,反向传播算法算的是单个训练样本想怎样修改权重与偏置,不仅是说每个权重参数应该变大还是变小,还包括了这些变化的比例是多大才能最快地降低代价
真正的梯度下降得对好几万个训练范例都这么操作,然后对这些变化值取平均
但算起来太慢了,所以你会先把所有的样本分到各个 minibatch 中去,计算一个 minibatch 来作为梯度下降的一步
计算每个 minibatch 的梯度,调整参数,不断循环,最终你就会收敛到代价函数的一个局部最小值上,此时就可以说,你的神经网络对付训练数据已经很不错了
总而言之,我们实现反向传播算法的每一句代码其实或多或少地都对应了大家已经知道的内容
但有时,了解其中的数学原理只不过是完成了一半,如何把这破玩意儿表示出来又会搞得人一头雾水,那么,在座的如果想深入探讨的话,下一章中我们会把本期的内容用微积分的形式呈现出来,希望看过以后再看其他资料时会更容易接受一些吧
收尾之前,我想着重提一点,反向传播在内,所有包括神经网络在内的机器学习要让它们工作,我们需要非常多的训练数据
我们用的手写数字的范例之所以那么方便,是因为存在着一个 MNIST 数据库,里面所有的样本都已经人为标记好了,所以机器学习领域的人最熟悉的一个难关莫过于获取标记好的训练数据了,不管是叫别人标记成千上万个图像还是去标记别的类型的数据也罢
相关资料
- http://neuralnetworksanddeeplearning.com/chap2.html
- https://github.com/mnielsen/neural-networks-and-deep-learning
- https://colah.github.io/posts/2015-08-Backprop/
结语
这个章节我们主要学习了神经网络的核心即反向传播算法,反向传播算法计算的是单个训练样本想怎样修改权重与偏置才能最快地降低代价,为了提高效率我们会把整个样本分成不同的 batch,之后计算每个 batch 的梯度来调整权重偏置参数,不断循环使代价函数收敛到一个局部最优值
OK,以上就是本章的全部内容了,下章我们来讲反向传播算法背后的微积分,敬请期待😄
相关文章:
直观理解反向传播 | Chapter 3 | Deep Learning | 3Blue1Brown
目录 前言1. 简介2. 回顾3. 直观的演绎示例4. 随机梯度下降相关资料结语 前言 3Blue1Brown 视频笔记,仅供自己参考 这个章节主要来直观地理解反向传播算法到底在做什么 官网:https://www.3blue1brown.com 视频:https://www.bilibili.com/vide…...
052_python基于Python高校岗位招聘和分析平台
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
基于物联网、大数据、人工智能等技术开发的Spring Cloud 智慧工地云平台源码,支持多端应用
系统概述: 智慧工地是指运用现代信息技术,如物联网(IoT)、大数据、人工智能(AI)、云计算、移动互联网等,对传统建筑工地进行智能化改造和管理的新型工地。它通过高度集成的系统和设备ÿ…...
常见的跨境电商平台对比【总结表】
常见的跨境电商平台对比【总结表】 平台目标市场费用结构物流服务支付方式推广工具适合卖家亚马逊全球销售佣金、月租费、FBAFBA支持全球配送多种支付方式广告工具、促销活动有一定资金实力的品牌和卖家eBay全球上市费、成交费第三方物流支持PayPal、信用卡广告工具、促销活动…...
perl批量改文件后缀
perl批量改文件后缀 如题,perl批量改文件后缀,将已有的统一格式的文件后缀,修改为新的统一的文件后缀。 #!/bin/perl use 5.010;print "Please input file suffix which U want to rename!\n"; chomp (my $suffix_old <>)…...
【Python中的字符串处理】正则表达式与常用字符串操作技巧!
Python中的字符串处理:正则表达式与常用字符串操作技巧 Python 在字符串处理方面提供了丰富的内置功能和模块,能够帮助开发者处理各种复杂的文本操作。无论是简单的字符串拼接、替换,还是借助正则表达式(re 模块)实现…...
又是一年一度的1024,那就记录一篇算法博客吧~ 【二进制加法探秘】
前言: 又是一年一度的1024,那就记录一篇算法博客吧~ 内容如下~ 1 题目介绍 给定两个二进制字符串 a 和 b,需要返回它们的和,结果以二进制字符串形式给出。 示例 1: 输入: a “11”, b “1” 输出: “100” 示例 2…...
LeetCode--买卖股票的最佳时机含冷冻期--动态规划
一、题目解析 二、算法原理 我们可以使用dp[i]来表示第i天买卖股票所获得的最大利润。由题可得我们只能持有一支股票,并且在卖出后有冷冻期的限制,因此我们会有三种不同的状态: 我们目前持有一支股票,对应的「累计最大收益」记为…...
装了Ubuntu和Windows双系统,如何设置默认启动Windows
可以将默认启动系统设置为Windows,以下是步骤: 1. 修改GRUB配置文件: • 启动到Ubuntu,打开终端。 • 编辑GRUB配置文件: sudo nano /etc/default/grub • 找到这一行: GRUB_DEFAULT0 将0改为对应Wi…...
WPF+MVVM案例实战-设备状态LED灯变化实现
文章目录 1、项目创建2、UI界面布局1. MainWindow.xaml2、颜色转换器实现2.MainViewModel.cs 代码实现 3、运行效果4.源代码下载 1、项目创建 打开 VS2022 ,新建项目 Wpf_Examples,创建各层级文件夹,安装 CommunityToolkit.Mvvm 和 Microsof…...
MySQL--基本介绍
一.数据库前言 1.数据库的相关介绍 关系数据库管理系统(Relational Database Management System:RDBMS)是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数…...
PAT甲级1008 Elevator
题目地址:1008 Elevator - PAT (Advanced Level) Practice (pintia.cn) 介绍 The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in spe…...
数据导入导出
1.数据加载 - LOAD 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename; 操作: 建表 CREATE TABLE myhive.test_load( dt string comment 时间(时分秒) , user_id string comment 用户 ID, word string comment 搜索词 , u…...
git的安装以及入门使用
文章目录 git的安装以及入门使用什么是git?git安装git官网 git初始化配置使用方式初始化配置: git的安装以及入门使用 什么是git? Git 是一个免费开源的分布式版本控制系统,使用特殊的仓库数据库记录文件变化。它记录每个文件的…...
【acwing】算法基础课-搜索与图论
目录 1、dfs(深度优先搜索) 1.1 排列数字 1.2 n皇后问题 搜索顺序1 搜索顺序2 2、bfs(广度优先搜索) 2.1 走迷宫 2.2 八数码 3、树与图的存储 4、树与图的遍历 4.1 树的重心 4.2 图中点的层次 5、拓扑排序 6、最短路问题 6.1 朴素Dijkstra算法 6.2 堆优化Dijks…...
502 错误码通常出现在什么场景?
服务器过载场景 高流量访问:当网站遇到突发的高流量情况,如热门产品促销活动、新闻热点事件导致网站访问量激增时,服务器可能会因承受过多请求而无法及时响应。例如,电商平台在 “双十一” 等购物节期间,大量用户同时…...
面试经典算法题69-两数之和
面试经典算法题69-两数之和 公众号:阿Q技术站 LeetCode.1 问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。…...
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖
在 Spring 框架中,循环依赖是指两个或多个 Bean 之间相互依赖,形成一个闭环。例如,Bean A 依赖于 Bean B,而 Bean B 又依赖于 Bean A。这种情况如果不加以处理,会导致 Bean 无法正确实例化,从而引发应用程序…...
一文带你入门Flink CDC
1 CDC简介 1.1 什么是CDC CDC是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。 1.2 CDC的种类 CDC主要…...
修复jenkins SSH 免密登录发布服务器
SSH 免密登录配置和修复步骤: 1. 配置 SSH 免密登录 在本地主机执行以下命令,将公钥复制到目标服务器: ssh-copy-id bjpark172.27.xx.xx输入密码完成公钥传输。 2. 修复 SSH 免密登录失败的权限问题 如果免密登录失败,用root…...
049_python基于Python的热门微博数据可视化分析
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
中国信通院联合中国电促会开展电力行业企业开源典型实践案例征集
自2021年被首次写入国家“十四五”规划以来,开源技术发展凭借其平等、开放、协作、共享的优秀创作模式,正持续成为推动数字技术创新、优化软件生产模式、赋能传统行业转型升级、助力企业降本增效的重要引擎。电力是国民经济的重要基础性产业,…...
LOAM 20.04 ros1安装
LOAM 安装 LOAM源码 安装参考 上述安装参考在 报错1、 C标准改为17 解决方案 数据集 试车实验...
Pyqt5设计打开电脑摄像头+可选择哪个摄像头(如有多个)
目录 专栏导读库的安装代码介绍完整代码总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文…...
mysqldump 批量导出数据库表
先查询需要导出的数据表,使用语句 SELECT table_name FROM information_schema.tables WHERE table_schema 数据库名 AND table_name LIKE mall%; 再批量导出查询到的表 mysqldump -u root -p test_yogasala mall_ad mall_address mall_admin mall_cart mall_…...
前端工程师面试题整理
前言 本文整理了一系列前端工程师面试中常见的 HTML、CSS 和 JavaScript 问题及其答案,涵盖基础知识、常见问题及面试技巧。适用于准备前端开发职位面试的候选人参考。 目录 前言HTML & CSS1. 对 WEB 标准以及 W3C 的理解与认识2. XHTML 和 HTML 有什么区别3.…...
Linux 权限的理解
内容摘要 本文内容包括shell的运行原理,包括外壳程序的原理、理解、和意义,以及从两个方面对于权限的理解(人和事物的属性)、修改文件的权限,包括修改文件的拥有者、修改文件拥有者所在的组的用户以及修改文件的三类用…...
『完整代码』按钮开关UI界面
创建按钮Button 作为开关坐骑UI界面的按钮 创建Image 作为坐骑UI界面 在父类脚本添加其中函数即可 绑定脚本在父类窗口对象 在按钮上响应事件 隐藏UI界面 运行项目 - 实现点击按钮开关UI界面 再次点击按钮 - 关闭UI界面 end...
梦结束的地方 -- 爬楼梯
梦结束的地方 — 爬楼梯 力扣70 : 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例如下: 何解? 最后要爬上楼顶,无非两种上法,最后一…...
身份证识别JAVA+OPENCV+OCR
一、相关的地址 https://github.com/tesseract-ocr/tessdata Releases - OpenCV opencv要装好,我装的是4.5.3的,最新版的没试过。 tessdata就下载了需要用的。好像还有best和fast的版本,我试了一下报错,不知道是不是版本不支持…...
公司网站后台维护怎么做/百度推广竞价排名技巧
代码仓库:https://github.com/PHPOffice/PhpSpreadsheet1、进入/dayrui目录2、使用命令行安装类composer require phpoffice/phpspreadsheet3、需要将vendor目录命名为Vendor(首字母大写)4、新建控制器文件:dayrui/App/Demo/Controllers/Excel.php<?…...
大图做网站背景加载慢/社群推广平台
反思 昨晚去北京大望路阿里面试, 产生了严重的挫败感, 羞愧难当. 比不得从大学就有目标有理想, 一直在为目标努力学习技术的同学, 在大学唯一能拿得出手的就是参加了电子设计大赛, 学了点嵌入式的知识. 毕业后开始做android, 说得好听点叫做项目, 实际上就是搬代码, 真正记到…...
ssm实战项目网站开发/爱站seo工具包
ASP.NET MVC设计实例前文我们介绍了MVC设计模式实现基本原理及组成,其基本组成主要包括控制器、视图、模板等部分。目前绝大多数Web端程序设计语言已经支持MVC设计模式,进行Web应用程序开发,本文主要以ASP.NET为例对MVC模式显示进行简单说明。…...
网站页面数量/整合营销方案案例
目录 一、问题描述 二、解决历程 三、解决方案 四、思考总结 一、问题描述 今天在使用SpringCloud做Zuul网关时,发现根本就找不到EnableZuulProxy注解。它还很“友好”地提示了我,如下图所示: 实际上,它们都位于org.springfra…...
建设人才库网站/谷歌ads广告投放
阿里云服务器上发送邮件失败问题。smtp.exmail.qq.com 错误提示: Couldnt connect to host, port: smtp.exmail.qq.com, 25; 使用465端口。 jar包: commons-email-1.5.jar ( http://commons.apache.org/proper/commons-email/download_email.cgi ) …...
企业网站如何做推广/百度小说排行榜前十
MyBatis英文文档https://blog.mybatis.org/ MyBatis与SpringBoot的整合文档在这里看...