深度学习tips总结

来源:互联网 发布:爱丽丝疯狂回归mac版 编辑:程序博客网 时间:2024/05/17 02:40

注:本文是在阅读新智元的文章后总结,文中不少语句参考了原文作者,请知晓。


1、shuffle:在框架允许的前提下,每个epoch要shuffle一次;

2、扩展数据集:小数据集容易使得模型过拟合,但过分扩展会使得大都相同的数据,需采取一定的方法,避免出现相同的样本(尝试中);

3、在非常小的子数据集上训练进行过拟合,再在整个数据集上训练:以确定网络可以收敛;

4、始终是用dropout将过拟合的几率最小化:当神经元节点超过256时,就要使用dropout,Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning [Gal Yarin & Zoubin Ghahramani,2015].

5、MAX pooling会更快,避免使用LRN pooling

6、避免使用sigmoid/tanh:代价昂贵,容易饱和,网络越深,越容易停止反向传播;而更简单有效的ReLU和PreLU能够促进稀疏性,其反向传播也更加鲁棒,Deep Sparse Rectifier Neural Networks

7、在max pooling之前不要使用ReLU和PreLU,在保持计算之后再使用;

8、不要使用ReLU:虽然它们是很好的非线性函数,但是在微调模型时会阻碍反向传播,在初始化阶段被卡住,无法得到任何微调效果;可以使用PreLU以及一个很小的乘数(通常是0.1),收敛更快;

9、经常使用批标准化(Batch Normalization):可以允许更快的收敛以及更小的数据集,节省时间以及资源,Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift [Sergey Ioffe & Christian Szegedy,2015]。

10、相对于减去平均值,更倾向于将数据压缩到[-1, +1]:针对训练和部署的技巧,而非提升性能;

11、小型化模型,并尝试 ensemble以方便用户及服务,并提升准确度

12、尽可能使用 xavier初始化:可在较大的全连接层上使用,避免在CNN层使用,An Explanation of Xavier Initialization(by Andy Jones)

13、如果输入数据有空间参数,可以尝试端到端CNNSqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size [Forrest N. Iandola et. al. 2016];

14、修改模型,只要可能就使用 1x1 的 CNN 层,它的位置对提高性能很有帮助。

15、假如你要利用模型或你自己的层来制作模板,记得把所有东西参数化,否则你得重建所有二进制文件。

16、了解正在着手的任务及使用的结构,莫要盲目地复制模型;


参考资料:

1、 Ian Goodfellow , Yoshua Bengio 和 Aaron Courville 合著的经典教材《深度学习》(数学理论丰富)

2、邓力和俞栋合著的《深度学习:方法及应用》(关于历史与介绍)

3、Timothy Masters 写的 Deep Belief Nets in C++ and CUDA C, Vol. 1: Restricted Boltzmann Machines and Supervised Feedforward Networks(实现算法)

0 0