这篇文章看了不下5遍,但每次都有新发现,于是还是整理一下吧。
架构
ReLU
一句话概括:不用simgoid和tanh作为激活函数,而用ReLU作为激活函数的原因是:加速收敛。
因为sigmoid和tanh都是饱和(saturating)的。何为饱和?个人理解是把这两者的函数曲线和导数曲线plot出来就知道了:他们的导数都是倒过来的碗状,也就是,越接近目标,对应的导数越小。而ReLu的导数对于大于0的部分恒为1。于是ReLU确实可以在BP的时候能够将梯度很好地传到较前面的网络。
Local Responce Normalization
一句话概括:本质上,这个层也是为了防止激活函数的饱和的。
个人理解原理是通过正则化让激活函数的输入靠近“碗”的中间,从而获得比较大的导数值。
所以从功能上说,跟ReLU是重复的。
不过作者说,从试验结果看,LRN操作可以提高网络的泛化能力,将错误率降低了大约1个百分点。
Overlapping Pooling
一句话概括,从试验结果看,作者认为Overlapping之后,能够减少网络的过拟合。
Overall Architecture
一句话概括,5个卷积层+3个全连接层+1个softmax层。在第1,2,5个卷积层后加了一个LRN和Max Pooling。
Reducing Overfitting
Data Augmentation
用了两种方法:
- 随机crop。训练时候,对于256*256的图片进行随机crop到224*224,然后允许水平翻转,那么相当与将样本倍增到((256-224)^2)*2=2048。测试时候,对左上、右上、左下、右下、中间做了5次crop,然后翻转,共10个crop,之后对结果求平均。作者做,不做随机crop,大网络基本都过拟合(under substantial overfitting)。
- 对RGB空间做PCA,然后对主成分做一个(0, 0.1)的高斯扰动。结果让错误率又下降了百分一。
dropout
一句话概括,在第1,2个全连接层后面加入了dropout后,能够防止过拟合。不加,也是会under substantial overfitting的。
Detail of learning
- batch: 128
- momenttum: 0.9
- weight decay: 0.0005
- init the weights: Guassian(0, 0.01)
- init the bias: constant 1 or constant 0
- learning rate: 0.01, divide by 10 while valid error rate stopped improving
Result
主要看ILSVRC-2012的结果。
文中模型top1 40.7%,top5 18.2%
五个模型平均出来后是top1 38.1%和top5 16.4%
Discussion
- 模型没有用到unsupervised pre-training
- 如果删去任何一个卷积层,top1 error会升高2%左右