用有趣的方式解释梯度下降算法

简介: 用有趣的方式解释梯度下降算法

前文我们已经搭建了一个包含两个隐藏层的神经网络,我们需要这样一种算法:网络得到训练数据后,算法会调整所有的权重和偏置值,提高网络对训练数据的表现。我们还希望这种分层结构可以举一反三,识别其他图像。训练好网络后,再给它未见过的带标记的数据作为测试,这样就能知道新图像分类的准确度。

640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


但由于不知道一开始输入值在哪里,最后你可能会落到许多不同的坑里,而且无法保证你落到的局部最小值就是代价函数的全局最小值。值得一提的是,如果每步的步长与斜率成比例,那么在最小值附近斜率会越来越平缓,每步会越来越小,这样可以防止调过头。


640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


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


640.jpg


对于这个我们设计的神经网络的代价函数,更新权重和偏置来降低代价函数的值,意味着输入训练集的每一份样本的输出,都会越来越接近真实结果。又因为我们选择的是所有训练样本代价函数的平均值,所以最小化即对所有样本得到的总体结果会更好。


640.jpg

           

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

640.jpg


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


640.jpg


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


640.jpg


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

相关文章
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
5月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
|
2月前
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
89 7
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
|
3月前
|
机器学习/深度学习 算法 Python
探索机器学习中的梯度下降优化算法
【8月更文挑战第1天】在机器学习的广阔天地里,梯度下降法如同一位勇敢的探险家,指引我们穿越复杂的数学丛林,寻找模型参数的最优解。本文将深入探讨梯度下降法的核心原理,并通过Python代码示例,展示其在解决实际问题中的应用。
73 3
|
5月前
|
机器学习/深度学习 分布式计算 并行计算
算法金 | 再见!!!梯度下降(多图)
**梯度下降及其优化算法简述** 梯度下降是一种优化算法,广泛用于机器学习和深度学习,通过迭代更新模型参数以最小化损失函数。它有几种变体,包括批梯度下降(使用全部数据)、随机梯度下降(单个样本)和小批量梯度下降(小批量样本)。每种形式在计算效率和稳定性上各有优劣。
69 4
算法金 | 再见!!!梯度下降(多图)
|
5月前
|
算法
梯度下降算法(二)
梯度下降法中,学习率选择至关重要。0.3的学习率导致无法找到最小值且产生震荡,而0.01则使结果接近最优解(2.99998768)。当学习率进一步减小至0.001,点远离最低点。通过迭代次数增加至1000次,可更接近最低点(2.999999999256501)。梯度下降用于最小化损失,学习率控制参数更新步长,需平衡收敛速度和稳定性。迭代次数和初始点也影响模型性能,合适的初始化能加速收敛并避开局部极小值。
|
5月前
|
机器学习/深度学习 存储 算法
梯度下降算法(一)
梯度下降是一种迭代优化算法,用于找到多变量函数的最小值。它不直接求解方程,而是从随机初始点开始,沿着梯度(函数增大幅度最大方向)的反方向逐步调整参数,逐步逼近函数的最小值。在单变量函数中,梯度是导数,而在多变量函数中,梯度是一个包含所有变量偏导数的向量。通过计算梯度并乘以学习率,算法更新参数以接近最小值。代码示例展示了如何用Python实现梯度下降,通过不断迭代直到梯度足够小或达到预设的最大迭代次数。该过程可以类比为在雾中下山,通过感知坡度变化来调整前进方向。
|
5月前
|
机器学习/深度学习 算法 C语言
【深度学习】优化算法:从梯度下降到Adam
【深度学习】优化算法:从梯度下降到Adam
152 1
|
5月前
|
机器学习/深度学习 算法 PyTorch
《PyTorch深度学习实践》--3梯度下降算法
《PyTorch深度学习实践》--3梯度下降算法