【八股文-机器学习】梯度下降策略
综述
对于深度学习模型算法,一般采用梯度下降算法进行迭代优化。对于损失函数 ,其梯度代表着该函数上升速度最快方向,所以我们为了使损失函数最低,则对于所有参数
需要沿着其负方向进行优化,而每次优化的步长
叫做学习率,通常是一个很小的正数,所以t+1时的参数更新公式就可以写为
其中 代表函数梯度,也就是导数。
指数加权移动平均数
其中 代表瞬时值,所以当前的移动平均等于上一个时刻的移动平均和当前值的加权和。
通过等价替换,上式还可以化简为:
通过上式我们可以发现,对于每个瞬时值,其权重是不一样的,并且越靠近当前值,权重越高。因为 小于1.同时,通过这个式子,我们可以近似看作只计算了
个时刻内的数据,因为再往前,系数
会缩小很多可以忽略不计。
冲量梯度下降算法
其更新方程为:
从式子中可以看出,更新梯度时,还会考虑一个冲量的累计值 。而这个冲量就是之前梯度的指数加权移动平均值。
冲量梯度算法改进(NAG)
相比于冲量梯度下降更新算法,它的速度会更加快,核心就是将冲量变为指数加权移动平均值。
如下图所示,普通冲量梯度下降策略,方向加的是当前的梯度方向,但是优化后的加的是当前再往累计梯度更新方向上的梯度,所以降落的点会更靠近底部,收敛的会更快。
自适应梯度下降算法(AdaGrad)
说明一下,同或运算符代表两个相同则为真,在这里则表示(a+b)*(a+b) = a^2 + b^2,即我们只考虑相同对应参数的梯度的累乘操作,其结果代表同一个参数,梯度的累积。
其中,加了参数是防止除0,另外由于分母是逐渐增大的,所以衰减速率是逐渐变慢的。对于陡坡,梯度很大,对与坡底,由于其梯度接近0,梯度很小。所以我们希望在陡坡能以较大步长移动,在坡底以较小步长移动,所以自适应梯度下降策略可以很好的实现这一点,因为在陡坡的时候s很大,步长衰减的很快。这也导致一个问题,就是步长衰减太快,训练会很快就结束了。
自适应梯度下降优化(RMSprop)
核心是对s加入了一个超参来控制
此时,s就是梯度积的指数加权移动平均值,当超参取0.9时,s会很平稳,一定程度上将峰值的可能性缓和到一定区间,也可以避免学习率下降很快的问题(主要是避免突然一次梯度平方异常的高)
自适应冲量梯度算法(Adam)
它结合了冲量算法和自适应算法的优点,所以既有冲量项,又有自适应系数项。
对于冲量项:
对于自适应项:
同时为了防止初始时刻,对于加权和小于1的情况需要适当放大结果(因为两个项都是移动加权,都会存在这个问题)
综上,最后的参数更新公式为:
局部最优和鞍点
深度学习模型是一个庞大的非线性结构,这样其一般是非凸函,存在很多局部最优点(local optimum),一旦梯度下降算法跳进局部陷阱,可以想象其很难走出来。
首先,局部最优点起码在“局部”是最优的,可能效果不好,但仍然比鞍点处的参数效果好。其次,局部最优点的数量远远少于鞍点。因为在一个高维空间中,假设10000个方向,想要局部最优点,起码这100000个方向都要是向下的。这个条件达成的概率远小于鞍点达成的概率。所以,鞍点比局部最优更严重。
鞍点和局部最优点的梯度都为0,不同的是,这个点在某些方向上其实是最高点。
查看14道真题和解析

