文章目录

  • 梯度下降
  • 梯度下降算法
  • 局部极小值和全局最小值
    • 模拟退火
    • 随机梯度下降
    • 遗传算法

梯度下降

梯度下降我们前面的介绍,简单的略过了,这里详细解释一下。
梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。

用微积分解释:
首先,我们有一个可微分的函数。这个函数就代表着一座山。我们的目标就是找到这个函数的最小值,也就是山底。根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方向,就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向。

看待微分的意义,可以有不同的角度,最常用的两种是:

  • 函数图像中,某点的切线的斜率。
  • 函数的变化率。
    几个微分的例子:

上面的例子都是单变量的微分,当一个函数有多个变量的时候,就有了多变量的微分,即分别对每个变量进行求微分。

梯度实际上就是多变量微分的一般化。
下面这个例子:

我们可以看到,梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量

梯度是微积分中一个很重要的概念,之前提到过梯度的意义

  • 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
  • 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向

题外话:这里的 J ( θ ) J(\theta) J(θ)其实就是代价函数,所以要找到一个合适的代价函数。https://blog.csdn.net/No_Game_No_Life_/article/details/89512402#theta_Tgai_42

梯度下降算法

上面我们花了大量的篇幅介绍梯度下降算法的基本思想和场景假设,以及梯度的概念和思想。下面我们就开始从应用上解释梯度下降算法的计算过程和思想!

公式:

此公式的意义是:J是关于 Θ Θ Θ的一个函数,我们当前所处的位置为 Θ 0 Θ^0 Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是 α α α,走完这个段步长,就到达了 Θ 1 Θ^1 Θ1这个点!

α在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以α的选择在梯度下降法中往往是很重要的!α不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!

为什么要梯度要乘以一个负号?
梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号

局部极小值和全局最小值

以下图为栗子:

基于梯度的搜索足使用最为广泛的参数寻优方法。在此类方法中,我们从某些初始解出发,迭代寻找最优参数值。每次迭代中,我们先计算代价函数在当前点的梯度,然后根据梯度确定搜索方向。例如,由于负梯度方向是函数值下降最快的方向,如果代价函数在当前梯度为0,则已达到局部极小,更新量将为零,这意味着参数的迭代更新将在此停止。

显然,如果代价函数仅有一个局部极小,那么此时找到的局部极小就是全局最小;然而,如果代价函数具有多个局部极小,则不能保证找到的解是全局最小。对后一种情形,我们称参数寻优陷入了局部极小, 这显然不是我们所希望的。
在现实任务中,人们常采用以下策略来试图找出局部极小,从而进一步接近全局最小

  • 以多组不同参数值初始化多个算法模型,并在训练后,取其中误差最小的解作为最终参数.这相当于从多个不同的初始点开始搜索, 这样就可能陷入不同的局部极小从中进行选择有可能获得更接近全局最小的结果。
  • 使用"模拟退火“计数。模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于"跳出"局部极小。在每步迭代过程中,接受"次优解"的概率要随着时间的推移而逐渐降低, 从而保证算法稳定。
  • 使用随机梯度下降。与标准梯度下降法精确计算梯度不同, 随机梯度下降法在计算梯度时加入了随机因素。于是,即便陷入局部极小点,它计算出的梯度仍可能不为零,这样就有机会跳出局部极小继续搜索。
  • 此外遗传算法可能也很有用。

模拟退火

物理的退火降温的过程——一个处于很高温度的物体,现在要给它降温,使物体内能降到最低。我们常规的思维是,越快越好,让它的温度迅速地降低。然而,实际上,过快地降温使得物体来不及有序地收缩,难以形成结晶。而结晶态,才是物体真正内能降到最低的形态。

正确的做法,是徐徐降温,也就是退火,才能使得物体的每一个粒子都有足够的时间找到自己的最佳位置并紧密有序地排列。开始温度高的时候,粒子活跃地运动并逐渐找到一个合适的状态。在这过程中温度也会越降越低,温度低下来了,那么粒子也渐渐稳定下来,相较于以前不那么活跃了。这时候就可以慢慢形成最终稳定的结晶态了。

我们需要设定这几个参数,模拟退火过程:

  • T——温度
  • ΔT——温度变化率,每次温度等于上一次温度乘上ΔT,实际应用时一般取0.95−0.99,模拟徐徐降温

再定义一些量:

  • x——当前选择的解
  • Δx——解变动值
  • x1——当前的目标解,等于x+Δx
  • Δf——当前解的函数值与目标解函数值之差,等于f(x)−f(x1)

我们给一个初始解x,并让它不断变动。要模拟变动的大小随温度的降低而降低,我们每次的Δx应该在一个大小与T成正比的值域内随机取值。这时候我们就要考虑是否将当前解变为目标解。因为我们还是需要贪心,所以如果f(x1)<f(x),那么接受目标解,x=x1。

那如果f(x1)>f(x)呢?我们当然要以一定概率接受它啦,这样才能跳出局部的限制,去搜寻更优的解,弥补贪心的局限性。那么这个概率应该是多少呢?同样要模拟变动的大小随温度的降低而降低。
科学家经过理论分析,得出这个概率应该是 e Δ f T e^{\frac{\Delta f}{T}} eTΔf​

首先经过大幅波动,当前解由A->B->C,找到了一个比较满意的解。但还不能满足。由于温度还比较大,此时接受了一些不比当前解优的目标解,C->D->E,成功地爬了上去。而温度还在慢慢减小。终于,发现了一个更优解F,成功跳出了那个非常宽的局部凹函数。

