100天搞定机器学习|Day36用有趣的方式解释梯度降低算法

本文为3Blue1Brown神经网络课程讲解第二部分《Gradient descent, how neural networks learn 》的学习笔记,观看地址:www.bilibili.com/video/av16144388前文咱们已经搭建了一个包含两个隐藏层的神经网络,咱们须要这样一种算法:网络获得训练数据后,算法会调整全部的权重和偏置值,提升网络对训练数据的表现。咱们还但愿这种分层结构能够触类旁通,识别其余图像。训练好网络后,再给它未见过的带标记的数据做为测试,这样就能知道新图像分类的准确度。image算法

这实际上就是找某个函数的最小值,在一开始,咱们会彻底随机地初始化全部的权重和偏置值。可想而知,这个网络对于给定的训练示例,会表现得很是糟糕。例如输入一个3的图像,理想状态应该是输出层3这个点最亮。但是实际状况并非这样。这是就需定义一个代价函数。image网络

网络能够对图像正确分类时,这个平方和就比较小,反之就很大。接下来就要考虑几万个训练样本中代价的平均值。image框架

神经网络自己是个函数,它有784个输入值,10个输出,13000多个参数。imageide

代价函数则要再抽象一层,13000多个权重和偏置值做为他的输入,输出是单个数值,表示参数的表现优劣程度。image函数

代价函数取决于网络对上万个训练数据的综合表现,可是咱们还须要告诉网络该如何改变这些权重和偏置值,让其表现更好。为了简化问题,咱们先不去想一个有13000多个变量的函数,而考虑简单的一元函数,只有一个输入变量,只输出一个数字。image学习

学过微积分的都知道,有时你能够直接算出这个最小值,不过函数很复杂的话就不必定能写出,而咱们这个超复杂的13000元的代价函数,就更加不可能作到了。一个灵活的技巧是:如下图为例,先随便挑一个输入值,找到函数在这里的斜率,斜率为正就向左走,斜率为负就向右走,你就会逼近函数的某个局部最小值。(实际上是沿着负梯度方向,函数减小的最快)image测试

但因为不知道一开始输入值在哪里,最后你可能会落到许多不一样的坑里,并且没法保证你落到的局部最小值就是代价函数的全局最小值。值得一提的是,若是每步的步长与斜率成比例,那么在最小值附近斜率会愈来愈平缓,每步会愈来愈小,这样能够防止调过头。image设计

咱们想象一个更复杂的两个输入一个输出的二元函数,代价函数是图中右侧的红色曲面。在输入空间被沿着哪一个方向走,才能使输出结果降低最快?image3d

在多元微积分领域,函数梯度指的是函数的最陡增加方向,沿着其相反的方向,函数值降低的最快,梯度向量的长度表明了最陡的斜坡的到底有多陡峭。imagecdn

让函数值最小的算法其实就是先计算梯度,在按反方向走一小步,而后循环。处理13000个输入的函数也是这个道理。image

只是把这些权重、偏置都放在一个列向量中,代价函数的负梯度也是一个向量。负梯度指出了在这个函数输入空间内,具体如何改变每一项参数,才能让让代价函数的值降低的最快。image

对于这个咱们设计的神经网络的代价函数,更新权重和偏置来下降代价函数的值,意味着输入训练集的每一份样本的输出,都会愈来愈接近真实结果。又由于咱们选择的是全部训练样本代价函数的平均值,因此最小化即对全部样本获得的整体结果会更好。image

当咱们提到让网络学习,实质上就是让代价函数的值最小。代价函数有必要是平滑的,这样咱们才能够挪动以找到全局最小值,这也就是为何人工神经元的激活值是连续的。到这里,咱们终于引出了梯度降低法的定义:image

负梯度内每一项值的正负号告诉咱们输入向量对应该调大仍是调小,每一项的相对大小也告诉了咱们哪一个值影响更大,改变哪一个参数值,性价比最高。image

训练后的神经网络就能够进行数字识别了,可是当输入是一个噪音图片时,神经网络却仍很自信的把它识别成一个数字。换句话说,即便网络学会了如何识别数字,可是它却不会本身写数字。缘由就在于网络的训练被限制在很窄的框架内,对于第一层网络,它的视角整个宇宙都是由小网格内清晰定义的静止数字组成的,它的代价函数则会促使它对最后的判断有绝对的自信。研究越深,你就会发现,神经网络没有那么智能。image

本节完!下节课咱们学习3Blue1Brown关于神经网络的第3部分《偏导数和反向传播法》。

相关文章
相关标签/搜索