Task3:误差与梯度下降

误差期望值的分解

example:打靶
靶心(红色)是测试样本的真实值,测试样本的y(橙色)是真实值加上噪音,特定模型重复多次训练会得到多个具体的模型,每一个具体模型对测试样本进行一次预测,就在靶上打出一个预测值(蓝色)。所有预测值的平均就是预测值的期望(浅蓝色),浅蓝色的圆圈表示预测值的离散程度,即预测值的方差。

误差期望值=噪音的方差+模型预测值的方差+预测值相对真实值的偏差的平方

bias vs variance

选择相对较好的模型的顺序:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大

在测试集上误差随着模型的复杂呈指数上升趋势,更复杂的模型并不能给测试集带来更好的效果,而这些error主要有两个来源,一个是bias和variance

error反映整个模型的准确度bias反映模型在样本上的输出与真实值之间的误差(模型本身的准确度),variance反映模型每一次输出结果与模型输出期望值之间的误差(模型的稳定性

bias与variance两者不可兼得,降低模型的bias,就会提高模型的variance,尽量保证模型在训练样本上的准确度,这样就可以减少模型的bias,但是这样的模型泛化能力太弱,造成过拟合,使得在真实数据上的表现不好,增加模型的不确定性。

简单模型的偏差较大所造成的误差叫做欠拟合复杂模型的偏差较小,但方差过大造成的误差叫做过拟合

  • 欠拟合:bias比较大,需要考虑更复杂的模型
  • 过拟合:variance比较大,需要更多的数据 [一般我们会希望样本数量越多越好,随着样本数量增加,训练误差会逐渐增加,测试误差会逐渐降低] 或者 regularization正则化(曲线越平滑越好)正则化相当于对模型参数的个数施加惩罚,压缩了参数的范围,限制了模型的复杂度,从而有助于缓解模型过拟合问题

K-Fold 交叉验证

如何在偏差和方差之间进行权衡???

用validation set选择模型,看validation set上的performance,再用所有的数据训练最后选择的那个model

将训练样本分成k份,每次取其中一份作为验证集,另外 k-1 份作训练集。这样进行 k 次训练得到 k 个模型。这 k 个模型对各自的验证集进行预测,得到 k 个评估值(可以是误差、准确率,或按某种规则计算的得分等等)。

gradient descent


1. 调整学习速率
注:只能在参数是一维或者二维的时候进行可视化,高维情况无法进行可视化

  • 自适应学习率
    通常刚开始,初始点距离最低点比较远,所以使用大一点的学习率,当update几次参数后,比较靠近最低点了,此时可以减少学习率
    但是不同的参数需要不同的学习率,不能统一用一个值
  • Adagrad算法:每个参数的学习率都让它除以之前微分的均方根

problem微分越大的时候,步伐应该越大,但是下面分母会随着梯度越大的时候,步伐会越小。【在多参数下,结论不一定成立】

因此最好的步伐应该是:一次微分/二次微分

其中的分母部分就是反映二次微分的大小,因为可以只计算一次微分,用一次微分的结果模拟二次微分。(因为在计算微分时,可能会增加很多的时间消耗)
2. 随机梯度下降法
随机梯度下降法速度更快
之前的梯度下降是看完所有的数据之后,update一次参数,是比较稳定的;如果用随时梯度下降时,不用对所有的数据进行处理,只需要计算某些数据的损失函数,就可以update梯度
3. 特征缩放(标准化)
x1的范围比x2小很多,所以当w1和w2做相同的变化时,w1对y的变化影响是比较小的,x2对y的变化影响是比较大的。w1对损失函数的影响比较小,w1对损失函数有比较小的微分,所以w1方向上是比较平滑的。x2对y的影响比较大,所以x2对损失函数的影响比较大,在x2方向有比较尖的峡谷。

你可能感兴趣的:(Task3:误差与梯度下降)