基于梯度下降方法优化模型

一、 梯度下降过程

梯度下降法的核心是最小化目标函数 J ( θ ) J(\theta) J(θ),其中 θ \theta θ是模型的参数, θ ∈ R d \theta \in R^{d} θRd。它的方法是在每次迭代中,对每个变量,按照目标函数在该变量梯度的相反反向,更新对应的参数值。其中,学习率 η \eta η决定了函数到达(局部)最小值的迭代次数。
在这里插入图片描述
采用梯度下降方法来实现优化问题:
我们的优化函数表达式为: θ ∗ = arg ⁡ min ⁡ θ L ( θ ) \theta^*=\mathop{\arg\min}\limits_{\theta}L(\theta) θ=θargminL(θ)
其中 L L L:代表损失函数, θ \theta θ:代表参数。
假设参数个数为2,即 θ = { θ 1 , θ 2 } \theta = \lbrace \theta_{1}, \theta_{2}\rbrace θ={θ1,θ2}
开始时的随机参数为: θ 0 = [ θ 1 0 θ 2 0 ] \theta_{0}=\begin{bmatrix} \theta_{1}^0 \\ \theta_{2}^{0} \\ \end{bmatrix} θ0=[θ10θ20],这边的 θ 0 \theta_{0} θ0为vector即向量。
则我们的优化过程为:
[ θ 1 1 θ 2 1 ] = [ θ 1 0 θ 2 0 ] − η [ ∂ L ( θ 1 0 ) ∂ θ 1 0 ∂ L ( θ 2 0 ) ∂ θ 2 0 ]    ⟹    θ 1 = θ 0 − η ∇ L ( θ 0 ) \begin{bmatrix} \theta_{1}^1 \\ \theta_{2}^{1} \\ \end{bmatrix} =\begin{bmatrix} \theta_{1}^0 \\ \theta_{2}^{0} \\ \end{bmatrix}-\eta\begin{bmatrix} \frac{\partial L(\theta_{1}^{0})}{\partial \theta_{1}^{0}} \\ \frac{\partial L(\theta_{2}^{0})}{\partial \theta_{2}^{0}} \\ \end{bmatrix}\implies \theta^{1}=\theta^{0}-\eta \nabla L(\theta^{0}) [θ11θ21]=[θ10θ20]ηθ10L(θ10)θ20L(θ20)θ1=θ0ηL(θ0)
以此类推不断更新,知道得到最优的参数。如上图所示。

二、学习率

在这里插入图片描述

梯度下降时参数操作:
θ i = θ i − 1 − η ∇ L ( θ i − 1 ) \theta^i = \theta^{i-1}-\eta \nabla L(\theta^{i-1}) θi=θi1ηL(θi1)
由上图我们可以清楚的看到,当学习率 η \eta η设置的太小时如蓝色线,其梯度下降的速度就会相对较慢,计算出结果需要花费较长时间。
然而当学习率设置的较大时,我们的梯度下降的步伐会由于太大在横沟两侧反复跨越,如图绿线所示。要是再设置大一点梯度下降很可能跳走,如图黄线所示。而红线状态则是学习率设置得最理想的状态。

三、学习率更新

我们为什么要更新学习率呢,这是因为学习率一定程度上决定着梯度下降的步伐,起初损失函数的斜率较陡时,我们可以让学习率较为大点,当梯度下降迭代到一定程度的时候,其斜率可能会越来越平换,此时要达到最低点显然要减小梯度下降的步伐即减小学习率。如下图所示:
在这里插入图片描述
因此,我们的学习率可以设置成: η t = η t + 1 \eta^{t}=\frac{\eta}{\sqrt{t+1}} ηt=t+1 η

(一)Adagrad优化算法

