文章目录

  • 简介
  • 全梯度下降
  • 随机梯度下降
  • 小批量梯度下降
  • 随机平均梯度下降
  • 模拟退火

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

简单来说,梯度下降就像是从山顶出发,到达最低的谷底,但下山过程中可能误入歧途,走入不是最低的谷底,即局部最优。

『梯度』是一个向量,表示函数在该点处的方向导数沿着该方向取得最大值,也就是说沿着该向量方向变化率最大,是最陡的。

梯度的大小: ∣ ∇ f ∣ = f x ( x , y ) ′ 2 + f y ( x , y ) ′ 2 |\nabla f|=\sqrt{f_x(x,y)'^2+f_y(x,y)'^2} ∣∇f∣=fx​(x,y)′2+fy​(x,y)′2 ​,其中 f x ( x , y ) ′ f_x(x,y)' fx​(x,y)′是在点 ( x , y ) 处 (x,y)处 (x,y)处对 x x x的偏导数,其中 f y ( x , y ) ′ f_y(x,y)' fy​(x,y)′是在点 ( x , y ) 处 (x,y)处 (x,y)处对 y y y的偏导数。偏导数可以理解为在点(x,y)处的切线对x或y的斜率。


上图摘自网络。

那所谓的梯度下降法,可以理解为沿着梯度最大的反方向下山的过程。比如三维特征中,其平面图可以像是山峰和谷底,那我们就是要从山峰出发,从最陡(梯度最大)的方向进行下山,从而到达谷底取最小值,但往往可能陷入其它谷底,只取到了极小值,可以修改步长(学习率)。
Θ 1 = Θ 0 − α ∇ J ( Θ ) \Theta^1=\Theta^0-\alpha\nabla J(\Theta) Θ1=Θ0−α∇J(Θ)
其中 J J J是关于 Θ \Theta Θ的一个函数,设当前点位 Θ 0 \Theta^0 Θ0,从这个点走一段距离的步长(也就是学习率 α \alpha α),然后到达 Θ 1 \Theta^1 Θ1这个点,以此迭代,最终目标是要走到 J J J的最小值点,也就是谷底。

梯度下降算法中有几种方式来调节权重向量,通过为每个权重计算一个梯度,从而更新权值,使目标函数尽可能最小化。其差别在于样本的使用方式不同,包括全梯度下降算法、随机梯度下降算法、小批量梯度下降算法、随机平均梯度下降算法等,一般常用的还是随机梯度下降。

全梯度下降


全梯度下降算法(Full Gradient descent,FG)
所谓『全』的意思就是考虑全部的训练集样本,对其求和后取平均值。每次更新时在整个数据集上计算全部梯度,计算量较大,所以梯度下降的速度较慢。

此外,批梯度下降过程中不能同步更新模型,即在运行的过程中,不能增加新的样本数据。是在整个训练数据集上计算损失函数关于参数 θ \theta θ的梯度。

θ = θ − η ⋅ ∇ θ J ( θ ) \theta=\theta-\eta·\nabla_\theta J(\theta) θ=θ−η⋅∇θ​J(θ)

随机梯度下降


随机梯度下降算法(Stochastic Gradient descent,SG)
FG计算了全部样本,导致速度很慢且容易陷入局部最优解,故提出了SG。所谓『随机』就是每次随机带入一个样本进行计算即可,不再是全体样本误差。

使用单个样本误差更新权重,然后再随机下一个样本重复此过程,直到损失函数值停止下降,为此速度大幅提高,但是也由于每次只使用一个样本迭代,若随机到噪声样本则容易陷入局部最优解。

θ = θ − η ⋅ ∇ θ J ( θ ; x ( i ) ; y ( i ) ) \theta=\theta-\eta·\nabla_\theta J(\theta;x^{(i)};y^{(i)}) θ=θ−η⋅∇θ​J(θ;x(i);y(i))
其中, x ( i ) x_{(i)} x(i)​是训练样本 i i i的特征值, y ( i ) y_{(i)} y(i)​是训练样本 i i i的标签值。

