梯度下降学习总结(BGD ,SGD, MBGD)

1. 从梯度下降开始

这两天学习了机器学习课程的第二课,课程内容是围绕梯度下降展开的,下面就我的学习内容做一个总结。

  • 什么是梯度下降?

梯度下降 (Gradient Decent) 是优化算法的一种,其思想是让损失函数沿着梯度的方向下降, 以最快的速度取到最小值。为啥是沿梯度的方向?因为梯度 (gradient) 就是函数变化最快的方向,贴一个梯度的定义: 梯度-维基百科,想深入了解的同学可以自取。

2. 批梯度下降 (Batch Gradient Decent)

批梯度下降是梯度下降最基本的形式,下面尝试在Linear Regression算法中使用批梯度下降来优化他的损失函数。

作为新手,在理解算法的时候,很多时候难住我们的不是逻辑,而是各种千奇百怪的符号,所以我先把公式中需要用到的符号列在这里,以消除符号的干扰。

符号解释:

  • 学习算法的假设函数,本例中的学习算法是Linear Regression
  • 数据集的第 i 个特征
  • 假设函数对第 i 个特征的系数
  • 数据集的特征数
  • 数据集的样本数目
  • 第 i 条训练样本

图片可能更加直观,请原谅我拙劣的画技,原始图片取自课程课件:


在这里插入图片描述

Linear Regression 的假设函数为:

其损失函数:

在给定训练集的情况下, 均已知,损失函数只与 有关,记为 , 前面的系数 是为了求导方便。

现在的目标是使损失函数最小,即求 。终于轮到主角出场了,使用梯度下降法来求解 。下降的过程需要起点和终点,期望的终点自然是最小值,那么起点在哪里呢?这里给 一个初始值,whatever,就假设它为0(这里是一个向量)吧,然后不断更新 的值使 变小。如何更新?当然是沿梯度的方向更新啦:

更新的写法跟课程中的相同,符号表示赋值, 是学习率/步长/训练速度。

下面推导在只有一组训练样本的情况下偏导数:



有 m 组训练样本时,情况如下:



将其带入 可得计算方式。从上式可以看出,在每次更新 时,都需要计算 ,意味着需要遍历所有的训练样本,这将带来庞大的计算量,在样本数量巨大的情况下会更为明显,如何避免这个问题?这个时候SGD出现了。

3. 随机梯度下降 (Stochastic Gradient Decent)

SGD是为了避免BGD在样本数量大时带来的巨大计算量。巨大的计算量来自每次迭代对整个训练集的遍历,从这里出发,SGD每次更新只选择一个样本:

for j=1 to m {
( )
}

俗话说有得必有失,因为每次只选取一个样本,SGD下降的过程可能没有BGD那样一帆风顺,在“下山”的路上它可能会这里走走那里瞧瞧,anyway,我们关心的其实只是它能够带我们到达终点而且它够快。也因为每次只选取一个样本,它可能会失去对数据模型的精准刻画,这就导致在遇到噪声时,它可能会把我们带跑偏,即陷入局部最优解。

刚刚是谁说的有得必有失,MBGD表示,我全都要。

4. 小批量随机梯度下降 (Mini-batch Stochastic Gradient Decent)

MBGD吸收了BGD和SGD的优点,SGD选择的是一个样本,而MBGD选择将样本划分为多个小块,将每个小块看作是一个样本,这样即保证了对数据模型的精准刻画,也不会太慢。

以上是对梯度下降算法的理论知识的总结。

最后,求赞求关注,欢迎关注我的微信公众号[MachineLearning学习之路] ,深度学习 & CV 方向的童鞋不要错过!!

你可能感兴趣的:(梯度下降学习总结(BGD ,SGD, MBGD))