引入:
training set 的accuracy 和 validation or test set的accuracy 的关系.
training set 和 test set的样本是完全不相交的. training set是用来训练我们的网络model的. test set 是作为实际的生产数据来检验模型的, 它是对模型在实际场景中的检验. 两个数据集没有交集, training acc 和test acc 是没有关系的. 但是根据他们, 可以说明一些问题, 或者说它们两者是衡量模型好坏的指标.
在利用pre-trained网络进行fine-tuning或训练新的网络的时候, 总会遇到这样一种情况: test acc稳定之后, training acc还在不断增长, 最终training acc几乎达到了100%. 那么问题来了, 这样的现象正常吗? training acc 是否能增长到100%? 我们用acc来衡量model, 拥有什么样acc的网络才算是好model.
training acc 是否能达到100%
答案是肯定的, 但是也是conditional的. training acc 能达到100% 说明了model的体量/复杂度/结构/神经元的数量已经远超处理这些训练数据的能力, in other words, model是overqualified, 处理这些训练数据让他们能够和各自的label对应已经绰绰有余. 这种情况下, 我们可以说model已经记住了所有的训练样本, that is to say, 对于所有训练数据, model都有唯一的weights和它对应, 因此所有样本都能与相应的label对应起来.
什么样的train acc和test acc model才算是好的model.
直接公布答案, training acc 和test acc 两者在较高的水平, 保持较小的差距. 这样的网络才是好model. training acc 较低, 说明网络underfit, 分类能力太差. train acc 领先test acc 太多, 说明模型overfit, 网络generalization泛化能力太差, 模型复杂度太高, 投入生产环境就会挂掉.
什么时候停止训练
acc 低位保持稳定不变的时候,可以考虑关闭网络调整结构,重新训练. 对于fine-tuning pre-trained 网络而言, 往往是test acc, 百分之80左右, training acc一路飙涨知道接近100%. 这种情况下, 建议在test acc 达到高位稳定之后, 就停止训练. 因为对于这种情况, 说明模型的复杂度是比较高的, 如果继续训练下去一直要求loss继续下降的话, 模型会走向记住所有训练数据(每个样本定制的权值)的极端.