李宏毅机器学习——梯度下降详细讲解

2023-11-06

梯度下降

梯度下降是为了解决回归方程中参数的最优化问题,即表现为下述的式子:

θ ∗ = arg ⁡ min ⁡ θ L ( θ ) \theta ^{\ast }=\arg \min _{\theta }L\left( \theta \right) θ=argθminL(θ)

  • L ( θ ) L\left(\theta\right) L(θ) : Lossfunction( 代价损失函数)
  • θ \theta θ:parameters(参数)

注意:上述中的 θ \theta θ并不是指的一个参数,而是指的一组参数
需要找一组参数,令代价损失函数的值达到最小值,可以使用梯度下降的方法来寻找参数。
梯度下降方法开始时随机初始化一组 θ \theta θ 值(通常情况下初始化为0),在这里我们假设 θ \theta θ 中是一个二维参数,即包含 θ 1 θ 2 \theta_{1} \theta_{2} θ1θ2 两个参数,如下图:

θ = [ θ 1 θ 2 ] \theta =\begin{bmatrix} \theta _{1} \\ \theta _{2} \end{bmatrix} θ=[θ1θ2]

梯度下降过程如下:
在这里插入图片描述
上述的公式符号的含义:

η \eta η:learning_rate:学习率
∂ L ( θ ) ∂ θ \dfrac {\partial L\left( \theta \right) }{\partial \theta } θL(θ):表示对参数求微分
θ i \theta^{i} θi:表示第 i 此迭代后的参数值
∇ L ( θ ) \nabla L\left(\theta\right) L(θ):表示梯度

1. 学习率

下图表示对学习率的可视化描述:

在这里插入图片描述

学习率的选择

学习率在很大程度上影响了梯度下降后的最终参数的取值,从而影响损失函数最终的值,如果学习率 η \eta η 初始化为一个较大的值,可能再开始的时候代价损失的值是下降的,但是之后代价损失可能会突然增加,也可能一开始代价损失的值就会增大。如果学习率初始化为一个较小的值,梯度下降就会执行较长的时间,在时间的花费上让人无法忍受,如下图所示:

在这里插入图片描述
上图左边黑色为损失函数的曲线,假设从左边最高点开始,如果学习率调整的刚刚好,比如红色的线,就能顺利找到最低点。如果学习率调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果 学习率调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如黄色的线,直接就飞出去了,更新参数的时候只会发现损失函数越更新越大。

虽然这样的可视化可以很直观观察,但可视化也只是能在参数是一维或者二维的时候进行,更高维的情况已经无法可视化了。

解决方法就是上图右边的方案,将参数改变对损失函数的影响进行可视化。比如学习率太小(蓝色的线),损失函数下降的非常慢;学习率太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;学习率特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。

1.1自适应学习率

上述结果产生的原因是因为学习率在开始时学习率设定初值之后就不变了,从而导致损失函数值的不确定性,我们可以通过一种方式,令学习率随着迭代次数的进行而不断的变化,从而令梯度下降很好的进行。

一个简单的思想上:随着迭代次数的逐渐增加,通过某一些因子来令学习率逐渐的降低,这样的原因是:
1、在梯度下降刚开始时,初始点距离最低点有较远的距离,此时的学习率可以设置的大一点
2、随着迭代次数的增加,点会比较靠近最低点,这个时候应该令前进的步伐小一点,需要设置较低的学习率。
比如使用 η t = η t + 1 \eta^{t}=\dfrac{\eta}{\sqrt{t+1}} ηt=t+1 η t表示迭代的次数

1.2 Adagrad算法

Adagrad算法是令当前的学习率等于全局初始的学习率除以当前参数之前所有的微分平方和的均方根

普通的梯度下降:
w t + 1 = w t − η t g t w^{t+1} = w^{t} - \eta^{t}g^{t} wt+1=wtηtgt
η t = η t + 1 \eta^{t} = \dfrac{\eta}{\sqrt{t+1}} ηt=t+1 η
w t w^{t} wt表示一个参数, g t 表 示 第 t 次 的 微 分 g^{t}表示第 t 次的微分 gtt

Adagrad相比于普通的梯度下降拥有更好的效果:
w t + 1 = w t − η σ t g t w^{t+1} = w^{t} - \dfrac{\eta}{\sigma^{t}}g^{t} wt+1=wtσtηgt
σ t = ∑ i = 0 t ( g i ) 2 \sigma^{t}=\sqrt{\sum^{t}_{i=0}\left(g^{i}\right)^{2}} σt=i=0t(gi)2

2. 随机梯度下降

普通的梯度下降:

L = ∑ n ( y ^ n − ( b + ∑ w i x i n ) ) 2 L=\sum_{n}(\widehat{y}^{n} - (b+\sum w_{i}x^{n}_{i}))^{2} L=n(y n(b+wixin))2
x n = x n − 1 − η ∇ L ( x n − 1 ) x^{n} = x^{n-1} - \eta\nabla L(x^{n-1}) xn=xn1ηL(xn1)

