Batch Normalization, 批标准化
和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法. 在之前 Normalization 的简介视频中我们一提到, 具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律.
神经网络shortcut 是什么
shortcut(或shortpath,中文“直连”或“捷径”)是CNN模型发展中出现的一种非常有效的结构。
研究人员发现,网络的深度对CNN的效果影响非常大,但是单纯地增加网络深度并不能简单地提高网络的效果,由于梯度发散,反而可能损害模型的效果。而shortcut的引入就是解决这个问题的妙招。
Resnet为例:在残差网络中,一个“捷径(shortcut)”或者说“跳跃连接(skip connection)”允许梯度直接反向传播到更浅的层。
简短的注意事项:
- 预处理: -mean/std zero-center就够了, PCA, 白化什么的都用不上. 我个人观点, 反正CNN能学习encoder, PCA用不用其实关系不大, 大不了网络里面自己学习出来一个.
- shuffle, shuffle, shuffle.
- 网络原理的理解最重要, CNN的conv这块, 你得明白sobel算子的边界检测.
- Dropout, Dropout, Dropout(不仅仅可以防止过拟合, 其实这相当于做人力成本最低的Ensemble, 当然, 训练起来会比没有Dropout的要慢一点, 同时网络参数你最好相应加一点, 对, 这会再慢一点).
- CNN更加适合训练回答是否的问题, 如果任务比较复杂, 考虑先用分类任务训练一个模型再finetune.
- 无脑用ReLU(CV领域).
- 无脑用3x3.
- 无脑用xavier.
- LRN一类的, 其实可以不用. 不行可以再拿来试试看.
- filter数量2^n.
- 多尺度的图片输入(或者网络内部利用多尺度下的结果) 有很好的提升效果.
- 第一层的filter, 数量不要太少. 否则根本学不出来(底层特征很重要).
- sgd adam 这些选择上, 看你个人选择. 一般对网络不是决定性的. 反正我无脑用sgd + momentum.
- batch normalization我一直没用, 虽然我知道这个很好, 我不用仅仅是因为我懒. 所以要鼓励使用batch normalization.
- 不要完全相信论文里面的东西. 结构什么的觉得可能有效果, 可以拿去试试.
- 你有95%概率不会使用超过40层的模型.
- shortcut的联接是有作用的.
- 暴力调参最可取, 毕竟, 自己的生命最重要. 你调完这个模型说不定过两天这模型就扔掉了.
- 机器, 机器, 机器.
- Google的inception论文, 结构要好好看看.