一、 梯度下降过程

梯度下降法的核心是最小化目标函数梯度下降求多维凸优化问题 梯度下降模型_梯度下降,其中梯度下降求多维凸优化问题 梯度下降模型_优化算法_02是模型的参数,梯度下降求多维凸优化问题 梯度下降模型_梯度下降_03。它的方法是在每次迭代中,对每个变量,按照目标函数在该变量梯度的相反反向,更新对应的参数值。其中,学习率梯度下降求多维凸优化问题 梯度下降模型_梯度下降_04决定了函数到达(局部)最小值的迭代次数。

梯度下降求多维凸优化问题 梯度下降模型_迭代_05


采用梯度下降方法来实现优化问题:

我们的优化函数表达式为:梯度下降求多维凸优化问题 梯度下降模型_优化算法_06

其中梯度下降求多维凸优化问题 梯度下降模型_迭代_07:代表损失函数,梯度下降求多维凸优化问题 梯度下降模型_优化算法_02:代表参数。

假设参数个数为2,即梯度下降求多维凸优化问题 梯度下降模型_梯度下降_09

开始时的随机参数为:梯度下降求多维凸优化问题 梯度下降模型_迭代_10,这边的梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_11为vector即向量。

则我们的优化过程为:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_12

以此类推不断更新,知道得到最优的参数。如上图所示。

二、学习率

梯度下降求多维凸优化问题 梯度下降模型_迭代_13

梯度下降时参数操作:
梯度下降求多维凸优化问题 梯度下降模型_迭代_14
由上图我们可以清楚的看到,当学习率梯度下降求多维凸优化问题 梯度下降模型_梯度下降_04设置的太小时如蓝色线,其梯度下降的速度就会相对较慢,计算出结果需要花费较长时间。
然而当学习率设置的较大时,我们的梯度下降的步伐会由于太大在横沟两侧反复跨越,如图绿线所示。要是再设置大一点梯度下降很可能跳走,如图黄线所示。而红线状态则是学习率设置得最理想的状态。

三、学习率更新

我们为什么要更新学习率呢,这是因为学习率一定程度上决定着梯度下降的步伐,起初损失函数的斜率较陡时,我们可以让学习率较为大点,当梯度下降迭代到一定程度的时候,其斜率可能会越来越平换,此时要达到最低点显然要减小梯度下降的步伐即减小学习率。如下图所示:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降_16


因此,我们的学习率可以设置成:梯度下降求多维凸优化问题 梯度下降模型_迭代_17

(一)Adagrad优化算法

Adagrad是一个基于梯度的优化算法,它对不同的参数调整学习率,具体而言,对低频出现的参数进行大的更新,对高频出现的参数进行小的更新。因此很适合于处理稀疏数据。Adagrad法大大提升了SGD的鲁棒性。

梯度下降求多维凸优化问题 梯度下降模型_迭代_18


上图的梯度下降求多维凸优化问题 梯度下降模型_梯度下降_19表示目标函数对权值参数梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_20的微分。即梯度下降求多维凸优化问题 梯度下降模型_优化算法_21

在李宏毅的视频中对Adagrad的式子有如下的解释:

梯度下降求多维凸优化问题 梯度下降模型_迭代_22


然而对于如下的式子:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降_23


看起来是不是感觉有点矛盾呢?因为梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_24取得较大值时,则后面的被减数部分就会很大,但是与此同时梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_25就会特别小。

梯度下降求多维凸优化问题 梯度下降模型_优化算法_26


然而在李宏毅视频中对其的解释是梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_24用于反应一次微分的绝对值,而梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_28则是反应一次微分的均方根误差,等价于二次微分的绝对值,它可以反应一次微分后图像的张开程度,在我们的梯度下降算法中则是间接反应出了梯度下降的跨度。

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

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_29


上图解释了SGD算法和一般的梯度下降算法的区别在于,一般梯度下降算法是将所有的训练样本输入目标函数中后再对目标函数进行微分进行梯度更新。SGD算法则是将一个样本或一小批样本就更新一次参数,所SGD的loss函数梯度下降求多维凸优化问题 梯度下降模型_梯度下降_30才会有上标梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_31

梯度下降求多维凸优化问题 梯度下降模型_梯度下降_32


由上图我们可以知道,当前我们训练完所有example后,SGD的梯度下降速率比传统的gradient descent快了许多。

特征缩放(feature scaling)

梯度下降求多维凸优化问题 梯度下降模型_梯度下降_33


如图所示,我们的模型有两个参数梯度下降求多维凸优化问题 梯度下降模型_迭代_34,倘若两个参数的取值范围差异很大,如设定我们的梯度下降求多维凸优化问题 梯度下降模型_梯度下降_35表示力,其取值范围为(0,50),然而梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_36表示生命值,其取值范围为(0,1000),显然额这样的话当梯度下降求多维凸优化问题 梯度下降模型_迭代_34的取值范围处在同意范围时,其分散的程度是不一样的。

因此我们在训练模型时可以对其做feature scaling处理,使不同的feature,他们的scaling相同。

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_38


如图所示,左侧蓝色部分是未对feature做处理,右侧部分是经过feature scaling做处理。显然,当我们多不同特征做feature scaling处理之后,我们的gradient descent就会变得简单。

那么,我们要如何做feature scaling处理呢?常见的方法如下图:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_39


假设我们R个example,第r个example的第i个维度数值表示为梯度下降求多维凸优化问题 梯度下降模型_优化算法_40,计算梯度下降求多维凸优化问题 梯度下降模型_优化算法_40的均值(就是前i个值得平均):梯度下降求多维凸优化问题 梯度下降模型_优化算法_42,再计算其标准差:梯度下降求多维凸优化问题 梯度下降模型_迭代_43。让后对每个值做如下处理:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_44

得到feature scaling处理的结果为所有维度的mean=0,var=1。就相当于标准正态分布。

四、梯度下降算法的本质

梯度下降求多维凸优化问题 梯度下降模型_迭代_45


梯度下降算法是一种迭代算法,梯度下降的参数更新本质上如图所示,可以表述为以每个要更新的梯度下降求多维凸优化问题 梯度下降模型_优化算法_02为中心画小范围的红色圆,我们要在这个红色圆圈内找到合适的点对其进一步的更新。其数学本质涉及泰勒展开式:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_47


然而,当我们存在多个参数时,其泰勒展开式同样有如下的表示:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_48


接下来模拟下更新过程的数学计算:

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_49


上图展示的是具有两个参数的损失函数梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_50的一阶泰勒展开式。如图设梯度下降求多维凸优化问题 梯度下降模型_梯度下降_51 ,梯度下降求多维凸优化问题 梯度下降模型_梯度下降_52来简化目标函数。

梯度下降求多维凸优化问题 梯度下降模型_梯度下降求多维凸优化问题_53


如图是对损失函数的进一步简化。

梯度下降的限制

梯度下降求多维凸优化问题 梯度下降模型_迭代_54


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