1. 从梯度下降开始
这两天学习了机器学习课程的第二课,课程内容是围绕梯度下降展开的,下面就我的学习内容做一个总结。
梯度下降 (Gradient Decent) 是优化算法的一种,其思想是让损失函数沿着梯度的方向下降, 以最快的速度取到最小值。为啥是沿梯度的方向?因为梯度 (gradient) 就是函数变化最快的方向,贴一个梯度的定义: 梯度-维基百科,想深入了解的同学可以自取。
2. 批梯度下降 (Batch Gradient Decent)
批梯度下降是梯度下降最基本的形式,下面尝试在Linear Regression算法中使用批梯度下降来优化他的损失函数。
作为新手,在理解算法的时候,很多时候难住我们的不是逻辑,而是各种千奇百怪的符号,所以我先把公式中需要用到的符号列在这里,以消除符号的干扰。
符号解释:
-
h(x) 学习算法的假设函数,本例中的学习算法是Linear Regression
-
xi 数据集的第 i 个特征
-
θi 假设函数对第 i 个特征的系数
-
n 数据集的特征数
-
m 数据集的样本数目
-
(x(i),y(i)) 第 i 条训练样本
图片可能更加直观,请原谅我拙劣的画技,原始图片取自课程课件:

Linear Regression 的假设函数为:
h(x)=i=0∑nθixi
其损失函数:
J(θ)=21i=1∑m(hθ(x(i))−y(i))2
在给定训练集的情况下,(x,y) 均已知,损失函数只与 θ有关,记为 J(θ) , 前面的系数 21 是为了求导方便。
现在的目标是使损失函数最小,即求 minθJ(θ) 。终于轮到主角出场了,使用梯度下降法来求解 minθJ(θ) 。下降的过程需要起点和终点,期望的终点自然是最小值,那么起点在哪里呢?这里给 θ 一个初始值,whatever,就假设它为0(这里是一个向量)吧,然后不断更新 θ 的值使 J(θ) 变小。如何更新?当然是沿梯度的方向更新啦:
θi:=θi−α∂θi∂J(θ)
更新的写法跟课程中的相同,:=符号表示赋值, α 是学习率/步长/训练速度。
下面推导在只有一组训练样本的情况下偏导数:
∂θi∂J(θ)=∂θi∂21(hθ(x)−y)2
=(hθ(x)−y)∙∂θi∂(θ0x0+θ1x1+...+θixi+...θnxn−y)
=(hθ(x)−y)∙xi
当有 m 组训练样本时,情况如下:
∂θi∂J(θ)=∂θi∂21j=1∑m(hθ(x(j))−y(j))2
=j=1∑m∂θi∂21(hθ(x(j))−y(j))2
=j=1∑m(hθ(x(j))−y(j))∙xi(j)
将其带入 θi:=θi−α∂θi∂J(θ) 可得计算方式。从上式可以看出,在每次更新 θ 时,都需要计算 ∑j=1m,意味着需要遍历所有的训练样本,这将带来庞大的计算量,在样本数量巨大的情况下会更为明显,如何避免这个问题?这个时候SGD出现了。
3. 随机梯度下降 (Stochastic Gradient Decent)
SGD是为了避免BGD在样本数量大时带来的巨大计算量。巨大的计算量来自每次迭代对整个训练集的遍历,从这里出发,SGD每次更新只选择一个样本:
for j=1 to m {
θi:=θi−α(hθ(x(j))−y(j))∙xi(j)(for all i )
}
俗话说有得必有失,因为每次只选取一个样本,SGD下降的过程可能没有BGD那样一帆风顺,在“下山”的路上它可能会这里走走那里瞧瞧,anyway,我们关心的其实只是它能够带我们到达终点而且它够快。也因为每次只选取一个样本,它可能会失去对数据模型的精准刻画,这就导致在遇到噪声时,它可能会把我们带跑偏,即陷入局部最优解。
刚刚是谁说的有得必有失,MBGD表示,我全都要。
4. 小批量随机梯度下降 (Mini-batch Stochastic Gradient Decent)
MBGD吸收了BGD和SGD的优点,SGD选择的是一个样本,而MBGD选择将样本划分为多个小块,将每个小块看作是一个样本,这样即保证了对数据模型的精准刻画,也不会太慢。
以上是对梯度下降算法的理论知识的总结。
正在学习机器学习吗?欢迎关注公号「MachineLearning学习之路」,在学习之路上多一个战友,扫描下方二维码带走我:
