一、从SGDm到Adam
MNIST是每个炼丹术士都要尝试的一颗丹药,众所周知,同一种丹药可能有着不同的数十乃至数百种丹方。在尝试了入门中的入门级丹方:三层FC夹BN并取得了98%纯度的好结果后,我开始尝试二级丹方:CNN。所用丹方为两层CNN接Pooling,后接两层FC,ReLU激活。
在料想之中,FC都已经98纯了,CNN一出,那不是手到擒来?于是我手持SGDm款炼丹铲,向Model中加入了其他所需原料。但没想到的是,甫一测试,结果却没有显著变好(十轮还是在98%左右),而且还有一个奇怪的陡坡——这个陡坡从何而来?难道这就是传说中的动量蓄力冲出LocalMinima?
这么不雅观的陡坡我自然是很不喜欢,我当下就想到,可能是我的铲子出了问题,是不是换一把铲子结果会好上一些?于是我换上了如今正流行的网红大铲:Adam。可是没想到,结果令我大吃一惊。
你没有看错,用上Adam之后,不仅准确率低于50%(这个图我确定不是Loss假冒的),而且训练过程还一路走低。这个谜之走势我至今也没有搞懂是为什么。
二、增加轮次对实验结果有帮助吗?
Adam我自然是吓得不敢再用了,只得回到SGDm。为了达到我给自己设定的99%纯度的目标,我试图通过增加炼丹的时间来逼近这一目标,毕竟酒越酿越香,丹越炼越纯嘛。
结果依然是不尽如人意的。不仅没能达到期望的纯度,还引出了一个新问题:为什么会从这么低的纯度开始收敛?
三、修改模型会对结果有帮助吗?
这一炉丹药无疑是走到头了,我决定微调一下丹方:增加CNN层的核数。李宏毅老师曾经曰过,如果模型本身就有Model-Bias,那结果肯定是train不上去的。既然现在纯度卡在98%上不去,会不会是我的Model本身有问题?
增加了卷积核后,按理来说模型的解释力应该增强了,但是没有。到这里我已经对CNN是否能使得我的模型过99不抱希望,唯一的想法就是能让我的AC曲线看起来平滑一点。面对这个需求,我就又想起中国人民的老朋友(不是),BN层。于是在FC之间、CNN之间加了两个BN。效果可谓拔群。
既然BN层效果如此之好,那肯定要多用一点,于是我就给CNN的第二层也加上了BN,但意料之外的是,更多的BN并没有导致更平滑的曲线,虽然最终结果倒也没有变差,但是第一轮训练的结果确实是难看了一点。
四、重回Adam
无论如何,BN确实是使得图像变得非常平滑。那么这种平滑是否有助于帮助Adam得到一个不那么离谱的结果呢?
好吧,比起之前那个离谱中的离谱,这回的adam算是不那么离谱了吧。