这时候,温度越来越小了,很难再次接受不比当前解优的目标解,再次翻出去。解终于渐渐趋于稳定,并最终到达了G,找到了最优解。

随机梯度下降

随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。
SGD既可以用于分类计算,也可以用于回归计算。

这里比较对象是批量梯度和mini-batch梯度下降,先看下他们三者:


随机梯度下降:在每次更新时用1个样本,可以看到多了随机两个字,随机也就是说我们用样本中的一个例子来近似我所有的样本来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,对于最优化问题,凸问题,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。但是相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是我们可以接受的,所以这个方法用的也比上面的多。


批量梯度下降:在每次更新时用所有样本,要留意,在梯度下降中,对于θ的更新,所有的样本都有贡献,也就是参与调整θ其计算得到的是一个标准梯度,对于最优化问题,凸问题也肯定可以达到一个全局最优。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦。但是很多时候,样本很多,更新一次要很久,这样的方法就不合适啦。


mini-batch梯度下降:在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的,其本质就是我1个指不定不太准,那我用个30个50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。在深度学习中,这种方法用的是最多的,因为这个方法收敛也不会很慢,收敛的局部最优也是更多的可以接受!

遗传算法

暂时不做介绍,其理论可以看 https://www.jianshu.com/p/ae5157c26af9 和 https://blog.csdn.net/qq_31805821/article/details/79763326

One PUNCH Man——梯度下降和全局最优相关推荐

  1. 吴恩达机器学习笔记-梯度下降

    通过前面的文章我们现在已经有了假设函数$h_\theta(x)$并知道如何度量这个函数与数据的符合程度,即代价函数$J(\theta_0,\theta_1)$取得最小值.那么现在要做的,就是如何去预估 ...

  2. 八、梯度下降法和拟牛顿法

    1.梯度 2.梯度上升和梯度下降 3.梯度下降算法详解 3.1 直观解释 3.2 梯度下降相关概念 3.3 梯度下降的矩阵描述 3.4 梯度下降的算法调优 4.梯度下降法大家族 5.梯度下降法和其他无 ...

  3. 人工智障学习笔记——梯度下降(1)基础变种

    一.概念 梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型.梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以 ...

  4. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  5. [转载]梯度下降小结

    转自:https://www.cnblogs.com/pinard/p/5970503.html 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采 ...

  6. 梯度下降(Gradient Descent)小结

    在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法.这里就对梯度下降法做一个完整的总结. 1. 梯度 在微 ...

  7. 【机器学习】<刘建平Pinard老师博客学习记录>梯度下降(Gradient Descent)

    目录 一.梯度: 二.梯度上升和梯度下降: 三.梯度下降法算法详解: 1.梯度下降的直观解释: 2.梯度下降的相关概念: 3.梯度下降的详细算法: 3.1 梯度下降法的代数方式描述: 3.2 梯度下降 ...

  8. 最速下降法matlab全局最小值_梯度下降概念

    1.梯度概念 (1)从几何意义上讲,就是函数变化最快的地方. 在单变量的函数中,梯度只是导数,其实就是函数在某个给定点的切线的斜率: 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数 ...

  9. 逻辑回归L1与L2正则,L1稀疏,L2全局最优(凸函数梯度下降)

    转载:https://chenrudan.github.io/blog/2016/01/09/logisticregression.html http://nanshu.wang/post/2015- ...

最新文章

  1. oracle与mysql创建表时的区别
  2. 虚拟机克隆以后出现“需要整合虚拟机磁盘”的解决方法
  3. 上海中考-哪些区是“地狱模式”?——2019上海中考数据观
  4. 代码大全--防御试编程
  5. SpringBoot高级-任务-异步任务
  6. vue 内的 对象 获取 键值对_vue.js - vue 登录存localStorage的方法
  7. 野生前端的数据结构基础练习(5)——散列
  8. ELK下钉钉邮件告警通知
  9. python持久层框架_python网络爬虫——scrapy框架持久化存储
  10. 【Multisim仿真】用555定时器+CD4017实现流水灯
  11. PAT题目答案与经验总结1(持续更新,大家放心关注)
  12. 电脑黑屏无法启动怎么办
  13. 优衣库推全新门店概念,背后意义何在?
  14. 五款高效率黑科技神器工具,炸裂好用,省时间
  15. 如何理解yield的用法
  16. arm二进制文件转换成c语言,转换非常简单的ARM指令将二进制/十六进制(Converting very simple ARM i...
  17. 起点web端体验报告
  18. The Necklace
  19. Python:将Flask测试应用部署到Deta
  20. 京瓷FS1040清零方法

热门文章

  1. 怎么裁剪gif动图的尺寸?一招教你快速裁剪动图
  2. 安装tensorflow的时候出现了几个问题
  3. LeetCode-究极刷题【合集】
  4. 做AI手语数字人,是让聋人用熟悉的方式去理解健听人的表达方式
  5. 全球高级持续性威胁 APT 2021年度报告
  6. Greenplum upgrade from 4.3.4.1 to 4.3.30.0
  7. ffmpeg 视频解码一
  8. express4.13.4之microblog学习笔记
  9. springboot入门系列教程|第九篇:springboot实现图片上传与显示(附源码)
  10. [分享] 达芬奇人体比例图