由于神经网络可以随意设计,先验假设较少,参数多,超参数更多,那模型的自由度就非常高了,精心设计对于新手就变得较难了。
这里简单介绍一些CNN的trick
CNN的使用
神经网络是特征学习方法,其能力取决隐层,更多的连接意味着参数爆炸的增长,模型复杂直接导致很多问题。比如严重过拟合,过高的计算复杂度。
CNN其优越的性能十分值得使用,参数数量只和卷积核大小,数量有关,保证隐含节点数量(与卷积步长相关)的同时,大量降低了参数的数量!当然CNN更多用于图像,其他任务靠你自己抽象啦,多多尝试!
这里简单介绍一些CNN的trick
- pooling或卷积尺寸和步长不一样,增加数据多样性
- data augumentation,避免过拟合,提高泛化,加噪声扰动
- weight regularization
- SGD使用decay的训练方法
- 最后使用pooling(avgpooling)代替全连接,减少参数量
- maxpooling代替avgpooling,避免avgpooling带来的模糊化效果
- 2个3x3代替一个5x5等,减少参数,增加非线性映射,使CNN对特征学习能力强
- 3x3,2x2窗口
- 预训练方法等
- 数据预处理后(PCA,ZCA)喂给模型
- 输出结果窗口ensemble
- 中间节点作为辅助输出节点,相当于模型融合,同时增加反向传播的梯度信号,提供了额外的正则化
- 1x1卷积,夸通道组织信息,提高网络表达,可对输出降维,低成本,性价比高,增加非线性映射,符合Hebbian原理
- NIN增加网络对不同尺度的适应性,类似Multi-Scale思想
- Factorization into small convolution,7x7用1x7和7x1代替,节约参数,增加非线性映射
- BN减少Internal Covariance Shift问题,提高学习速度,减少过拟合,可以取消dropout,增大学习率,减轻正则,减少光学畸变的数据增强
- 模型遇到退化问题考虑shortcut结构,增加深度
- 等等
RNN使用
小的细节和其他很像,简单说两句个人感觉的其他方面吧,其实RNN也是shortcut结构
- 一般用LSTM结构防止BPTT的梯度消失,GRU拥有更少的参数,可以优先考虑
- 预处理细节,padding,序列长度设定,罕见词语处理等
- 一般语言模型的数据量一定要非常大
- Gradient Clipping
- Seq2Seq结构考虑attention,前提数据量大
- 序列模型考率性能优良的CNN+gate结构
- 一般生成模型可以参考GAN,VAE,产生随机变量
- RL的框架结合
- 数据量少考虑简单的MLP
- 预测采用层级结构降低训练复杂度
- 设计采样方法,增加模型收敛速度
- 增加多级shortcut结构