以下内容学习来自台湾大学李弘毅的机器学习讲解,以及其他博客的理解。
1.梯度
梯度就是函数变化增加最快的地方,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。
沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。
一个比较简单的梯度下降的理解,来自博客https://blog.youkuaiyun.com/honghu110/article/details/55211228
2.梯度下降之adagrad
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。
上面是gradient descent的推导,
下面是梯度下降的时候我们的学习率,我们需要改变学习率,下面是adagrad学习率梯度下降。
3.梯度下降之stochastic gradient descent
make the training faster.这种方法可以使得训练速度变快
4.梯度下降之feature scaling(特征缩放)
为什么要特征缩放?特征缩放是用来标准化数据特征的范围。
特征缩放是针对多特征情况的。当有多个特征向量的时候,如果其中一个变化范围比较大,根据上次所说的多特征梯度下降法算法可以知道,该特征向量的参数可能会变化范围很大,从而主导整个梯度下降的过程,使得整个收敛轨迹变得复杂,让收敛的时间更长。
所以特征缩放是为了加快梯度下降的收敛速度!!!
像下面这种x1的变化范围就远大于x2,需要特征缩放。
5.梯度下降之局限性limitation
可能得到局部最小值local minima,也可能直接在导数为0 的地方就停止了,更甚至在导数接近0 的地方就停止了。
6.梯度下降算法调优
(1)算法的步长选择。
步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。
(2)算法参数的初始值选择。
由于有局部最优解的风险,需要多次用不同初始值运行算法。
(3)归一化数据(特征缩放)
由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以归一化。
7.梯度下降算法有哪些?(BGD,SGD,MBGD)
(1) 批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法最常用的形式。
具体做法也就是在更新参数时使用所有的样本来进行更新,这里求梯度的时候就用了所有m个样本的梯度数据。
缺点是速度慢。
(2) 随机梯度下降法(Stochastic Gradient Descent)
随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的样本的数据,而是仅仅选取一个样本来求梯度。
优点是training速度一个样本,以此很快;缺点是可能不是最优解。而且收敛速度不是很快。
4.3 小批量梯度下降法(Mini-batch Gradient Descent)
小批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,也就是对于m个样本,我们采用x个样子来迭代。
例如:我们把一个10000个样本的数据拿来,把它分为10份(也就是10个batch),每一份1000个样本(batch-size),每一个样本有一个loss,每个Li(一个batch的loss)=1000个loss之和。而每一个batch之后对Li求偏导数,然后update一次参数。直到所有batch都用到之后就完成一次epoch了。最后update了epoch次参数
再来做一个对比:
上图,如果batch=1,那么50000个数据,一个batch更新一次参数,用了所有数据之后更新了50000次参数,完成一个epoch;花费166S
如果batch=10,那么5000个数据,10个数据更新一次参数,用了所有数据之后更新了5000次参数,完成一个epoch;花费17S
也就是说batch=10的时候,每次用到所有数据完成一次epoch只会更新5000个参数,但是花费17S,当我们完成10个epoch的时候,更新了50000次参数,花费170S,但是这种方法明显比较稳定!因为它对整体数据处理了10次。