100天搞定机器学习|Day36用有趣的方式解释梯度下降算法
本文为3Blue1Brown神经网络课程讲解第二部分《Gradient descent, how neural networks learn 》的学习笔记,观看地址:www.bilibili.com/video/av16144388前文我们已经搭建了一个包含两个隐藏层的神经网络,我们需要这样一种算法:网络得到训练数据后,算法会调整所有的权重和偏置值,提高网络对训练数据的表现。我们还希望这种分层结构可以举一反三,识别其他图像。训练好网络后,再给它未见过的带标记的数据作为测试,这样就能知道新图像分类的准确度。
这实际上就是找某个函数的最小值,在一开始,我们会完全随机地初始化所有的权重和偏置值。可想而知,这个网络对于给定的训练示例,会表现得非常糟糕。例如输入一个3的图像,理想状态应该是输出层3这个点最亮。可是实际情况并不是这样。这是就需定义一个代价函数。
网络可以对图像正确分类时,这个平方和就比较小,反之就很大。接下来就要考虑几万个训练样本中代价的平均值。
神经网络本身是个函数,它有784个输入值,10个输出,13000多个参数。
代价函数则要再抽象一层,13000多个权重和偏置值作为他的输入,输出是单个数值,表示参数的表现优劣程度。
代价函数取决于网络对上万个训练数据的综合表现,但是我们还需要告诉网络该如何改变这些权重和偏置值,让其表现更好。为了简化问题,我们先不去想一个有13000多个变量的函数,而考虑简单的一元函数,只有一个输入变量,只输出一个数字。
学过微积分的都知道,有时你可以直接算出这个最小值,不过函数很复杂的话就不一定能写出,而我们这个超复杂的13000元的代价函数,就更加不可能做到了。一个灵活的技巧是:以下图为例,先随便挑一个输入值,找到函数在这里的斜率,斜率为正就向左走,斜率为负就向右走,你就会逼近函数的某个局部最小值。(其实是沿着负梯度方向,函数减少的最快)
但由于不知道一开始输入值在哪里,最后你可能会落到许多不同的坑里,而且无法保证你落到的局部最小值就是代价函数的全局最小值。值得一提的是,如果每步的步长与斜率成比例,那么在最小值附近斜率会越来越平缓,每步会越来越小,这样可以防止调过头。
我们想象一个更复杂的两个输入一个输出的二元函数,代价函数是图中右侧的红色曲面。在输入空间被沿着哪个方向走,才能使输出结果下降最快?
在多元微积分领域,函数梯度指的是函数的最陡增长方向,沿着其相反的方向,函数值下降的最快,梯度向量的长度代表了最陡的斜坡的到底有多陡峭。
让函数值最小的算法其实就是先计算梯度,在按反方向走一小步,然后循环。处理13000个输入的函数也是这个道理。
只是把这些权重、偏置都放在一个列向量中,代价函数的负梯度也是一个向量。负梯度指出了在这个函数输入空间内,具体如何改变每一项参数,才能让让代价函数的值下降的最快。
对于这个我们设计的神经网络的代价函数,更新权重和偏置来降低代价函数的值,意味着输入训练集的每一份样本的输出,都会越来越接近真实结果。又因为我们选择的是所有训练样本代价函数的平均值,所以最小化即对所有样本得到的总体结果会更好。
当我们提到让网络学习,实质上就是让代价函数的值最小。代价函数有必要是平滑的,这样我们才可以挪动以找到全局最小值,这也就是为什么人工神经元的激活值是连续的。到这里,我们终于引出了梯度下降法的定义:

