下面是处理偏差和方差问题最简单的形式:
如果具有较高的可避免偏差,那么加大模型的规模(例如通过添加层/神经元数量来增加神经网络的大小)。
如果具有较高的方差,那么向训练集增加数据。
如果你可以加大神经网络的规模且无限制地增加训练集数据,那么在很多学习问题上都可以做的很好。
实际上,加大网络的模型规模终将导致你遇到计算力问题,因为训练大的模型很慢。另外你也有可能会耗尽获取更多训练数据的能力。(即使在网上,也只有有限数量的猫图片)
不同的模型架构(例如不同的神经网络架构)对于你的问题将有不同的偏差/方差值。近期不少深度学习研究已经开发出很多新的模型架构。所以,如果你在使用神经网络,学术文献可能会是一个很好的灵感来源,在 Github 上也有很多较好的开源实现。但尝试新架构的结果要比简单地加大模型规模和添加数据的形式更难以预测。
加大模型的规模通常可以减少偏差,但也可能会增加方差和过拟合的风险。然而这种过拟合问题通常只在你不使用正则化技术的时候出现。如果你的算法含有了一个精心设计的正则化方法,通常可以安全地加大模型的规模,而不会增加过拟合风险。
假设你正在应用深度学习,使用了 L2 正则化和 dropout 技术,并且设置了在开发集上表现最好的正则化参数。如果你加大模型规模,算法的表现往往会保持不变或提升;它不太可能明显地变差。避免使用更大模型的唯一原因就是这将使得计算代价变大。
如果你的学习算法存在着很高的可避免偏差,你可能会尝试下面的技术:
加大模型规模(例如神经元/层的数量):这项技术能够使算法更好地拟合训练集,从而减少偏差。当你发现这样做会增大方差时,加入正则化,这可以抵消方差的增加。
根据误差分析结果修改输入特征:假设误差分析的结果鼓励你创建额外的特征,从而帮助算法消除某个特定类别的误差。(我们会在接下来的章节深入讨论这个话题。)这些新的特征对处理偏差和方差都有所帮助。理论上,添加更多的特征将增大方差;然而当你发现这种情况时,加入正则化,这可以抵消方差的增加。
减少或者去除正则化(L2 正则化,L1 正则化,dropout):这将减少可避免偏差,但会增大方差。
修改模型架构(比如神经网络架构)使之更适用于你的问题:这项技术将同时影响偏差和方差。
有一种方法并不能奏效:
添加更多的训练数据:这项技术可以帮助解决方差问题,但它对于偏差通常没有明显的影响。
如果具有较高的可避免偏差,那么加大模型的规模(例如通过添加层/神经元数量来增加神经网络的大小)。
如果具有较高的方差,那么向训练集增加数据。
如果你可以加大神经网络的规模且无限制地增加训练集数据,那么在很多学习问题上都可以做的很好。
实际上,加大网络的模型规模终将导致你遇到计算力问题,因为训练大的模型很慢。另外你也有可能会耗尽获取更多训练数据的能力。(即使在网上,也只有有限数量的猫图片)
不同的模型架构(例如不同的神经网络架构)对于你的问题将有不同的偏差/方差值。近期不少深度学习研究已经开发出很多新的模型架构。所以,如果你在使用神经网络,学术文献可能会是一个很好的灵感来源,在 Github 上也有很多较好的开源实现。但尝试新架构的结果要比简单地加大模型规模和添加数据的形式更难以预测。
加大模型的规模通常可以减少偏差,但也可能会增加方差和过拟合的风险。然而这种过拟合问题通常只在你不使用正则化技术的时候出现。如果你的算法含有了一个精心设计的正则化方法,通常可以安全地加大模型的规模,而不会增加过拟合风险。
假设你正在应用深度学习,使用了 L2 正则化和 dropout 技术,并且设置了在开发集上表现最好的正则化参数。如果你加大模型规模,算法的表现往往会保持不变或提升;它不太可能明显地变差。避免使用更大模型的唯一原因就是这将使得计算代价变大。
如果你的学习算法存在着很高的可避免偏差,你可能会尝试下面的技术:
加大模型规模(例如神经元/层的数量):这项技术能够使算法更好地拟合训练集,从而减少偏差。当你发现这样做会增大方差时,加入正则化,这可以抵消方差的增加。
根据误差分析结果修改输入特征:假设误差分析的结果鼓励你创建额外的特征,从而帮助算法消除某个特定类别的误差。(我们会在接下来的章节深入讨论这个话题。)这些新的特征对处理偏差和方差都有所帮助。理论上,添加更多的特征将增大方差;然而当你发现这种情况时,加入正则化,这可以抵消方差的增加。
减少或者去除正则化(L2 正则化,L1 正则化,dropout):这将减少可避免偏差,但会增大方差。
修改模型架构(比如神经网络架构)使之更适用于你的问题:这项技术将同时影响偏差和方差。
有一种方法并不能奏效:
添加更多的训练数据:这项技术可以帮助解决方差问题,但它对于偏差通常没有明显的影响。