随机梯度并不是针对所有的数据进行处理,而是随机的选取一个例子 x n x^{n} xn,这种选取方法回事梯度下降处理的更加快速。

随机梯度下降方法如下:
L = ( y ^ n − ( b + ∑ w i x i n ) ) 2 L = (\widehat{y}^{n} - (b+\sum w_{i}x^{n}_{i}))^{2} L=(y n(b+wixin))2
x n = x n − 1 − η ∇ L ( x n − 1 ) x^{n} = x^{n-1} - \eta\nabla L(x^{n-1}) xn=xn1ηL(xn1)

两种方法的比较:
在这里插入图片描述

3. 特征缩放

特征缩放针对的是如果一种事物的几种特征之间相差的数量级过大,就会造成数量级小的特征失去作用,比如说下面的函数:

y = b + w 1 x 1 + w 2 x 2 y = b + w_{1}x_{1}+w_{2}x_{2} y=b+w1x1+w2x2
对于 x1 和 x2 特征来说,x1 的分布范围 和 x2 的分布范围不一致,且差别过大,建议进行特征缩放,令两个特征的分布范围相差不大。
在这里插入图片描述

3.1 特征缩放原因

在这里插入图片描述

上图左边是 x 1 x_{1} x1 的scale比 x 2 x_{2} x2 要小很多,所以当 w 1 w_{1} w1 w 2 w_{2} w2 做同样的变化时, w 1 w_{1} w1对 yy 的变化影响是比较小的, w 2 w_{2} w2对 yy 的变化影响是比较大的。

坐标系中是两个参数的error surface(现在考虑左边蓝色),因为 w 1 w_{1} w1 对 yy 的变化影响比较小,所以 w 1 w_{1} w1对损失函数的影响比较小, w 1 w_{1} w1对损失函数有比较小的微分,所以 w 1 w_{1} w1方向上是比较平滑的。同理 w 2 w_{2} w2对 yy 的影响比较大,所以 w 2 w_{2} w2对损失函数的影响比较大,所以在 w 2 w_{2} w2方向有比较尖的峡谷。

上图右边是两个参数scaling比较接近,右边的绿色图就比较接近圆形。

对于左边的情况,上面讲过这种狭长的情形不过不用Adagrad的话是比较难处理的,两个方向上需要不同的学习率,同一组学习率会搞不定它。而右边情形更新参数就会变得比较容易。左边的梯度下降并不是向着最低点方向走的,而是顺着等高线切线法线方向走的。但绿色就可以向着圆心(最低点)走,这样做参数更新也是比较有效率。

3.2 特征缩放方法

在这里插入图片描述

上图每一列都是一个例子,里面都有一组特征。
对每一个维度 i i i(绿色框)都计算平均数,记做 m i m_{i} mi,还要计算标准差,记做 σ i \sigma_{i} σi。然后用第 r r r 个例子中的第 i i i 个输入,减掉平均数 m i m_{i} mi,然后除以标准差 σ i \sigma_{i} σi,得到的结果是第 i i i 个维度的平均值都是 0,所有的方差都是 1。

4. 梯度下降的限制

在这里插入图片描述

容易陷入局部极值 还有可能卡在不是极值,但微分值是0的地方 还有可能实际中只是当微分值小于某一个数值就停下来了,但这里只是比较平缓,并不是极值点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

李宏毅机器学习——梯度下降详细讲解 的相关文章

  • C语言——创建文件

    创建文件 include
  • 俄罗斯方块(C++)

    目录 一 俄罗斯方块简易版的实现 1 图形的存储 2 图形的显示 3 图形的操作 4 碰撞检测 1 碰撞检测 移动 2 碰撞检测 旋转 5 消除整行 6 游戏结束 7 完整代码 二 俄罗斯方块简易版的升级 1 新增属性 2 更改初始化函数
  • CSS 定位(position) (三)

    叠放次序 z index 当对多个元素同时设置定位时 定位元素之间有可能会发生重叠 在CSS中 要想调整重叠定位元素的堆叠顺序 可以对定位元素应用z index层叠等级属性 其取值可为正整数 负整数和0 比如 z index 2 注意 z

