吴恩达《机器学习训练秘籍》读书笔记(第20~27章)

第四部分 偏差和方差

陈曦,朱小栋

第二十章 两个大的错误源:偏差和方差

假设训练集上的误差率(error rate)是15%并且验证集上的误差率为16%

那么此时偏差(bias)就是15%

方差(variance)就是16%-15%=1%

针对如何减少偏差和方差,有不同的方法。一般来说,会选择更迫切需要减少的一方(比较难两者同时减少)作出相应的改变。

第二十一章 偏差和方差的例子

以下举四个例子来说明可能出现的四种情况:

1.假设你的算法表现为:训练集误差率=1%   测试集误差率=11%

那么根据上一章的定义可知,偏差为1%并且方差为10%。明显是高方差的,换句话说,过拟合了训练集。

2.假设:训练集误差率=15%   测试集误差率=16%

偏差为15%并且方差1%。此时是高偏差,说明算法欠拟合了。

3.假设:训练集误差率=15%   测试集误差率=30%

此时偏差15%并且方差15%即同时高偏差和高方差。

4.假设:训练集误差率=0.5%   测试集误差率=1%

此时是很理想的结果了,低偏差和低方差。

第二十二章 与最佳误差率相比

我们这里所定义的最佳误差率主要是与人所能做到的最好的误差率水平进行类比,即当人能百分之百做到没有误差率时,这里的“理想”误差率便近乎为0%。那么当人在分辨判断时,也会出现一定的错误,比如出现14%的失误。那么这里的“最佳”误差率水平就差不多是14%

1.举一个例子:当“最佳”误差率水平为14%的情况下,

训练集误差率=15%   验证集误差率=30%

此时,并没有太多的空间去改善偏差(15%-14%),所以此时我们可以着重改善方差。

2.给出如下定义:

最佳误差率Optimal error rate(“unaviodable bias”)为14%(如果它是负数,那么说明过拟合了训练集)

可避免的偏差Avoidable bias为1%

Bias = Optimal error rate(“unavoidable bias”) + Avoidable bias

方差Variance为15%(理论上说,只要训练集足够大,方差都是能够避免的)

3.另一个例子,同样最佳误差率为14%时:

训练集误差率=15%   验证集误差率=16%

可以看出此时,可避免的偏差仅为1%并且方差也是1%那么并没有很大的改进空间,该算法已经做得很好了。

4.我们称这个最佳误差率为贝叶斯误差率/贝叶斯率(Bayes error rate/Bayes rate)它可以为我们指导下一步。

5.如何估计最佳误差率,可以通过计算人标注的正确率。

第二十三章 解决偏差和方差

  • 高的可避免的偏差:增加神经网络的隐藏层和神经元。(同时注意到它会增加计算的时间和成本。)它可能会加大方差并且有过拟合训练集的风险,对于过拟合的问题要实现利用L2正则化的方法去降低风险。
  • 高的方差:一般来说就是加大训练集的数据。
  • 可以尝试改变另一种模型的结构,但结果会比较难以预测。

第二十四章 偏差vs.方差的权衡(tradeoff)

  1. 一般情况下,加大你的模型可以降低偏差但增加了方差。或者是,应用正则化会加大偏差但能够减少方差。
  2. 那么你可以加大神经网络的规模,并且调适正则化的方法来减少偏差同时也不会增加方差。另外,加大训练集一般能够减少方差而不影响偏差。
  3. 同时能够减少方差和偏差的模型结构比较难找到。

第二十五章 减少可避免的偏差的技巧

  • 增加模型的规模
  • 通过误差分析来修正输入的特征(通过误差分析找到新的特征,虽然理论上说更多的特征会增加方差。但你可以用正则化的方法减少方差的增加)
  • 减少或废弃正则化(L2 regularization, L1 regularization, dropout)
  • 修正你的模型结构(它对偏差和方差同时起作用)
  • (这个是没有作用的)增加更多的训练集数据

第二十六章 在训练集上的误差分析

方法和前面提过的被审视集差不多,一般是在有高偏差(没有很好的拟合训练集)的情况下使用。这里举一个语音识别的例子,在训练集上的误差分析如下表:

可以看出,背景嘈杂声的不良影响很大,因此有必要再次检查是否有人转录了这些录音(导致一些相同的录音被放入算法中训练了)。

第二十七章 减少方差的技巧

  • 增加更多的训练集数据
  • 利用正则化方法(但会增加偏差)
  • 通过验证集的误差,设置更早的停止迭代的阈值(add early stopping:stop gradient descent early)。同样会增加偏差。

(对于以上两点需要进一步的理解和学习)

  • 特征选取:减少放入模型的特征的数量/类型。一般来说,只有在你的训练集比较小的时候,特征选择会很有用。而在现在的深度学习过程中,数据是很多的,那么特征选择并不起作用。我们偏向于把所有特征放进算法中并且让算法根据数据判断用哪些特征。
  • 减少模型的规模(用的时候必须非常小心!)如果你的目的不是减少计算的成本,那么还是用正则化方法吧!

重复上面说过的两点:

  • 通过误差分析来修正输入的特征(通过误差分析找到新的特征,虽然理论上说更多的特征会增加方差。但你可以用正则化的方法减少方差的增加)
  • 修正你的模型结构(它对偏差和方差同时起作用)