Optimization 哪种优化算法最适合于小型数据集上的CONVNET,以避免过度拟合?

Optimization 哪种优化算法最适合于小型数据集上的CONVNET,以避免过度拟合?,optimization,tensorflow,deep-learning,conv-neural-network,Optimization,Tensorflow,Deep Learning,Conv Neural Network,我正在使用ConvNet对从灰度红外图像序列中裁剪的对象进行分类(二进制分类)。网络输入具有大小(WxHxN),其中N>3 数据集很小,只有1-1.5K样本用于训练。因此,我使用的是一个相对较小的ConvNet(32,32,64,64128256256+FC 512),在最后3层中有0.5个脱落;使用tflearn和/或keras与TensorFlow一起实施。我还使用数据增强(随机模糊、水平翻转、随机旋转) 当我使用带有learning_rate=1e-4的Adam optimizer时,它在

我正在使用ConvNet对从灰度红外图像序列中裁剪的对象进行分类(二进制分类)。网络输入具有大小(WxHxN),其中N>3

数据集很小,只有1-1.5K样本用于训练。因此,我使用的是一个相对较小的ConvNet(32,32,64,64128256256+FC 512),在最后3层中有0.5个脱落;使用tflearn和/或keras与TensorFlow一起实施。我还使用数据增强(随机模糊、水平翻转、随机旋转)

当我使用带有learning_rate=1e-4Adam optimizer时,它在几个时期内收敛到99%的训练准确率,损失非常小,但验证损失不断增加,准确率波动很大。最终,测试集的性能大约为50-60%,这几乎与随机猜测(二进制分类)相同

我尝试了L2权重正则化、批量归一化;不同的批量大小、较小的网络等。但是,它不起作用

现在,我正在探索各种优化算法。似乎,使用
tflearn.optimizers.Nesterov(学习速率=2e-3,动量=0.9,lr\u衰减=0.90,衰减步长=100)
,学习要慢得多,但更平滑;验证误差不会像以前那样增加,精度不会发生剧烈变化(大多数情况下,缓慢增加或保持不变)。准确度更高,50个纪元的准确率约为60%,100个纪元的准确率约为70%


现在的问题是:优化算法(及其参数)的选择似乎会影响过度拟合。然而,我还没有看到这方面的任何工作。是否有任何工作/论文/博客详细阐述了这个问题?你有什么经验可以分享吗?哪些优化算法适合于小数据集,并且更擅长处理过度拟合?

新论文:通过从Adam切换到SGD来提高泛化性能人们似乎开始认识到这个问题,并且正在开发解决方案。