Adagrad是一个基于梯度的优化算法,它对不同的参数调整学习率,具体而言,对低频出现的参数进行大的更新,对高频出现的参数进行小的更新。因此很适合于处理稀疏数据。Adagrad法大大提升了SGD的鲁棒性。
在这里插入图片描述
上图的 g g g表示目标函数对权值参数 w w w的微分。即 g i = ∂ J ( θ ) ∂ w i g^i=\frac{\partial J(\theta)}{\partial w^i} gi=wiJ(θ)
在李宏毅的视频中对Adagrad的式子有如下的解释:
在这里插入图片描述
然而对于如下的式子:
在这里插入图片描述
看起来是不是感觉有点矛盾呢?因为 g t g^{t} gt取得较大值时,则后面的被减数部分就会很大,但是与此同时 g i g^{i} gi就会特别小。
在这里插入图片描述
然而在李宏毅视频中对其的解释是 g t g^{t} gt用于反应一次微分的绝对值,而 ∑ i = 0 t ( g i ) 2 \sqrt{\sum_{i=0}^{t}(g^{i})^{2}} i=0t(gi)2 则是反应一次微分的均方根误差,等价于二次微分的绝对值,它可以反应一次微分后图像的张开程度,在我们的梯度下降算法中则是间接反应出了梯度下降的跨度。

(二) 随机梯度下降算法(SGD)

在这里插入图片描述
上图解释了SGD算法和一般的梯度下降算法的区别在于,一般梯度下降算法是将所有的训练样本输入目标函数中后再对目标函数进行微分进行梯度更新。SGD算法则是将一个样本或一小批样本就更新一次参数,所SGD的loss函数 L n L^{n} Ln才会有上标 n n n
在这里插入图片描述
由上图我们可以知道,当前我们训练完所有example后,SGD的梯度下降速率比传统的gradient descent快了许多。

特征缩放(feature scaling)

在这里插入图片描述
如图所示,我们的模型有两个参数 x 1 , x 2 x_{1},x_{2} x1,x2,倘若两个参数的取值范围差异很大,如设定我们的 x 1 x_{1} x1表示攻击力,其取值范围为(0,50),然而 x 2 x_{2} x2表示生命值,其取值范围为(0,1000),显然额这样的话当 x 1 , x 2 x_{1},x_{2} x1,x2的取值范围处在同意范围时,其分散的程度是不一样的。
因此我们在训练模型时可以对其做feature scaling处理,使不同的feature,他们的scaling相同。
在这里插入图片描述
如图所示,左侧蓝色部分是未对feature做处理,右侧部分是经过feature scaling做处理。显然,当我们多不同特征做feature scaling处理之后,我们的gradient descent就会变得简单。
那么,我们要如何做feature scaling处理呢?常见的方法如下图:
在这里插入图片描述
假设我们R个example,第r个example的第i个维度数值表示为 x i r x_{i}^{r} xir,计算 x i r x_{i}^{r} xir的均值(就是前i个值得平均): m i m_{i} mi,再计算其标准差: σ i \sigma_{i} σi。让后对每个值做如下处理:
x i r ← x i r − m i σ i x_{i}^r \leftarrow \frac{x_{i}^{r}-m_{i}}{\sigma_{i}} xirσixirmi
得到feature scaling处理的结果为所有维度的mean=0,var=1。就相当于标准正态分布。

四、梯度下降算法的本质

在这里插入图片描述
梯度下降算法是一种迭代算法,梯度下降的参数更新本质上如图所示,可以表述为以每个要更新的 θ \theta θ为中心画小范围的红色圆,我们要在这个红色圆圈内找到合适的点对其进一步的更新。其数学本质涉及泰勒展开式:
在这里插入图片描述
然而,当我们存在多个参数时,其泰勒展开式同样有如下的表示:
在这里插入图片描述
接下来模拟下更新过程的数学计算:
在这里插入图片描述
上图展示的是具有两个参数的损失函数 L ( θ ) L(\theta) L(θ)的一阶泰勒展开式。如图设 S = L ( a , b ) , u = ∂ L ( a , b ) ∂ θ 1 S = L(a,b),u=\frac{\partial L(a,b)}{\partial \theta_{1}} S=L(a,b),u=θ1L(a,b) , v = ∂ L ( a , b ) ∂ θ 2 v=\frac{\partial L(a,b)}{\partial \theta_{2}} v=θ2L(a,b)来简化目标函数。
在这里插入图片描述
如图是对损失函数的进一步简化。

梯度下降的限制

在这里插入图片描述
上图描述了梯度下降的一些限制,即可能出现计算的梯度趋于0但是并未处于local minima位置,此时模型会停止训练,但是其结果并不是个很好。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值