视频P5-P8
P5
误差从哪里来?
Average error随着模型复杂增加呈指数上升趋势。更加复杂的模型并不能给测试集带来更好的效果,主要原因是bias和variance
Error = Bias + Variance
参考https://www.zhihu.com/question/27068705
https://datawhalechina.github.io/leeml-notes/#/chapter5/chapter5
Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。(稳定性+精确度)
bias和variance是不可兼得的。根本原因是,我们总是希望用有限的训练样本去估计无限的真实数据。因此,bias和variance之间的trade-off是机器学习的基本主题之一。
估测变量x的偏差和方差
N个样本:{x1,x2,……,xN}
计算平均值:μ=1/N(x1+x2+……+xN)
计算N个样本对μ的离散程度:Var[m]=σ2/N
为什么会有很多模型?
- 利用不同训练集训练得到的模型是不一样的
- model的复杂程度不同,一次的五次的是不一样的。比较简单的模型,方差是比较小的(就像设计每次射击都设置集中在一个比较小的区域捏),偏差大,简单的模型受到训练集的影响也比较小;比较复杂的模型,方差就较大,偏差小。
分析
- 欠拟合:模型没有得到很好的训练,偏差过大
- 过拟合:模型训练过渡,训练集上得到很小的error,但是测试集上的error较大,也就是模型的方差可能比较大
过拟合/欠拟合应对策略
欠拟合
重新设计model;考虑更复杂的模型。如果直接加入data训练,并不会更好。
过拟合
- 加入更多data
- 正则化处理
K折交叉验证
由于验证数据集不参与模型训练,当训练数据不够用 时,预留大量的验证数据过于奢侈。K折交叉验证中,把原始训练集分割成K个不重合的子数据集,然后做K次模型训练和验证。每一次只使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。最后,我们对这K次训练误差和验证误差分别求平均。
P6
梯度下降法
在回归问题的第三部中,需要解决下面的优化问题
这里的parameters指的是w或b等参数。
寻找一组参数使得loss function越小越好,可以用梯度下降解决。
- 随机初始化,先初始化parames的值,在计算初始点处,各个参数对loss function的偏微分,在按照如下的式子更新参数值。
其中,η 叫做Learning rates(学习速率)。lr是一个重要的超参数,lr太小,损失函数下降非常慢;lr太大,损失函数下降很快,但是很快就卡住不下降了。所以选择一个合适的学习率对于训练时间和效果都很重要。
因此可以通过一个自适应学习率来调整lr的大小。 - 通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率
- update好几次参数之后呢,比较靠近最低点了,此时减少学习率
- 比如
可以用作调整学习率
- 不同的参数需要不同的lr
Adagrad算法
每个参数的学习率都把它除上之前微分的均方根。
普通的梯度下降是:
Adagrad:
- σt :之前参数的所有微分的均方根,
对于每个参数都是不一样的。可化简为
Adagrad存在矛盾
看到上式,当梯度越大,步伐应越大,但是分母导致梯度越大时,步伐反而小,更新慢。
Adagrad适用于不增加过多运算的情况下模拟二次微分。
随机梯度下降法
普通梯度下降的Loss function:
随机梯度下降更快:
只需要选取一个样本x^n
此时不需要像之前那样对所有的数据进行处理,只需要计算某一个例子的损失函数Ln,就可以赶紧update 梯度。
常规梯度下降法走一步要处理到所有二十个例子,但随机算法此时已经走了二十步(每处理一个例子就更新)
特征缩放
经过缩放后(归一化)的梯度下降更为容易。方差都是1
梯度下降的局限性
容易陷入局部最优