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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李宏毅机器学习笔记(三): 梯度下降 -> 正文阅读

[人工智能]李宏毅机器学习笔记(三): 梯度下降

一、基本过程

解决一个优化问题,通常需要构造一个 L o s s F u n c t i o n Loss Function LossFunction ,找到最优的参数 θ \theta θ 使 L o s s F u n c t i o n Loss Function LossFunction 最小:
θ ? = arg ? max ? θ L ( θ ) , L : l o s s f u n c t i o n θ : p a r a m e t e r s \theta^*=\mathop{\arg\max}\limits_{\theta}L(\theta),\quad L:loss function \quad\theta:parameters θ?=θargmax?L(θ),L:lossfunctionθ:parameters
假设 θ \theta θ 有两个变量 { θ 1 , θ 2 } \{\theta_1,\theta_2\} {θ1?,θ2?},随机选择始点 θ 0 = [ θ 1 0 θ 2 0 ] \theta^0=\begin{bmatrix} \theta^0_1 \\ \theta^0_2 \end{bmatrix} θ0=[θ10?θ20??]

求偏微分,更新参数, θ 1 = θ 0 ? η ? L ( θ 0 ) ? θ \theta^1=\theta^0-\eta\frac{\partial L(\theta^0)}{\partial\theta} θ1=θ0?η?θ?L(θ0)?

此处减号表示是沿着负梯度方向更新的,梯度是上升最快的方向,负梯度就是下降最快的方向。因为我们要使L达到最小,如果偏导数是正数,说明变量值增加,L变大,此时变量应该减小来使L减小,因此减去 η ? L ( θ 0 ) ? θ \eta\frac{\partial L(\theta^0)}{\partial\theta} η?θ?L(θ0)?;如果偏导数是负数,说明变量值增加,L变小,此时变量应该增加来使L减小,因此减去一个负数 η ? L ( θ 0 ) ? θ \eta\frac{\partial L(\theta^0)}{\partial\theta} η?θ?L(θ0)?

反复迭代得到 θ 2 , θ 3 , . . . \theta^2,\theta^3,... θ2,θ3,...

注:用上标0表示初始的一组参数,下表1和2表示初始的一组参数里面的两个组成(component)

二、一些细节

1. 调整学习率Learning Rate

  • 学习率太小:速度会很慢,需要更多次的迭代来达到最小。
  • 学习率太大:可能会错过最小点

在一维和二维情况下进行可视化展现,蓝色即学习率过小的情况,绿色即学习率过大的情况:

更多维的情况我们是通过对Loss Function的可视化进行观察:

学习率的调参原则 :学习率随着参数更新越来越小(自适应adaptive)。因为刚开始的时候,离最优点通常是较远的,步伐可以大一点,经过多次迭代后会更加接近目标,所以应当减小学习率防止错过最低点。

● Adagrad自适应梯度算法

每一个参数的学习率都除以之前算出来的微分的均方根(RMS 将所有值平方求和, 求其均值, 再开平方)

  • 普通梯度算法 w t + 1 ← w t ? η t g t w^{t+1}\leftarrow w^t-\eta^tg^t wt+1wt?ηtgt
  • 自适应梯度算法 w t + 1 ← w t ? η t σ t g t w^{t+1}\leftarrow w^t-\displaystyle{\frac{\eta^t}{\sigma^t}}g^t wt+1wt?σtηt?gt

σ t : \sigma^t: σt过去所有的微分值相加求平均值,再开方。例如:

w 1 ← w 0 ? η 0 σ 0 g 0 w^{1}\leftarrow w^0-\displaystyle{\frac{\eta^0}{\sigma^0}}g^0 w1w0?σ0η0?g0?????????? σ 0 = ( g 0 ) 2 \sigma^0=\sqrt{(g^0)^2} σ0=(g0)2 ?

w 2 ← w 1 ? η 1 σ 1 g 1 w^{2}\leftarrow w^1-\displaystyle{\frac{\eta^1}{\sigma^1}}g^1 w2w1?σ1η1?g1?????????? σ 1 = 1 2 [ ( g 0 ) 2 + ( g 1 ) 2 ] \sigma^1=\sqrt{\frac{1}{2}[(g^0)^2+(g^1)^2]} σ1=21?[(g0)2+(g1)2] ?

. . . . . . ...... ......
w t + 1 ← w t ? η t σ t g t w^{t+1}\leftarrow w^t-\displaystyle{\frac{\eta^t}{\sigma^t}}g^t wt+1wt?σtηt?gt?????????? σ t = 1 t + 1 ∑ i = 0 t ( g i ) 2 \sigma^t=\sqrt{\displaystyle{\frac{1}{t+1}}\sum\limits_{i=0}^t(g^i)^2} σt=t+11?i=0t?(gi)2 ?

而?? η t = η t + 1 , \eta^t=\displaystyle{\frac{\eta}{\sqrt{t+1}}}, ηt=t+1 ?η?,

因此, w t + 1 ← w t ? η ∑ i = 1 t ( g i ) 2 g t w^{t+1}\leftarrow w^t-\displaystyle{\frac{\eta}{\sqrt{\sum\limits_{i=1}^t(g^i)^2}}}g^t wt+1wt?i=1t?(gi)2 ?η?gt

观察表达式可以看出,梯度下降的速度和两个因素有关,一个是学习率 η \eta η,在Adagrad中对其进行多一步的处理,另一个是梯度 g t g^t gt而在此处出了一个矛盾 :之前一直说斜率/梯度越大,更新越快,而Adagrad中, g t g^t gt告诉我们微分值越大,参数更新得越快,而 η ∑ i = 1 t ( g i ) 2 \displaystyle{\frac{\eta}{\sqrt{\sum\limits_{i=1}^t(g^i)^2}}} i=1t?(gi)2 ?η? 告诉我们微分值越大,更新速度反而小。

