一种新的正则方法flooding,相比以往直接考虑控制模型复杂度,flooding考虑的是控制训练loss的水平
为什么读
文献及相关介绍的链接:
至于为什么读这篇文章?🤭,因为看起来简单啊,一行代码写出来的,思想上一定是很有意思的,事实也是如此。只是这个有关训练loss和训练error的讨论让我有点迷糊,放在这里,若干纪元以后再来探访~
从标题到文章主题
标题点明了文章讨论的两个概念:训练loss和训练error之间的关系
为什么会注意到这两个概念呢?从我个人的观点,前者有一点泛化的意思在里面,因为loss大了可能欠拟合,小了可能过拟合,合适的loss水平确实对各种训练方法有点影响(个人经验);后者其实也有一点泛化的味道,但我更喜欢说它代表拟合,理由差不多,error太小了,说明模型把训练数据给背下来了,是大概率过拟合的,毕竟极其强大的网络可以拟合数据,甚至“记住”所有训练数据,达到训练error=0,但这显然有点问题,大概率会过拟合。
文章里有一句是别人工作的结论,我觉得不太对劲:
“learning until zero training error is meaningful to achieve a lower generalization error”
对此我保留意见,文章略过了这一点,直接开始思考🤔…
这就引出了文章标题的思考:
Q: Do we need zero training loss after achieving zero training error?
从传统正则到针对loss水平
一般我们会用正则控制模型复杂度(但不是完全控制loss,只是加了一项),但它的出发点不是避免0训练loss,所以它其实也控制不了训练loss的水平,即往往最后的训练loss也会有偏大或偏小的现象,达不到合适的水平。
另外,一般来说训练error $\rightarrow$ 0是可以的,但是当前者达到时,训练loss还需要继续下降么,还需要继续训练模型么?
even if we add fooding, we can still memorize the training data
flooding剑指当训练error->0时,训练loss维持在比较小的值而不是0
假设之前希望训练error->0的那句结论的说法是对的,那么控制训练loss的水平确实有点意思,但还要确定这个水平是多少
Flooding正则
针对这一点,提出flooding的方法,如上图很直观啦,这个洪水的水面高度就相当于最终训练loss的水平,称为fooding level。思想很简单,就是控制训练loss的水平,当loss较高就正常SGD,loss偏低就反向进行梯度上升。思路简单的结果是实现极其简单,如下式,变量flood就是新的loss,变量b就是fooding level。一行代码即可且可应用于一切以往基于loss梯度下降的方法。
这样就有个麻烦,这个fooding level到底是多少?我们把训练loss控制到这个level为什么能有效?
In Appendix F, we show that during this period of random walk, there is an increase in fatness of the loss function
附录F并没有提及理论上为何有效,似乎在附录A有定理证明
附录F的图看了几遍也没有看明白,可能需要阅读flatness的相关知识吧
附录A的证明很清晰,表明这种操作是有效的√
那么现在只差fooding level到底是多少这个问题了。文章里表示这个可以手动设置,也可以设置验证(文中的实验就是这么做的),或者当作超参数进行超参优化;个人以为还是最后的舒服。
注
这篇文章有个有意思的知识点表一,是许多正则方法的比较,以后需要的话可以看看 √