100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34)
100天搞定机器学习|Day35 深度学习之神经网络的结构
100天搞定机器学习|Day36 深度学习之梯度下降算法
本篇为100天搞定机器学习之第37天,亦为3Blue1Brown《深度学习之反向传播算法》学习笔记。
上集提到我们要找到特定权重和偏置,从而使代价函数最小化,我们需要求得代价函数的负梯度,它告诉我们如何改变连线上的权重偏置,才能让代价下降的最快。反向传播算法是用来求这个复杂到爆的梯度的。
上一集中提到一点,13000维的梯度向量是难以想象的。换个思路,梯度向量每一项的大小,是在说代价函数对每个参数有多敏感。如下图,我们可以这样里理解,第一个权重对代价函数的影响是是第二个的32倍。
我们先不要管反向传播算法这一堆公式,当我们真正理解了这算法,这里的每一步就会无比清晰了。
我们来考虑一个还没有被训练好的网络。我们并不能直接改动这些激活值,只能改变权重和偏置值。但记住,我们想要输出层出现怎样的变动,还是有用的。我们希望图像的最后分类结果是2,我们期望第3个输出值变大,其余输出值变小,并且变动的大小应该与现在值和目标值之间的差成正比。举个例子,增大数字2神经元的激活值,就应该比减少数字8神经元的激活值来得重要,因为后者已经很接近它的目标了。
进一步,就来关注数字2这个神经元,想让它的激活值变大,而这个激活值是把前一层所有激活值的加权和加上偏置值。要增加激活值,我们有3条路可以走,一增加偏置,二增加权重,或者三改变上一层的激活值。先来看如何调整权重,各个权重它们的影响力各不相同,连接前一层最亮的神经元的权重,影响力也最大,因为这些权重与大的激活值相乘。增大这几个权重,对最终代价函数造成的影响,就比增大连接黯淡神经元的权重所造成的影响,要大上好多倍。
请记住,说到梯度下降的时候,我们并不只看每个参数是增大还是变小,我们还看改变哪个参数的性价比最大。
第三个可以增加神经元激活值的方法是改变前一层的激活值,如果所有正权重链接的神经元更亮,所有负权重链接的神经元更暗的话,那么数字2的神经元就会更强烈的激发。我们也要依据对应权重的大小,对激活值做成比例的改变,我们并不能直接改变激活值,仅对最后一层来说,记住我们期待的变化也是有帮助的。
不过别忘了,从全局上看,只只不过是数字2的神经元所期待的变化,我们还需要最后一层其余的每个输出神经元,对于如何改变倒数第二层都有各自的想法。
我们会把数字2神经元的期待,和别的输出神经元的期待全部加起来,作为如何改变倒数第二层的指示。这些期待变化不仅是对应的权重的倍数,也是每个神经元激活值改变量的倍数。
这其实就是在实现反向传播的理念了,我们把所有期待的改变加起来,得到一串对倒数第二层改动的变化量,然后重复这个过程,改变倒数第二层神经元激活值的相关参数,一直循环到第一层。我们对其他的训练样本,同样的过一遍反向传播,记录下每个样本想怎样修改权重和偏置,最后再去一个平均值。
这里一系列的权重偏置的平均微调大小,不严格地说,就是代价函数的负梯度,至少是其标量的倍数。神奇吧?
如果梯度下降的每一步都用上每一个训练样本计算的话,那么花费的时间就太长了。实际操作中,我们一般这样做:首先把训练样本打乱,然后分成很多组minibatch,每个minibatch就当包含了100个训练样本好了。然后你算出这个minibatch下降的一步,这不是代价函数真正的梯度,然而每个minibatch会给一个不错的近似,计算量会减轻不少。
可以这样比喻:沿代价函数表面下山,minibatch方法就像醉汉漫无目的的溜下山,但是速度很快。而之前的方法就像细致入微的人,事先准确的算好了下山的方向,然后谨小慎微的慢慢走。
这就是随机梯度下降
总结一下:反向传播算法算的是单个训练样本怎样改变权重和偏置,不仅说每个参数应该变大还是变小,还包括这些变化的比例是多大才能最快地降低cost。真正的梯度下降,对好几万个训练范例都这样操作,然后对这些变化取平均值,这样计算太慢了,我们要把所有样本分到各个minibatch中,计算每个minibatch梯度,调整参数,不断循环,最终收敛到cost function的局部最小值上。理解是一回事,如何表示出来又是另一回事,下一期,我们一起将反向传播算法用微积分的形式推导出来,敬请期待!
转载于:https://www.cnblogs.com/jpld/p/11369310.html
100天搞定机器学习|day37 无公式理解反向传播算法之精髓相关推荐
- 100天搞定机器学习
100天搞定机器学习 大家好,100天搞定机器学习前54天是对Avik-Jain开源项目100-Days-Of-ML-Code的翻译 自己的理解https://github.com/Avik-Jain ...
- 火爆GitHub:100天搞定机器学习编程(超赞信息图+代码+数据集)
问耕 栗子 发自 麦蒿寺 量子位 出品 | 公众号 QbitAI 你是想喝一辈子糖水,还是想用AI改变世界? 但怎么想是一回事,怎么做往往是另一回事.学习和健身一样,不少人都停留在口头上,有各种借口不 ...
- 100天搞定机器学习:PyYAML基础教程
编程中免不了要写配置文件,今天我们继续Python网络编程,学习一个比 JSON 更简洁和强大的语言----YAML .本文老胡简单介绍 YAML 的语法和用法,以及 YAML 在机器学习项目中的应用 ...
- 机器学习之五:神经网络、反向传播算法推导
一.逻辑回归的局限 在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字. 但所使用的是一个一阶的模型,并没有使用多项式,为什么? 可以设想一下,在原有400个特征的数据样本中, ...
- 机器学习(深度学习)中的反向传播算法与梯度下降
这是自己在CSDN的第一篇博客,目的是为了给自己学习过的知识做一个总结,方便后续温习,避免每次都重复搜索相关文章. 一.反向传播算法 定义:反向传播(Backpropagation,缩写为BP)是&q ...
- 【机器学习】详解 BackPropagation 反向传播算法!
首先介绍一下链式法则 假如我们要求z对x1的偏导数,那么势必得先求z对t1的偏导数,这就是链式法则,一环扣一环 BackPropagation(BP)正是基于链式法则的,接下来用简单的前向传播网络为例 ...
- 入门机器学习(八)--神经网络参数的反向传播算法
1. 代价函数(Cost Function) 假设我们拥有一个如下图所示的神经网络,一共有四层,分别是一层输入层,两层隐藏层,一层输出层.下面定义几个变量的意义: m:训练样本的个数,共有m个样本 L ...
- Educoder 机器学习 神经网络 第三关:反向传播算法
任务描述 相关知识 数据集介绍 神经网络是如何训练 前向传播 交叉熵 反向传播 sklearn中的神经网络 编程要求 测试说明 任务描述 本关任务:用sklearn构建神经网络模型,并通过鸢尾花数据集 ...
- GitHub热门教程:100天搞定机器学习(中文版)
来源:Python开发者 本文多干货,建议收藏. 中文版持续放送中!大家快跟上呀! 100 Days Of ML Code (机器学习 100 天英文版)刚出来时,我们推荐过.目前英文版已经快 20k ...
最新文章
- linux下lua bit模块的安装
- Sublime3 搭建C/C++环境
- 《系统集成项目管理工程师》必背100个知识点-44应急储备和管理储备
- UC Berkeley提出变分判别器瓶颈,有效提高对抗学习平衡性
- 每日一题20180330-Linux
- VMware 8.0不能手动安装Linux5.5(命令行)问题解决方法
- JAVA编写的一个简单的计算器
- java如何重复userinput_如何使用Scanner Java重复读取用户输入
- Linux VIM编辑器详解
- paip.js input onclick失灵不起作用无反应的解决.txt
- Excel2016 文件运行宏,出现可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用
- struts2 中 Actionsupport类的作用
- HMC5883L磁力计使用
- android 打开qq临时会话,Electron 中打开 QQ 临时会话
- java get方法_java get方法
- clickhouse源码:函数分析和自定义函数UDF
- K8s安装dashboard可视化界面
- SpringBoot开发微信公众号_回复文本信息功能
- 设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计
- 《追风筝的人》(The Kite Runner)好小说,好电影