过去的一周是“人工智障,深度算命”的一周

2018-10-23  本文已影响276人  月牙眼的楼下小黑

写在前面: 刚刚向老板大大提交了一份实验报告。把里面的调参经验拎出来备份一下。


作 者: 月牙眼的楼下小黑
联 系: zhanglf_tmac (Wechat)
声 明: 欢迎转载本文中的图片或文字,请说明出处


1. The influence of batch_size

要复现一篇 未开源 的论文, 文中 未给出 batchsize的大小, 我以 128 为界,进行尝试,图1batch_size = 32, 64 , 128, 200, 250train_val loss 曲线:

图1 : batch_size 对网络训练的影响

不同大小的 batch_size对网络 train_lossval_loss 的最终收敛值影响甚微。但是收敛速度差异较大。注意,虽然 batchsize 越小,收敛位置越靠前,但是在实际工程应用中,batch_size 越小,在一个 epoch 中前传反传的次数越多,实际收敛时间反而延长。从实验结果看,batch_size越大越好 , 但是 batch_size 越大,占用 gpu资源越多,并且 论文中多次提到 gpu资源受限。所以综合考虑收敛质量、收敛速度、实验条件, batch_size 选为 128.

2. A STUPID MISTAKE

介绍一下后文中多次提到的两个术语:

画了一个示意图,见图(a): 离线数据增强,(b)在线数据增强。

(a)off_line data agumentation training 示意图(本人绘制) (b)on_line data agumentation training示意图(本人绘制)

这个星期我花了四整天的时间解决碰到的一个 “难题”:

一个简单的 离线数据增强(翻转)后,网络提前收敛在一个高 loss 的点, 如图 2 所示:

图2: 我捣鼓了四天的 “问题”: 一个简单的离线数据增强(翻转)后,网络收敛在高loss点(可以形象地称之为高原点)

我凭 直觉 分析了一下几个原因,跑了 30 多个实验:

到了最后一步时,我已经准备动身去中区寻找师兄的帮助了。 但是我把数据增强函数设置为空函数体后再跑了一次实验, 发现结果依然不变!!! 我仔细查看代码,终于发现自己犯了一个愚蠢的错误:优化器选错了,我不知什么时候把原先的adam换成了SGD, 因为 adam 会动态调整 learning rate, 所以我一直没有去调整这个learning rate这个超参。事实上造成这种 假收敛的原因是: 网络在一个局部最小点来回震荡, 策略: 猛降 learning rate

3. Data augmentation

比较了多种数据增强方式对减轻网络过拟合的效果:


图4(a)复现结果:训练集Loss 曲线 图4(b): 复现结果:验证集 loss 曲线

4. Analysis

涉及 idea, 略。

上一篇 下一篇

猜你喜欢

热点阅读