[关闭]
@coolwyj 2015-10-25T22:12:26.000000Z 字数 2737 阅读 12683

DeepLearning 笔记(一) ImageNet Classification with Deep Convolutional Neural Networks

DeepLearning 论文



1. ReLU

ReLU(Rectified Linear Units)其实就是普通神经网络中的激活函数,其形式如:f(x)=max(x,0),它是不饱和线性函数。
最原始的神经网络输出函数是sigmoid:f(x)=(1+ex)1 或者 tanh:f(x)=tanh(x),它们是饱和线性函数。

究竟啥是饱和非线性函数呢?可以分成两部分来理解。饱和其实就是看函数自变量x很大的时候其函数值如果变动很小,那么就称其为饱和。而非线性就无需多讲。

这些函数的缺点之一是计算所耗时间比较长,在CIFAR-10数据集上,训练到25%的错误率,ReLU的速度是tanh的6倍。还有一个缺点是对于该层输入的数据最好是要做归一化,否则当逐层累积后输入数据可能会变得很大,导致激励函数的输出值变动不大,非线性的性质被削弱。而ReLU则没有这种问题。

2. Multi-GPU

官方新版caffe已经支持多GPU训练,但是还没有试过,也没有读过源码,所以这部分先略过。

3. LRN

LRN(Local Response Normalization)层是用来做归一化的。此片论文的作者发现,虽然ReLU层对于很大的输入x,仍然可以有效的学习,但是他们发现即使这样,对数据进行归一化对于学习来说还是有帮助的。PS:最近读的一篇paper说这个层没什么卵用,具体在以后的笔记中介绍啦。

aix,y表示在(x,y)这个位置上,以kernel i来计算后,经过的激励后的输出。经过LRN层后,作为下一层输入的数据bix,y变为:

bix,y=aix,y/(k+αj=max(0,in/2)min(N1,i+n/2)(aix,y)2)β

其中N是该层的feature map总数,n表示取该feature map为中间的左右各n/2个feature map来求均值。论文中使用的参数是:k=2,n=5,α=104,β=0.75。每一层ReLU后面都接一层LRN。

论文中提到使用LRN来训练他们的网络,在imageNet上top-1和top-5的错误率分别下降了1.4%,1.2%

4. Overlapping Pooling

Pooling层一般用于降维,将一个kxk的区域内取平均或取最大值,作为这一个小区域内的特征,传递到下一层。传统的Pooling层是不重叠的,而本论文提出使Pooling层重叠可以降低错误率,而且对防止过拟合有一定的效果。

个人理解,使Pooling层重叠,可以减少信息的损失,所以错误率会下降。但是对防止过拟合的效果,文章也只是说slightly,目测意义不大。

5. Reducing Overfiltering

过拟合一直是DeepLearning的大敌,它会导致训练集的error rate非常小,而测试集的error rate大部分时候很大。克服过拟合本文提到了两个方法:

<1>数据扩增

简而言之就是对现有数据进行变换,使得总数据量得到提升。可以对图片进行集合变换,如平移,水平翻转等,论文中把原始图像缩放到256X256,然后分别取四个corner以及中间的224X224大小的patch,以及其flip后的patch来训练。论文还提到了对图片的RGB通道进行强度改变。即在训练集的RGB通道上做PCA,但是不降维,只取特征向量和特征值,对训练集上每张图片的每个像素Ix,y=[IRx,y,IGx,y,IBx,y]T加上值:

[p1,p2,p3][α1λ1,α2λ2,α3λ3]T

其中piλi分别表示特征向量和特征值,α表示高斯随机变量(均值为0,方差为0.1).

<2>Dropout

dropout层一般用在FC层之后,每次forward的时候FC之前层的每个神经元会以一定的概率不参与forward,而backward的时候这些单元也不参与。这种方式使得网络强制以部分神经元来表示当前的图片,很大限度上降低过拟合。但是这样一定程度上会延长训练的时间,因为随机性不只是会打乱过拟合的过程,也会打乱正常拟合的过程。
在test的时候,不使用dropout,使所有神经元参与运算,给他们的结果乘以0.5来作为输出值。

其实,最后不乘0.5也是可以的。如果在分类的时候使用的不是原来的softmax,那么只要特征之间可以区分就行了,乘不同的系数只是放大或者缩小了这种差别。

6. weight decay

vi+1=0.9vi0.0005lrωilrLω|ωiDi

ωi+1=ωi+vi+1

其中,ω是最后的结果,v是增量,lr是学习率,0.0005是weight decay的值,0.9是momentum的系数。
weight decay一般是作为正则化项来避免过拟合的,但是论文说这里的weight decay可以减少训练错误率,还没有想到是为啥,欢迎大神指点。。。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注