直观理解反向传播 | 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…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
