由于神经网络可以随意设计,先验假设较少,参数多,超参数更多,那模型的自由度就非常高了,精心设计对于新手就变得较难了。

这里简单介绍一些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结构