一、Learning rate
1.Learning rate中的问题
-
如果learning rate刚刚好,就可以像下图中红色线段一样顺利地到达到loss的最小值
-
如果learning rate太小的话,像下图中的蓝色线段,虽然最后能够走到local minimal的地方,但是它可能会走得非常慢,以至于你无法接受
-
如果learning rate太大,像下图中的绿色线段,它的步伐太大了,它永远没有办法走到特别低的地方,可能永远在这个“山谷”的口上振荡而无法走下去
-
如果learning rate非常大,就会像下图中的黄色线段,一瞬间就飞出去了,结果会造成update参数以后,loss反而会越来越大(这一点在上次的demo中有体会到,当lr过大的时候,每次更新loss反而会变大)
2.最基本、简单的原则是:learning rate通常是随着参数的update越来越小
因为在起始点的时候,通常是离最低点是比较远的,这时候步伐就要跨大一点;
而经过几次update以后,会比较靠近目标,这时候就应该减小learning rate,让它能够收敛在最低点的地方
3.Adagrad
Adagrad算法update到后面速度会越来越慢 它是将不同参数的learning rate分开考虑的一种算法
化简:
但是Adagrad的表达式中,分子gt表示梯度越大需要步伐越大,分母却表示梯度越大 分母倒数步伐却变小了,两者似乎相互矛盾
在一些paper里是这样解释的:
Adagrad要考虑的是,这个gradient有多surprise,即反差有多大
gradient越大,离最低点越远这件事情在有多个参数的情况下是不一定成立的 -
w1和w2分别是loss function的两个参数,loss的值投影到该平面中以颜色深度表示大小,分别在w2和w1处垂直切一刀(这样就只有另一个参数的gradient会变化),对应的情况为右边的两条曲线,可以看出,比起a点,c点距离最低点更近,但是它的gradient却越大
-
它不仅跟一阶导数(gradient)有关,还跟二阶导师有关,因此我们可以通过这种方法重新比较上面的a和c点,就可以得到比较正确的答案
-
-
所以Adagrad想要做的事情就是,在不增加任何额外运算的前提下,想办法去估测二次微分的值
-
使用Firse derivation 来近似估计Second derivative
二、Stochastic Gradicent Descent(随机梯度下降)
随机梯度下降的方法可以让训练更快速,传统的gradient descent的思路是看完所有的样本点之后再构建loss function,然后去update参数;
而stochastic gradient descent的做法是,看到一个样本点就update一次,因此它的loss function不是所有样本点的error平方和,而是这个随机样本点的error平方
stochastic gradient descent与传统gradient descent的效果对比如下:
三、Feature Scaling(特征缩放)
特征缩放,当多个特征的分布范围很不一样时,最好将这些不同feature的范围缩放成一样
,假设x1的值都是很小的,比如1,2…;x2的值都是很大的,比如100,200…
此时去画出loss的error surface,如果对w1和w2都做一个同样的变动,那么w1的变化对y的影响是比较小的,而w2的变化对y的影响是比较大的
左边的error surface表示,w1对y的影响比较小,所以w1对loss是有比较小的偏微分的,因此在w1的方向上图像是比较平滑的;w2对y的影响比较大,所以w2对loss的影响比较大,因此在w2的方向上图像是比较sharp的
如果x1和x2的值,它们的scale是接近的,那么w1和w2对loss就会有差不多的影响力,loss的图像接近于圆形,那这样做对gradient descent有什么好处呢?
对于这种长椭圆形的error surface,如果不使用Adagrad之类的方法,是很难搞定它的,因为在像w1和w2这样不同的参数方向上,会需要不同的learning rate,用相同的lr很难达到最低点
如果有scale的话,loss在参数w1、w2平面上的投影就是一个正圆形,update参数会比较容易
而且gradient descent的每次update并不都是向着最低点走的,每次update的方向是顺着等高线的方向(梯度gradient下降的方向),而不是径直走向最低点;但是当经过对input的scale使loss的投影是一个正圆的话,不管在这个区域的哪一个点,它都会向着圆心走。因此feature scaling对参数update的效率是有帮助的
如何进行特征缩放
假设有R个example(上标i表示第i个样本点),,每一笔example,它里面都有一组feature(下标j表示该样本点的第j个特征)
对每一个demension i,都去算出它的平均值mean=,以及标准差standard deviation=
对第r个example的第i个component,减掉均值,除以标准差,即
Gradient Descent的限制:
其实当gradient的值接近于0的时候,我们就已经把它停下来了,但是微分值很小,不见得就是很接近local minima,也有可能像下图一样在一个高原的地方
所以,gradient descent的限制是:它在gradient即微分值接近于0的地方就会停下来,而这个地方不一定是global minima,它可能是local minima,可能是saddle point鞍点,甚至可能是一个loss很高的plateau平缓高原