主要参考以下教程
李宏毅2020春机器学习课程ML 2020 Spring (ntu.edu.tw)
一、误差从哪里来
错误来自于两个地方:第一是样本的bias(期望)差别,另一个是方差过大。本质都是因为样本于真正的总体之间的差距。
解决的办法主要是增加样本数量使其接近总体
选择较为简单的模型时候可以使得方差小,但是Bias偏差大,如左下。选择复杂模型时bias偏差小,但是方差大,如右上。
如果错误来自于方差很大,那么就是过拟合。如果错误来自于偏差很大,呢么就是欠拟合。如果model无法拟合训练数据则为欠拟合(更换模型)。而如果在训练集上表现不错,而在测试集表现较差,则为过拟合(增加数据,可以更改数据的方式增加数据;正则化)。
同时,为解决训练集上数据在测试上表现不好的问题,可以增加验证集(Validation set)的方式,或者将训练集分为多份,将其中一份视为测试集循环训练(如下图)。总而言之就是尽量不要动测试集。
二、梯度下降法 Gradient Descent
使用梯度下降的方式更新参数
1. Learning rate
要选择合适的学习率,不能太大也不能太小
学习率设置方法
- Vanilla梯度下降:学习率随时间下降,越接近最低点训练越慢$$\eta ^{t}=\frac{\eta }{\sqrt{t+1}}$$ $$g^{t}=\frac{\partial L(\theta ^{t})}{\partial \omega }$$ $$\omega^{t+1}\leftarrow \omega ^{t}-\eta ^{t}g^{t}$$
- Adagrad:学习率需要除以过去所有微分值的平方和开根号,这样的好处是使得梯度越大学习率越小$$\sigma ^{t}=\sqrt{\frac{1}{t+1}\sum_{i=0}^{t}\left ( g^{i} \right )^{2} }$$ $$\omega^{t+1}\leftarrow \omega ^{t}-\frac{\eta ^{t}}{\sigma ^{t}}g^{t}$$ 将值带入后得到最后结果$$\omega^{t+1}\leftarrow \omega ^{t}-\frac{\eta }{\sqrt{\sum_{i=0}^{t}\left ( g^{i} \right )^2}}g^{t}$$
2. 随机梯度下降(SGD)
每看到一个数据就更新一次参数,而不是等计算全部的数据再更新,可以使得速度较快,但是不足够稳定
3. 特征缩放(Feature Scaling)
对不同的特征进行归一化,避免不同特征的取值范围不同造成对损失函数的影响不同。
可以使用高斯标准化,使得每一个数据减去均值除以方差
4. 梯度下降的原理
利用泰勒二次展开式将损失函数进行展开
容易发现当下降方向刚好于梯度相反时,损失函数减少的最快。同时要忽略泰勒公式中的高次式,则需要learning rate足够小,也就是自变量变化足够小才可以。
5. 梯度下降的问题
梯度下降容易卡在局部最小值点以及梯度值接近于0的点。这时均不为最优点