小批量梯度下降


小批量梯度下降算法(Mini-batch Gradient descent)

所谓『小批量』就是全部与一个的折中方案,兼顾了FG和SG两种方法的优点。即每次从训练样本集上随机抽取一个小样本集,在该小样本集上用FG来迭代更新权重。

抽出的小样本集所含样本点的个数(batch.size)通常设为2的幂次方,为了方便GPU加速处理。如果batch.size=1,就是SG;若batch.size=n就是FG。

θ = θ − η ⋅ ∇ θ J ( θ ; x ( i : i + n ) ; y ( i : i + n ) ) \theta=\theta-\eta·\nabla_\theta J(\theta;x^{(i:i+n)};y^{(i:i+n)}) θ=θ−η⋅∇θ​J(θ;x(i:i+n);y(i:i+n))

(插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

随机平均梯度下降


随机平均梯度下降算法 (Stochastic Average Gradient descent,SAG)
所谓『随机平均』是在内存中为每一个样本都维护了一个旧的梯度,随机选择第 i i i个样本来更新此样本的梯度,其他样本的梯度保持不变,求得所有梯度的平均值来更新参数。

如此一来,每一轮更新仅需计算随机的一个样本梯度,同SG一样,但是收敛速度快得多,对大数据训练而言更有效。

模拟退火


梯度下降每次沿着梯度方向上升最大的反方向进行下降并趋于极值点,但是并不是每次沿着梯度最大的就能得到全局最优的最值点,也就是进入了其他的谷底。

可以了解一下模拟退火,每步不一定取最大,而是按照一定概率权值,在总体上以大概率向梯度下降的方向调整,但过程中接受不完美。
模拟退火背景:

物理的退火降温的过程:
给一个处于高温度的物体降温,使物体内能降到最低。
一般的思维是越快越好,尽快的温度迅速地降低。但实际上,过快地降温使得物体来不及有序地收缩,难以形成结晶,而结晶态才是物体真正内能降到最低的形态。
正确的做法,是徐徐降温,也就是退火,才能使得物体的每一个粒子都有足够的时间找到自己的最佳位置并紧密有序地排列。开始温度高的时候,粒子活跃地运动并逐渐找到一个合适的状态。在这过程中温度也会越降越低,温度低下来了,那么粒子也渐渐稳定下来,相较于以前不那么活跃了。这时候就可以慢慢形成最终稳定的结晶态了。

此外,不同学习率(步长)可能导致完全不同的结果。
若过大,则可能来回震荡,无法到达最优点;
若过小,则可能陷入局部最优;
合适的学习率才能取到全局最优。一般设置为0.1左右。

import numpy as np
import matplotlib.pyplot as pltdef func(x):  # 函数定义return x ** 4 + 2 * x ** 3 - 3 * x ** 2 - 3 * xdef grad_func(x):  # 求导return 4 * x ** 3 + 6 * x ** 2 - 6 * x - 3if __name__ == "__main__":x = np.linspace(-3, 1.9)  # 定义域[-3,1.9]fx = func(x)plt.plot(x, fx, '--')  # 虚线画出曲线eta = 0.08  # 学习率x0 = 1.8  # 初始值(山顶)record_x = []record_y = []for i in range(50):y0 = func(x0)record_x.append(x0)record_y.append(y0)x0 -= eta * grad_func(x0)  # 梯度下降# 可视化plt.title("学习率=0.08")plt.scatter(record_x, record_y, marker='x', color="red")plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.show()



在sklearn库中,封装了SGD*随机梯度下降算法的应用,如分类SGDClassifier()、回归SGDRegressor()等(☆▽☆)。

原创不易,请勿转载(本不富裕的访问量雪上加霜 )
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗

浅谈梯度下降与模拟退火算法相关推荐

  1. 梯度下降之模拟退火、梯度下降之学习计划、牛顿法、拟牛顿法、共轭梯度法

    梯度下降之模拟退火.梯度下降之学习计划.牛顿法.拟牛顿法.共轭梯度法 目录

  2. 浅谈网络爬虫中广度优先算法和代码实现

    前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...

  3. 面试浅谈之十大排序算法

    面试浅谈之十大排序算法 HELLO,各位博友好,我是阿呆

  4. 浅谈淘宝搜索排序算法【转自淘宝搜索博客】

    浅谈淘宝搜索排序算法 作者:鬼脚七     前言:        目前网上有很多介绍淘宝搜索排序的文章,大多是淘宝卖家们根据自己经验摸索整理出来的,里面提到的很多办法也很正确.只是搜索排序算法不是固定 ...

  5. 机器学习:SVM、软间隔、随机梯度下降SVM线性算法

    文章目录 SVM目标函数 SVM目标函数推导 函数间隔: 几何间隔: 软间隔.松弛 HingeLoss和软间隔 随机梯度下降算法 线性SVM的算法描述: 线性SVM算法实现: SVM目标函数 SVM目 ...

  6. 梯度下降和EM算法,kmeans的em推导

    I. 牛顿迭代法 给定一个复杂的非线性函数f(x),希望求它的最小值,我们一般可以这样做,假定它足够光滑,那么它的最小值也就是它的极小值点,满足f′(x0)=0,然后可以转化为求方程f′(x)=0的根 ...

  7. 人工智障学习笔记——梯度下降(2)优化算法

    四.优化 4-1 Momentum 如果我们把梯度下降法当作小球从山坡到山谷的一个过程,那么在小球滚动时是带有一定的初速度,在下落过程,小球积累的动能越来越大,小球的速度也会越滚越大,更快的奔向谷底, ...

  8. Apache Spark源码走读之22 -- 浅谈mllib中线性回归的算法实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文简要描述线性回归算法在Spark MLLib中的具体实现,涉及线性回归算法本身及线性回归并行处理的理论基础,然后对代码实现部分进行走读. 线性回归模型 ...

  9. 梯度下降算法和牛顿算法原理以及使用python用梯度下降和最小二乘算法求回归系数

    梯度下降算法 以下内容参考 微信公众号 AI学习与实践平台 SIGAI 导度和梯度的问题 因为我们做的是多元函数的极值求解问题,所以我们直接讨论多元函数.多元函数的梯度定义为: 其中称为梯度算子,它作 ...

最新文章

  1. Last_Error: Relay log read failure: Could not parse relay log event entry.
  2. SGML与HTML、XML
  3. js插件类库组织与管理
  4. CSV文件读取和处理
  5. ASP.NET MVC 重写RazorViewEngine实现多主题切换
  6. 开发中很实用的10个效果
  7. 【每日算法Day 93】不用额外空间,你会旋转一个矩阵吗?
  8. 远程预付费电能监测系统设计与应用
  9. IP地址规划和设计方法
  10. python体重转换_Python第十二课 计算体脂率2.0
  11. linux运行海康的sdk,海康摄像头SDK在Linux、windows下的兼容问题(二)已解决
  12. PS 渐变工具(锥形【线性渐变】和圆形【径向渐变】)
  13. 博弈论(Game Theory)入门——完全信息静态博弈
  14. java的开源软件jimi图片处理工具
  15. 从“中国宙斯盾”亮相想到的
  16. 初中地理老师教师资格证考试成功通过前辈备考经验分享
  17. 2017安防摄像头发展趋势分析
  18. 通俗讲解 Kademlia 原理
  19. 为什么选择体育·棒球运动
  20. iOS:友盟SDK第三方登录 分享及友盟统计的使用

热门文章

  1. 使用清华源安装ros2 foxy
  2. .dat数据文件怎么打开_CAXA线切割版,打开CAD的DWG, DXF文件的终极绝招
  3. 4个开源监控工具介绍
  4. 2020年数据中心运维的三大趋势
  5. 火狐各版本下载,且永久不更新
  6. Keystore密钥库
  7. 【WINDOWS / DOS 批处理】dir命令参数详解(二)
  8. 【组合数学:三】容斥原理
  9. altium designer 文件转换成 allegro 文件
  10. 政府机构安装什么SSL证书可以保证网站安全?