随机推荐

  • 阿里云磁盘异常爆满的原因排查及解决方法

    阿里云磁盘异常爆满的原因排查及解决方法 网上搜了好多没有找到解决方法 第一步登录服务器 使用 df h 命令查看磁盘使用率 接下来逐步排查占用内存的文件 输入 du h 显示没有异常大文件 输入 du h max depth 1 后查到异常
  • 论文笔记之ST-GCN

    通过将图卷积网络扩展到时空图模型 设计了一种 用于动作识别的骨架序列 的通用表示 AAAI 2018 录用 论文地址 https arxiv org abs 1801 07455 1 摘要 动态人体骨架模型带有进行动作识别的重要信息 传统的
  • git clone项目报错,The requested URL returned error: 500

    git clone项目报错 The requested URL returned error 500 如何解决 试试修改电脑中存储的账号密码 有项目权限 至少在网页上能通过链接访问当前Git内容 曾在当前电脑登录过git账号 满足以上两种情
  • flutter 保存列表状态和控制列表状态

    class DiscoverActivePageState extends State
  • vue中列表渲染相关知识(v-for)

    普通的列表使用ul包含多个li实现 这样往往不够灵活 在原生js中能够动态渲染列表具体实现如下 ul ul 我们再看看vue中如何实现列表渲染的 b b
  • 微信小程序获取当前位置 地图定位导航-详细代码

    小程序获取当前位置 回到当前位置 地图定位 导航 效果 因为小程序更新了获取地理位置API接口 需要先在app json中配置一下permission字段 不然会报微信小程序getLocation 需要在app json中声明permiss
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • Coqui TTS 安装与测试

    前言 本篇记录一下 Coqui TTS 的安装 Coqui TTS 的主要作者是德国人 这个库似乎之前和 Mozilla 的 TTS https github com mozilla TTS 有千丝万缕的关系 但是现在后者的 TTS 已经停
  • 2021年江苏省职业院校技能大赛中职 “网络信息安全”赛项(超详细)

    2021年中职组 网络空间安全 赛项 一 江苏省竞赛任务书 二 任务书解析 三 不懂的可以私信博主 一 江苏省竞赛任务书 一 竞赛时间 8 00 11 00 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段
  • [附源码]计算机毕业设计Python课程在线测评系统(程序+源码+LW文档)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • 一文理解pytorch张量概念和tensor的三种创建方式!

    1 张量是什么 张量是一个多维数组 它是标量 向量 矩阵的高维拓展 1 1 Variable Variable是 torch autograd中的数据类型 主要用于封装 Tensor 进行自动求导 data 被包装的Tensor grad
  • 超实用的IDEA插件推荐,百万级下载量

    超实用的30多款idea插件 有百万级下载量的优秀插件 你值得拥有 好的工具助你事半功倍 快速协助敲出更漂亮更有效率的代码 搬运工这里收集了很不错的IDEA插件 相信你一定会喜欢的 必备插件列表 Grep Console 自定义控制台输出格
  • C#常用代码

    最近学习用C 写了几个程序 记录一下常用的几个操作 方便以后Copy 文件操作 FileStream fs null try byte buf FileStream fs new FileStream strSampleFileName F
  • Ubuntu16.04下opencv2与ROSkinetic中自带opencv3不兼容问题总结

    1 背景 从ROSindigo换到ROSkinetic ROSkinetic中自带的opencv3 与原来indigo中opencv2不一样 所以原来的涉及opencv的程序都出了问题 最近这两天就一直在改兼容性 清明节最后一天了 总结一下
  • WebStorm2016.2 注册码及激活,2018.6.14亲测有效

    License server激活 这可能是最简单的了 在激活框 选择 License server 输入 http idea iteblog com key php 2018 6 14可用
  • table自定义表格的封装

    前言 对原生的table进行封装 让他满足我们一行显示不同个的需求 实现效果 如图所示 一行显示不同数量的内容 实现代码 1 封装的组件 custom table vue 源码看下面 1 一行显示几个td 2 表头数据 表格数据 3 js封
  • 深度学习python图像标记工具labelTool

    深度学习训练需要标记图像位置和类别 之前用的时候是叫做BBox Label Tool master 遇到大图像就显示不完整了 没有自适应缩放 这是改进后的Python脚本 目录结构 图片目录名images 标签目录名labels 图像目录下
  • JDK 新特性篇:JDK 8 新特性详解

    Java8新特性简介 Java 8 又称为 JDK 1 8 是 Java 语言开发的一个主要版本 Java 8 是 Oracle 公司于 2014 年 3 月发布 可以看成是自 Java 5 以来最具革命性的版本 Java 8 为 Java
  • 函数重载和缺省参数

    函数重载 C 允许在同一作用域类声明几个功能类似的同名函数 但是这些同名函数的形式参数 指参数的个数 类型或者顺序 必须不同 也就是说用同一个运算符完成不同的运算功能 函数重载必须是参数的个数或者类型不同 与返回值无关 在C语言当中是不支持
  • 李宏毅机器学习——梯度下降详细讲解

    文章目录 梯度下降 1 学习率 1 1自适应学习率 1 2 Adagrad算法 2 随机梯度下降 3 特征缩放 3 1 特征缩放原因 3 2 特征缩放方法 4 梯度下降的限制 梯度下降 梯度下降是为了解决回归方程中参数的最优化问题 即表现为