有些文章认为:Adagrad是想研究gradient有多反差:How surprise it is?考虑过去每一次的gradient,使之相除,造成反差的效果。

更正式的解释:Larger gradient, larger steps?

以二次函数为例,其最低点的横坐标是 ? b 2 a -\frac{b}{2a} ?2ab?,任取一个 x 0 x_0 x0?,多大的步长能使其到最低点呢? —— ∣ x 0 + b 2 a ∣ = ∣ 2 a x 0 + b ∣ 2 a |x_0+\frac{b}{2a}|=\frac{|2ax_0+b|}{2a} x0?+2ab?=2a2ax0?+b?,分子刚好就是一阶导数,注意此处a是大于0的,若微分值越大,也就离最低点越远。 我们想要到达最低点,最好就选取 ∣ 2 a x 0 + b ∣ 2 a \frac{|2ax_0+b|}{2a} 2a2ax0?+b?为步长。

但是这只有在含一个参数的情况下成立,若有多个参数则不成立。以两个参数的情况为例:

只考虑 w 1 w_1 w1?时,a的微分要大于b,a距离最低点也比b更远,这符合前面的描述;
只考虑 w 2 w_2 w2?时,c的微分要大于d,c距离最低点也比d更远,这同样符合前面的描述;

但是跨参数比较时就不一定成立,例如a的微分值小于c,但是a可能离最低点更远。所以要进一步改进,这时考虑, ∣ 2 a x 0 + b ∣ 2 a \frac{|2ax_0+b|}{2a} 2a2ax0?+b?的分子其实就是二次函数的二阶导,应当将二次微分也考虑进来,最佳步长: 一 阶 偏 微 分 二 阶 偏 微 分 \frac{一阶偏微分}{二阶偏微分} ?

再回到Adagrad的参数更新表达式 w t + 1 ← w t ? η ∑ i = 1 t ( g i ) 2 g t w^{t+1}\leftarrow w^t-\displaystyle{\frac{\eta}{\sqrt{\sum\limits_{i=1}^t(g^i)^2}}}g^t wt+1wt?i=1t?(gi)2 ?η?gt η \eta η是个常量

g t ∑ i = 1 t ( g i ) 2 \displaystyle{\frac{g^t}{\sqrt{\sum\limits_{i=1}^t(g^i)^2}}} i=1t?(gi)2 ?gt? 分子是一阶微分,分母不是二阶微分,但是事实上是二阶微分的近似,且这样使得计算量小,因为一阶微分是我们本来就需要计算的,现在用这种方式对二阶微分进行近似,不需要进行额外的计算。

2. 更快的参数更新速度

● SGD随机梯度下降法

  • 普通梯度下降: L = ∑ n ( y ^ n ? ( b + ∑ w i x i n ) ) 2 L=\sum\limits_n(\hat{y}^n-(b+\sum{w_ix^n_i}))^2 L=n?(y^?n?(b+wi?xin?))2
  • 随机梯度下降: L n = ( y ^ n ? ( b + ∑ w i x i n ) ) 2 L^n=(\hat{y}^n-(b+\sum{w_ix^n_i}))^2 Ln=(y^?n?(b+wi?xin?))2

SGD是随机选取一个 x n x^n xn ,根据参数在该样本中的表现计算Loss,注意SGD的式子中,保留了第二个 ∑ \sum ,这是表示对样本 x n x^n xn的所有feature进行计算。

SGD每次根据一个数据进行计算并更新参数,而不是考察所有数据后再更新,这样使得SGD计算速度很快。

与SGD相对的是Batch GD 批量梯度下降,我们一般说的GD就是BGD,将二者进行对比:

BGDSGD
所用数据每一次更新要用到所有数据每次更新仅用一个数据
梯度方向更准确的梯度计算方向梯度下降准确性降低
收敛性100%能找到全局最优对于凸函数可能也只找到局部最优
训练时间训练速度慢训练速度很快

将二者结合即得到mini-Batch GD(小批量梯度下降),每次选取一定量的数据进行参数更新,相比BGD可以降低时间花费,相比SGD更加准确。

3. Feature Scaling特征归一化

为什么?

  • 特征间的单位(尺度)可能不同,比如身高和体重,比如摄氏度和华氏度,比如房屋面积和房间数,一个特征的变化范围可能是[1000,10000],另一个特征的变化范围可能是[?0.1,0.2],在进行距离有关的计算时,单位的不同会导致计算结果的不同,尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略,为了消除特征间单位和尺度差异的影响,以对每维特征同等看待,需要对特征进行归一化。
  • 原始特征下,因尺度差异,其损失函数的等高线图可能是椭圆形,梯度方向垂直于等高线,下降会走zigzag路线,而不是指向local minimum。通过对特征进行zero-mean and unit-variance变换后,其损失函数的等高线图更接近圆形,梯度下降的方向震荡更小,收敛更快。
    ——来自为什么要归一化?

怎么做?
归一化方法有很多,最常用的是z-score法min-max法

上图所示为z-score方法的思想,注意归一化是对每一个属性分别归一化,对于一个属性,计算其取值的出平均值和方差,归一化后的属性值为 x ? μ σ \displaystyle\frac{x-\mu}{\sigma} σx?μ?,在实际应用中,是否归一化会对结果产生较大的影响,一般我们都会在数据预处理阶段进行归一化操作。

三、梯度下降的局限性

对于非凸函数,并不一定能找到全局最优。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:51:15  更:2021-10-07 13:52:11 
 
开发: 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年11日历 -2024/11/27 10:37:28-

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