Error(误差)

        首先我们要明确的是,很多时候,我们几乎不可能训练出能完全拟合问题的模型,原因是我们无法获得所有可能的数据来作为训练集,所以我们的模型与真实模型之间总是会有一定的差距。

        如何对我们的模型性能评估呢?我们上一章已经知道了使用测试集来评估模型,但这种方法只能明确其泛化性能的强弱,除了通过实验估计其泛化性能,人们往往还希望了解它“为什么”具有这样的性能“ ,偏差方差分解”(bias-variance decomposition)是解释机器学习算法泛化性能的一种重要工具。

        我们通常认为,Error = Bias(偏差) + Variance(方差) + Noise(噪声) 接下来我们对Bias、Variance和noise详细解读。

  • Bias

       偏差的作用是,度量算法的期望预测与真实结果的偏离程度,也就是偏差能够刻画算法本身的拟合能力;通常情况下,我们降低偏差的操作就是用更复杂的函数,考虑更细致的参数,但如果bias降得太低,往往会同时伴随过拟合的问题出现。

  • Variance

        方差的作用是,度量同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;通常情况下,一个模型的方差越小,就意味着这个模型的泛化性能越好,而一个泛化性能好的模型正是我们需要的。而我们降低方差的方法,则正好与bias的相反,我们希望模型简单一点,这样泛化性能才会好。所以如果我们过度追求varience的小,难免会出现欠拟合的问题。

        所以我们可以看出,降低误差的过程中难以避免bias和variance的平衡问题,我们当然希望bias和varience都很小,但很明显我们降低一个,另一个很大概率就会回升。我们称之为偏差-方差窘境(bias-variance dilemma)。

        

  • Noise

        噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,也就是反映了任务本身的难度。偏差方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

  • 问题的解决

        由于上面分析到的原因,我们直接使用训练集训练模型,然后使用测试集来测试,得到的结果很可能在真实的数据集上不那么work。这里我们提出两种新的方法来验证究竟哪个模型是我们最需要的。一是交叉验证法,我们把训练集中的数据拿出一部分用来作为验证集,剩下的作为训练集跑出几个模型,然后在验证集上找到表现最好的,再把验证集和训练集合并成训练集训练一下表现最好的模型。最后得到的模型就是我们要的。(就算此时模型表现得不是很好也不推荐回头再调了);二是N折交叉验证,这里我们会把训练集分为N份,然后每份都要做一次验证集,剩下的做训练集,这样每个模型都会跑N次,最后每个模型的表现取平均值,选取效果最好的那个。

        

Gradient Descent(梯度下降)

        首先我们了解一下什么是梯度下降。

        梯度下降法的作用,就是用来求损失函数的一个极小值。为什么说是一个极小值而不是最小值,这是由于梯度下降算法本身的特点决定的。 如果我们直观的去理解,梯度下降算法工作的过程就像是一个球从高点滚落到最低点,这个球每次都要向周围试探,找到向下的方向,然后朝着这个方向前进一定的步长,然后再试探,再前进,直到降落到无论朝着哪个方向都要增加,就停止了。很明显,如果小球的初始位置不够好,很容易陷入一个局部最优的解。

        以上是对梯度下降算法的感性认识。

        其实梯度下降算法本质是一种一阶迭代优化算法,用于寻找可微函数的局部最小值。 其思想是在当前点函数的梯度(或近似梯度)的相反方向上重复步骤,因为这是最速下降的方向。 相反,在梯度方向上步进将导致该函数的局部最大值; 这个过程被称为梯度上升。而我们在机器学习领域中,常用这种算法来使损失函数降到最小,从而得到我们想要的模型。

        下面是关于梯度下降法的改进和注意事项。

  • 学习率的调整

        学习率是指梯度下降的过程中,我们每一次迭代走的步长。这个步长的设置不能太大,也不宜太小。如果学习率太大,很可能会出现梯度反向上升或者无法取到极小值的情况;如果学习率太小,就会需要迭代很多次,浪费时间浪费资源。所以一个合适的正确率十分重要,下面给出不同学习率的迭代过程图。

        

        为了解决学习率不合适的问题,我们提出一种自适应学习率的算法。很明显我们希望在一开始学习率可以大点,在快接近极值点的时候学习率可以小点,所以我们让学习率随着迭代次数的增加而逐渐减小。

        除此之外还有Adagrad算法,同样的,我们需要动态调整学习率,对于Adagrad算法来说,设置全局学习率之后,每次使全局学习率逐参数的除以历史梯度平方和的平方根,使得每个参数的学习率不同

  • 随机梯度下降(SGD)

        在上文中的梯度下降算法中,每次更新都需要遍历所有数据,当数据量太大或者一次无法获取全部数据时,这种方法并不可行。而随机梯度下降则只通过一个随机选取的数据来获取“梯度”,以此对模型进行更新。

        如果接受模型精度不那么高,那么由于SGD前期迭代较快,导致前期一段时间内比常规梯度下降算法下降得多,我们可以选择SGD;但若是追求高精度,由于SGD算法在目标函数强凸的情况下依旧无法做到线性收敛,所以当执行的时候足够长的时候SGD的精度会被梯度下降算法赶超。所以不同的需求,选择不同的算法。

  • 特征缩放(Feature Scalling)

        特征缩放又叫叫做标准化,标准化的东西是数据特征的范围。在梯度下降法中,当有多个特征向量的时候,如果其中一个变化范围比较大,则该特征向量的参数可能会变化范围很大,从而导致梯度下降过程的收敛速度变慢。

        特征缩放的方法有很多:例如Min-Max Scaling,就是将数据压缩至0~1之间,是当有新数据加入时, 可能导致和 发生变化, 所以这种算法对数据非常敏感;还有z值归一化:将数值缩放到0附近,且数据的分布变为均值为0,标准差为1的标准正态分布等方法。

最后附上李沐老师的文章。

用随机梯度下降来优化人生

    (PS:法考工作实在太麻烦了,早知道就不参加监考了,没法带电脑,笔记做不了,连手机都不能带,视频都没法看了……主要是钱少,强烈要求提高法考监考人员待遇……)

参考资料

1.LeeML-Notes

2.如何理解随机梯度下降(stochastic gradient descent,SGD)?

3.机器学习中的 Bias(偏差)、Error(误差)、Variance(方差)有什么区别和联系?

4.Gradient Descent——Wikipedia

5.李宏毅《机器学习 Video

6.如何理解“梯度下降法”?什么是“反向传播”?