参考:link.
Review
下图是将gradient descent在投影到二维坐标系中可视化的样子,图上的每一个点都是( θ 1 , θ 2 , l o s s ) (\theta_1,\theta_2,loss)(θ1 ,θ2 ,loss)在该平面的投影
红色箭头是指在( θ 1 , θ 2 )这点的梯度,梯度方向即箭头方向(从低处指向高处),梯度大小即箭头长度(表示在θ i 点处最陡的那条切线的导数大小,该方向也是梯度上升最快的方向)
蓝色曲线代表实际情况下参数θ1和θ2的更新过程图,每次更新沿着蓝色箭头方向loss会减小,蓝色箭头方向与红色箭头方向刚好相反,代表着梯度下降的方向
因此,在整个gradient descent的过程中,梯度不一定是递减的(红色箭头的长度可以长短不一),但是沿着梯度下降的方向,函数值loss一定是递减的,且当gradient=0时,loss下降到了局部最小值,总结:梯度下降法指的是函数值loss随梯度下降的方向减小
Tip1:Tuning your learning rates
Learning rate存在的问题
gradient descent过程中,影响结果的一个很关键的因素就是learning rate的大小
- 如果learning rate刚刚好,就可以像下图中红色线段一样顺利地到达到loss的最小值 如果learning
- rate太小的话,像下图中的蓝色线段,虽然最后能够走到local minimal的地方,但是它可能会走得非常慢,以至于你无法接受
- 如果learning rate太大,像下图中的绿色线段,它的步伐太大了,它永远没有办法走到特别低的地方,可能永远在这个“山谷”的口上振荡而无法走下去
- 如果learning rate非常大,就会像下图中的黄色线段,一瞬间就飞出去了,结果会造成update参数以后,loss反而会越来越大(这一点在上次的demo中有体会到,当lr过大的时候,每次更新loss反而会变大)
当参数有很多个的时候(>3),其实我们很难做到将loss随每个参数的变化可视化出来(因为最多只能可视化出三维的图像,也就只能可视化三维参数),但是我们可以把update的次数作为唯一的一个参数,将loss随着update的增加而变化的趋势给可视化出来(上图右半部分)
所以做gradient descent一个很重要的事情是,要把不同的learning rate下,loss随update次数的变化曲线给可视化出来,它可以提醒你该如何调整当前的learning rate的大小,直到出现稳定下降的曲线
Adaptive Learning Rates
需要一些自动调整learning rates的方法
最基本、最简单的大原则是:learning rate通常是随着参数的update越来越小的
因为在起始点的时候,通常是离最低点是比较远的,这时候步伐就要跨大一点;而经过几次update以后,会比较靠近目标,这时候就应该减小learning rate,让它能够收敛在最低点的地方
Adagrad
Divide the learning rate of each parameter by the root mean square of its previous derivatives
Adagrad就是将不同参数的learning rate分开考虑的一种算法(adagrad算法update到后面速度会越来越慢,当然这只是adaptive算法中最简单的一种)
Adagrad的contradiction解释
Stochastic Gradicent Descent
Feature Scaling