我们都知道梯度下降法是求解无约束最优化问题的最常用方法,可是为什么梯度下降可以用来求解最优化问题呢?梯度到底是什么?这里假设我们要解决一个最小值问题 minf(x) ,当我们所研究的对象并不是一个凸函数或者即使是一个凸函数,但是计算量会非常的大,此时我们就会想能否有一种迭代的方法,当我们随机的选取一个点,我们以该点位为起点,然后沿着某个方向能够以最快的速度走到最小值点呢?基于这样的思路,我们首先来介绍到底什么是梯度。
梯度
在百度百科上给出的梯度公式为:
假设
v
表示任意的一个单位向量,那么方向导数(表示函数
梯度下降法
根据对上面梯度的介绍,我们知道梯度方向是函数值变化最大的方向,因此对于问题
- 随机选取初始节点 X0=(x10,x20,...,xk0) ;
- 求出函数 f(X) 在 Xi 点的梯度 ∇f=δfδXi ;
- 如果函数误差
E(f(Xi),f(Xi−1))>ϵ
,则依据梯度更新
xi=xi−α∇f(xi)重复2,3步直到函数误差小于阈值 ϵ 。其中 α 为步长,用于控制每次下降的幅度,通常其值是逐渐递减的。
批量梯度下降与随机梯度下降
对于线性回归我们知道其模型为 fΘ(X)=XTΘ ,那么其损失函数 J(Θ)=12m∑mi=1(fΘ(xi)−yi)2 ,故 δfδΘ=1m∑mi=1(fΘ(xi)−yi)xi
- 批量梯度下降
对于批量梯度下降,其对 Θ 的更新策略为θt+1j=θtj−1m∑i=1m(fθj(xij)−yi)xij我们可以看到对于批量梯度下降,其每一次更新都要考虑所有的样本,当样本量很大的时候,这种更新的速度是非常慢的,那么我们就想能否每来一个样本我们就更新一次而不是等所有样本都到来才更新? - 随机梯度下降
对于梯度下降,其更新策略不再是每次更新都考虑所有的样本,而是对每个样本,都对参数进行一次更新,其更新策略如下:θt+1j=θtj−fθj(xij)−yi)xij在这种情况下,我们可能只需要其中的一部分样本就可以让算法收敛到极值点。