龙空技术网

梯度下降算法

合鸣山下带发修行学AI 353

前言:

现在朋友们对“梯度下降及其优化算法实验报告”大概比较关心,咱们都想要分析一些“梯度下降及其优化算法实验报告”的相关内容。那么小编同时在网络上汇集了一些对于“梯度下降及其优化算法实验报告””的相关文章,希望同学们能喜欢,我们快快来了解一下吧!

梯度下降是一种非常通用的优化算法,能够为大范围的问题找到最优解。梯度下降的中心思想就是迭代地调整参数从而使成本函数最小化。

1 直观理解

假设你迷失在山上的浓雾之中,你能感觉到的只有你脚下路面的坡度。快速到达山脚的一个策略就是沿着最陡的方向下坡。这就是梯度下降的做法:通过测量参数向量θ相关的误差函数的局部梯度,并不断沿着降低梯度的方向调整,直到梯度降为0,到达最小值!

具体来说,首先使用一个随机的θ值(这被称为随机初始化),然后逐步改进,每次踏出一步,每一步都尝试降低一点成本函数(loss function),直到算法收敛出一个最小值(图1 )。

图1

以J(w)=w**2+2*w+1为例,求的最小值.

2 在Jupyter上的代码实现

def J(w):	return w**2 + 2*w +1def J_De(w):  return 2*w +2# 梯度下降法,就是沿着梯度方向更新参数# W:<------W-alpha*J_Deepoch = 20alpha = 0.2w = 1for i in range(epoch):  w=w - alpha* J_De(w)  print(w)

梯度下降中一个重要参数是每一步的步长,这取决于超参数学习率(alpha)。如果学习率太低,算法需要经过大量迭代才能收敛,这将耗费很长时间(参见图2)(读者可以尝试alpha=0.01,epoch=1000)。

图2

反过来说,如果学习率太高,那你可能会越过山谷直接到达山的另一边,甚至有可能比之前的起点还要高。这会导致算法发散,值越来越大,最后无法找到好的解决方案(参见图3)(读者可以尝试alpha=0.8,epoch=1000)。

图3

最后,并不是所有的成本函数看起来都像一个漂亮的碗。有的可能看着像洞、像山脉、像高原或者是各种不规则的地形,导致很难收敛到最小值。图4显示了梯度下降的两个主要挑战:如果随机初始化,算法从左侧起步,那么会收敛到一个局部最小值,而不是全局最小值。如果算法从右侧起步,那么需要经过很长时间才能越过整片高原,如果你停下得太早,将永远达不到全局最小值。

图4

幸好,线性回归模型的MSE成本函数恰好是个凸函数,这意味着连接曲线上任意两个点的线段永远不会跟曲线相交。也就是说不存在局部最小,只有一个全局最小值。它同时也是一个连续函数,所以斜率不会产生陡峭的变化。这两件事保证的结论是:即便是乱走,梯度下降都可以趋近到全局最小值(只要等待时间足够长,学习率也不是太高)。

成本函数虽然是碗状的,但如果不同特征的尺寸差别巨大,那它可能是一个非常细长的碗。如图5所示的梯度下降,左边的训练集上特征1和特征2具有相同的数值规模,而右边的训练集上,特征1的值则比特征2要小得多。(注:因为特征1的值较小,所以θ1需要更大的变化来影响成本函数,这就是为什么碗形会沿着θ1轴拉长。)

图5

正如你所见,左图的梯度下降算法直接走向最小值,可以快速到达。而在右图中,先是沿着与全局最小值方向近乎垂直的方向前进,接下来是一段几乎平坦的长长的山谷。最终还是会抵达最小值,但是这需要花费大量的时间。

应用梯度下降时,需要保证所有特征值的大小比例都差不多(比如使用Scikit-Learn的StandardScaler类),否则收敛的时间会长很多。这充分说明了特征提取方法对于梯度下降的性能有直接的影响。

这张图也说明,训练模型也就是搜寻使成本函数(在训练集上)最小化的参数组合。这是模型参数空间层面上的搜索:模型的参数越多,这个空间的维度就越多,搜索就越难。在一个三百维的空间里就比在一个三维空间里要棘手得多。幸运的是,线性回归模型的成本函数是凸函数,针就躺在碗底。

标签: #梯度下降及其优化算法实验报告