IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李宏毅《机器学习》| 梯度下降 -> 正文阅读

[人工智能]李宏毅《机器学习》| 梯度下降

李宏毅《机器学习》| 回归中提到了梯度下降的方法,这篇文章来详细总结下梯度下降,梯度下降代码展示见文章李宏毅《机器学习》| 回归-Gradient Descent代码展示

目录

一、回顾

二、调整学习速率

法1:一点点调整

法2:自适应学习率

法3:Adagrad算法

算法

矛盾

考虑多参数情况

进一步解释

三、随机梯度下降法

四、特征缩放

原因

做法

五、理论基础

问题

泰勒展开式

?利用泰勒展开式简化

六、梯度下降的限制


一、回顾

回归问题求解最优参数时,需要解决最优化问题为

\theta^{*} =arg\mathop {\min }\limits_\theta L(\theta ),其中L为损失函数,\theta为参数。

分别计算初始点\theta ^{0}处,两个参数对L的偏微分,然后\theta ^{0}减掉学习率learning rate\eta乘上偏微分的值,得到更新后的一组参数。同理反复进行这样的计算。\bigtriangledown L(\theta)即为梯度

二、调整学习速率

法1:一点点调整

左边黑色曲线为损失函数的曲线。假设从左边最高点开始,若学习率调整的刚刚好,如红色的线,就能顺利找到最低点。如果学习率调整的太小,如蓝色的线,就会走的太慢。如果学习率调整的太大,如绿色的线,就会震荡,永远无法到达最低点。如果学习率调整的非常大,如黄色的线,更新参数时会发现损失函数越更新越大。

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

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

法2:自适应学习率

一个简单的思想:随着次数的增加,通过一些因子来减少学习率。

一般初始点会距离最低点比较远,所以使用大一点的学习率;update多次参数后,较为靠近最低点,此时减少学习率,如\eta ^{t}=\frac{\eta ^{t}}{\sqrt{t+1}}t是迭代次数。随着次数的增加,\eta ^{t}减小。

学习率不能是一个值通用所有特征,不同的参数需要不同的学习率。

法3:Adagrad算法

算法

每个参数的学习率都把它除上之前微分的均方根,即\omega^{t+1}=\omega^{t}-\frac{\eta^{t}}{\sigma^{t}}g^{t},其中g^{t}=\frac{\partial L(\theta^{t})}{\partial\omega}\sigma^{t}为之前参数的所有微分的均方根,对于每个参数都是不一样的。更新算法如下:

矛盾

在Adagrad中,当梯度越大时,步伐也应该越大;但分母又导致当梯度越大时,步伐会越小。

?直观解释:

?正式解释:

假设初始点在x_{0},最低点为-\frac{b}{2a},最佳的步伐就是x_{0}到最低点之间的距离\left |x_{0}+\frac{b}{2a} \right |,即\left | \frac{2ax_{0}+b}{2a} \right |?,而分子\left| 2ax_{0}+b \right |就是方程绝对值在x_{0}这一点的微分。如果计算得到的微分越大,则距离最低点越远,且最佳步长和微分的大小成正比。所以如果踏出去的步伐和微分成正比,它可能是比较好的。即梯度越大,距离最低点越远。

考虑多参数情况

上述结论结论在多参数时不一定成立:

上图左边是两个参数的损失函数,颜色代表损失函数的值。如果只考虑参数w_{1}(图中蓝色线),得到右边上图结果;如果只考虑参数w_{2}(图中绿色线),得到右边下图结果。对于ab,或者结论是成立的,同理c?和d也成立。但是如果对比ac就不成立了,ca大,但c距最低点较近。因此该结论只在没有考虑跨参数的情况下才成立

?之前讲到最佳距离\left | \frac{2ax_{0}+b}{2a} \right |中的分母2a是对function进行二次微分得到的:\frac{\partial ^{2}y}{\partial x^{2}}=2a,所以最好的步伐不仅仅要正比于一次微分,同时要和二次微分呈反比,即\frac{first \; derivative}{second\;derivative}

进一步解释

对于?\sqrt{\sum_{i=0}^{t}(g^{i})^2}就是希望尽可能不增加过多运算的情况下模拟二次微分(如果计算二次微分,在实际情况中可能会增加很多的时间消耗)。

三、随机梯度下降法

之前的梯度下降需要处理所有的数据:

?随机梯度下降法的损失函数不需要处理训练集所有的数据,只选取一个例子x^{n},只需要计算某一个例子的损失函数L^{n},就可以update 梯度。

常规梯度下降法走一步要处理所有二十个例子,但随机算法此时已走了二十步(每处理一个例子就更新)?。

四、特征缩放

假设有函数y=b+w_1x_1+w_2x_2,两个输入的分布的范围很不一样,建议把他们的范围缩放,使得不同输入的范围是一样的。

原因

下图左边x_{1}的scale比x_2要小很多,所以当\omega_{1}\omega_{2}做同样变化时,\omega_{1}y的变化影响是比较小的,\omega_{2}y的变化影响是比较大的。?

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

当两个参数scaling比较接近时(右边绿色图),error surface就比较接近圆形。

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

做法

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

五、理论基础

问题

用梯度下降解决问题\theta^{*} =arg\mathop {\min }\limits_\theta L(\theta ),每次更新参数\theta,都得到一个新的\theta,它都使得损失函数更小,即L(\theta^{0})> L(\theta^{1})> L(\theta^{2})> ...的结论是错误的。

比如在\theta^{0}处,可以在一个小范围的圆圈内找到损失函数细小的\theta^{1},不断的这样去寻找。接下来就是如何在小圆圈内快速的找到使得loss最小的参数?

泰勒展开式

举例:图中3条蓝色线是把前3项作图,橙色线是sin(x)

多变量展开式:

?利用泰勒展开式简化

回到之前如何快速在圆圈内找到最小值。基于泰勒展开式,在(a,b)点的红色圆圈范围内,可以将损失函数用泰勒展开式进行简化:

将问题简化为:

不考虑s的话,可以看出剩下的部分就是两个向量(\triangle \theta_1,\triangle \theta_2)和(u,v)的内积,那怎样让它最小,就是和向量(u,v)方向相反的向量:

然后将u和v带入

最后的式子就是梯度下降的式子L(θ)≈s+u(θ1??a)+v(θ2??b)。但用这种方法找到这个式子有个前提,泰勒展开式给的损失函数的估算值要足够精确,而这需红色圈圈足够小(也就是学习率足够小)来保证。故理论上每次更新参数都想要损失函数减小的话,即保证L(\theta^{0})> L(\theta^{1})> L(\theta^{2})> ...成立的话,就需要学习率足够足够小才可以。

所以实际中,当更新参数时,若学习率没有设好,有可能L(\theta^{0})> L(\theta^{1})> L(\theta^{2})> ...不成立,所以导致做梯度下降时,损失函数没有越来越小。

上式只考虑了泰勒展开式的一次项,如考虑到二次项(如牛顿法),在实际中不是特别好,会涉及到二次微分等,将增加很多的运算,性价比不高。

六、梯度下降的限制

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:03:28  更:2022-01-16 13:04:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:06:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码