梯度下降法

假设函数

训练数据集的假设函数(hypothesis function),又称模型函数

代价函数

评估假设函数精确度、拟合度的代价函数(cost function)

 

代价函数的核心功能:代价函数的函数值用来评估假设函数的精确度、拟合度。精确度、拟合度的比较对象是我们提供的训练数据集。

如果有一组(θ0,θ1,……,θn)使得代价函数取得最小值,则将这组(θ_0,θ1,……,θn)对应的假设函数对于我们提供的训练数据集有(最)很好的精确度,拟合度。即如果我们给一个待验证的特征值x,则通过h(x)计算出来的输出数据y=h(x),和实际的数据y最接近。
 

梯度下降算法的目的

找到一组(θ0, θ1,……,θn),使得代价函数的值最小,从而得到拟合度很好,精确度很高的假设函数 。

下面以简单线性回归为例,来讲解梯度下降算法。

 

梯度下降算法的公式

梯度下降算法的核心思想讲解

学习速率α

1)每次梯度下降迭代得到的θ往往都是代价函数的局部最优解。如果α太大的话,会导致梯度下降算法错过局部的最优解,也可能无法收敛;

2)如果α太小的话,会导致梯度下降算法的计算效率很低,虽然最后可以得到最佳的(θ0,θ1),但是计算速度会很慢,训练时间会很长(收敛的时间变的很长)。

梯度下降的数学支撑

代价函数的最小值处的每个θ,一定满足每个θ的偏导数都等于0,所以才可以用迭代法求解每个θ。

每次梯度下降迭代得到的θ有什么性质

每次梯度下降迭代得到的θ往往都是代价函数的局部最优解,因为代价函数在θ处有多个方向可选择去移动得到新的θ,而偏导数方向移动得到的新的θ才是当前θ的最优解移动目标点。

梯度下降算法的数学公式的推导过程

各个梯度下降的比较

全量梯度下降法  Batch gradient descent

全量梯度下降法每次学习都使用整个训练集,因此每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点,凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点,缺陷就是学习时间太长,消耗大量内存。

随机梯度下降法(Stochastic Gradient Descent)

为了回答这个问题,我们先做一个形象的比喻。想象一下,你正在下山,视力很好,能够看到自己的坡度,能够沿着坡向下走,最终达到山底。如果被蒙上了眼睛,只能凭着踩石头的感觉判断当前的坡度,精确性大大下降,有时候你所认为的坡其实并不是坡,走上一段时间发现并没有下山,或者曲曲折折走了很多弯路踩下山。

SGD一轮迭代只用一条随机选取的数据,尽管SGD的迭代次数比BGD大很多,但一次学习时间非常快。

SGD的缺点在于每次更新可能并不会按照正确的方向进行,参数更新具有高方差,从而导致损失函数剧烈波动。不过,如果目标函数有盆地区域,SGD会使优化的方向从当前的局部极小值点跳到另一个更好的局部极小值点,这样对于非凸函数,可能最终收敛于一个较好的局部极值点,甚至全局极值点。

缺点是,出现损失函数波动,如下图所示,并且无法判断是否收敛。

小批量梯度下降法(Mini-Batch Gradient Descent)

SGD相比BGD收敛速度快,然而,它也的缺点,那就是收敛时浮动,不稳定,在最优解附近波动,难以判断是否已经收敛。这时折中的算法小批量梯度下降法,MBGD就产生了,道理很简单,SGD太极端,一次一条,为何不多几条?MBGD就是用一次迭代多条数据的方法。

并且如果Batch Size选择合理,不仅收敛速度比SGD更快、更稳定,而且在最优解附近的跳动也不会很大,甚至得到比Batch Gradient Descent 更好的解。这样就综合了SGD和Batch Gradient Descent 的优点,同时弱化了缺点。总之,Mini-Batch比SGD和Batch Gradient Descent都好。

 

Momentum梯度下降法(动量方法)

SGD、BSGD两种改进方法都存在不同程度的震荡,如何避免震荡?或者说震荡是怎么产生的?震荡,从可视图表现来看,就是频繁更改方向,所以,如果能够把之前下降的方向考量进来,那么将会减少振荡。

上边第二个图是带动量的梯度下降法。

下面推导动量下降法。

在普通的梯度下降法W -= V中,每次W的更新量V为V = dW * λ;

当使用冲量时,V考虑为本次的梯度下降量与部分上次更新量的矢量和,即-dW*λ与上次x的更新量V乘以一个介于[0, 1]的系数momemtum的和,即:

V = dW * λ+ V*momemtum。

当本次梯度下降方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。

当本次梯度下降方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

下面两个图,第一图是没有动量的梯度下降法,第二图是有动量的梯度下降法,很明显减少了震荡。

既减少震荡,又大方向不变(本次梯度下降方向),从而保证了效率和正确的收敛。

 

AdaGrad方法

动量的方法是本质是利用惯性,惯性的获得是基于历史的,我们除了从过去的步伐获得一股子向前冲的劲,还能获得什么呢? 我们还能获得对周围环境的感知,依靠几次的迈步能判断出一些信息,比如这个方向是坑坑哇哇的,那个方向可能很平坦。

比如在文本处理训练词嵌入模型的参数时,有的词或词组频繁出现,有的词或词组极少出现。数据的稀疏性导致了参数梯度的稀疏性,不频繁出现的词的参数的梯度在大多数情况下为0,导致这些参数被更新的频率很低。在应用中,我们希望频率低的参数可以拥有较大的更新步幅,而更新频率高的参数的步幅可以减少

AdaGrad方法采用“历史梯度平方和”来衡量不同参数梯度的稀疏性,取值越小说明越小稀疏,具体的更新公式表示为:

Adam方法

adam方法将惯性保持和环境感知两个优点集一身。 一方面,Adam记录梯度的一阶矩,这体现了惯性保持;另一方面,Adam还记录了二阶矩,即过往梯度平方与当前梯度平方的平均,这类似AdaGrad方法,体现了环境的感知能力,为不同参数产生自适应的学习速率。一阶矩和二阶矩采用类似于滑动窗口求平均的思想进行融合,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值