我目前在思考何时停止训练深度自编码器,尤其是在它似乎陷入局部最小值时该怎么办。
是否必须将训练标准(例如均方误差,MSE)降低到例如0.000001,并强制其完美重建输入,还是可以根据所使用的数据集保留一些差异(例如,当MSE大约为0.5时停止训练)?
我知道更好的重建可能会带来更好的分类结果,但有没有一个“经验法则”来决定何时停止?我特别感兴趣的是那些没有启发式特征的规则,比如“如果在x次迭代中MSE没有变小”。
回答:
我认为无法为此得出一个普遍的经验法则,因为生成神经网络/机器学习是一个非常特定于问题的过程,而且通常情况下,没有免费的午餐。如何决定何时终止的“良好”训练误差取决于各种特定于问题的因素,例如数据中的噪声。仅根据训练集来评估你的神经网络,唯一的目标是 minimization MSE,很多时候会导致过拟合。仅以训练误差作为反馈,你可能会将你的神经网络调整到训练数据中的噪声(因此导致过拟合)。避免这种情况的一种方法是保留验证。你不是只训练你的神经网络到给定数据,而是将你的数据集分为训练集、验证集(和测试集)。
- 训练集:用于训练和反馈给神经网络,随着训练时间的延长,误差自然会持续下降(至少下降到特定问题“OK”的MSE值)。
- 验证集:根据这些来评估你的神经网络,但不要将反馈给你的神经网络/遗传算法。
除了评估训练集的反馈外,你还应该评估验证集的表现,但不要将反馈给你的神经网络(NN)。
跟踪训练集和验证集的MSE下降情况;通常训练误差会稳步下降,而验证误差在某一点会达到最小值,并随着进一步的训练开始增加。当然,你在运行时无法知道这个最小值在哪里,所以通常会存储验证误差最低的神经网络,并且在这一误差似乎在一段时间内没有更新后(即,在误差回顾中:我们已经通过了验证误差的最小值),算法就会终止。
有关详细信息,请参见以下文章 神经网络:训练-验证-测试停止,以及讨论两种不同验证方法的这个SE统计线程。
对于深度自编码器/深度学习的训练/验证,特别是关于过拟合的问题,我发现文章 Dropout:防止神经网络过拟合的一种简单方法(*) 非常有价值。
(*) 作者:H. Srivistava, G. Hinton, A. Krizhevsky, I. Sutskever, R. Salakhutdinov,多伦多大学。