负梯度内每一项值的正负号告诉我们输入向量对应该调大还是调小,每一项的相对大小也告诉了我们哪个值影响更大,改变哪个参数值,性价比最高。
训练后的神经网络就可以进行数字识别了,但是当输入是一个噪音图片时,神经网络却仍很自信的把它识别成一个数字。换句话说,即使网络学会了如何识别数字,但是它却不会自己写数字。原因就在于网络的训练被限制在很窄的框架内,对于第一层网络,它的视角整个宇宙都是由小网格内清晰定义的静止数字组成的,它的代价函数则会促使它对最后的判断有绝对的自信。研究越深,你就会发现,神经网络没有那么智能。
本节完!下节课我们学习3Blue1Brown关于神经网络的第3部分《偏导数和反向传播法》。
100天搞定机器学习|Day36用有趣的方式解释梯度下降算法的更多相关文章
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...
- 100天搞定机器学习|day39 Tensorflow Keras手写数字识别
提示:建议先看day36-38的内容 TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edge ...
- 100天搞定机器学习|day40-42 Tensorflow Keras识别猫狗
100天搞定机器学习|1-38天 100天搞定机器学习|day39 Tensorflow Keras手写数字识别 前文我们用keras的Sequential 模型实现mnist手写数字识别,准确率0. ...
- 100天搞定机器学习|Day7 K-NN
最近事情无比之多,换了工作.组队参加了一个比赛.和朋友搞了一些小项目,公号荒废许久.坚持是多么重要,又是多么艰难,目前事情都告一段落,我们继续100天搞定机器学习系列.想要继续做这个是因为,一方面在具 ...
- 100天搞定机器学习|Day11 实现KNN
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- 100天搞定机器学习|Day8 逻辑回归的数学原理
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- 100天搞定机器学习|Day9-12 支持向量机
机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...
- 100天搞定机器学习|Day16 通过内核技巧实现SVM
前情回顾 机器学习100天|Day1数据预处理100天搞定机器学习|Day2简单线性回归分析100天搞定机器学习|Day3多元线性回归100天搞定机器学习|Day4-6 逻辑回归100天搞定机器学习| ...
- 100天搞定机器学习|Day17-18 神奇的逻辑回归
前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...
随机推荐
- nodejs进阶(1)——npm使用技巧和最佳实践
nodejs进阶教程,小白绕道!!! npm使用技巧和最佳实践 前提:请确保安装了node.js npm的最佳实践 npm install是最常见的npm cli命令,但是它还有更多能力!接下来你会了 ...
- JAVA开发第一步 - JDK安装与配置
JDK的安装与环境变量配置是JAVA开发之路的第一步,很多新人在这一步上就卡了很久,浪费了很多时间,甚至有些人就轻易地“从入门到放弃”了.今天我们就来一步步教你如何打倒这第一只拦路虎. 1.JDK下载 ...
- java字符串的替换replace、replaceAll、replaceFirst的区别
看代码: String s = "my.test.txt"; System.out.println(s.replace(".", "#")) ...
- Docker+Maven+Jenkins在Devops中完整应用
过去与现在 很早之前,当我们需要一个部署环境的时候,我们可能指的是一台PowerEdge R710 2U服务器,走一系列冗长的申请流程,然后上架到机房.调试网络.安装系统.调试环境.最终部署应用,就这 ...
- 俩台服务器搭建redis集群5.0.4
俩台服务器搭建redis集群 1.俩服务器分别新建目录:usr/local/redis-cluster 2.下载源码并解压编译(使用redis版本5.0.4) 3.tar xzf redis-5.0. ...
- Go语言圣经习题练习_1.7. Web服务
练习 1.12: 修改Lissajour服务,从URL读取变量,比如你可以访问 http://localhost:8000/?cycles=20 这个URL,这样访问可以将程序里的cycles默认的5 ...
- LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能 ...
- MongoDB与Redis的简单使用
mongodb 概念解析 SQL术语/概念 MongoDB术语/概念 解释说明 database database 数据库 table collection 数据库表/集合 row document ...
- Prometheus 整合 AlertManager
简介 Alertmanager 主要用于接收 Prometheus 发送的告警信息,它很容易做到告警信息的去重,降噪,分组,策略路由,是一款前卫的告警通知系统.它支持丰富的告警通知渠道,可以将告警信息 ...
- EasyUI combobox下拉列表实现搜索过滤(模糊匹配)
项目中的某个下拉列表长达200多个项,这么巨大的数量一个一个找眼镜都得看花,于是就得整了个搜索功能.看网上别人帖子有只能前缀匹配的方案,但只能前缀匹配的话用起来也不是很方便.于是就记录一下模糊匹配的方 ...