@coolwyj
2015-10-25T22:12:26.000000Z
字数 2737
阅读 12683
DeepLearning
论文
ReLU(Rectified Linear Units)其实就是普通神经网络中的激活函数,其形式如:
最原始的神经网络输出函数是sigmoid:
究竟啥是饱和非线性函数呢?可以分成两部分来理解。饱和其实就是看函数自变量x很大的时候其函数值如果变动很小,那么就称其为饱和。而非线性就无需多讲。
这些函数的缺点之一是计算所耗时间比较长,在CIFAR-10数据集上,训练到25%的错误率,ReLU的速度是tanh的6倍。还有一个缺点是对于该层输入的数据最好是要做归一化,否则当逐层累积后输入数据可能会变得很大,导致激励函数的输出值变动不大,非线性的性质被削弱。而ReLU则没有这种问题。
官方新版caffe已经支持多GPU训练,但是还没有试过,也没有读过源码,所以这部分先略过。
LRN(Local Response Normalization)层是用来做归一化的。此片论文的作者发现,虽然ReLU层对于很大的输入x,仍然可以有效的学习,但是他们发现即使这样,对数据进行归一化对于学习来说还是有帮助的。PS:最近读的一篇paper说这个层没什么卵用,具体在以后的笔记中介绍啦。
令
论文中提到使用LRN来训练他们的网络,在imageNet上top-1和top-5的错误率分别下降了1.4%,1.2%
Pooling层一般用于降维,将一个kxk的区域内取平均或取最大值,作为这一个小区域内的特征,传递到下一层。传统的Pooling层是不重叠的,而本论文提出使Pooling层重叠可以降低错误率,而且对防止过拟合有一定的效果。
个人理解,使Pooling层重叠,可以减少信息的损失,所以错误率会下降。但是对防止过拟合的效果,文章也只是说slightly,目测意义不大。
过拟合一直是DeepLearning的大敌,它会导致训练集的error rate非常小,而测试集的error rate大部分时候很大。克服过拟合本文提到了两个方法:
简而言之就是对现有数据进行变换,使得总数据量得到提升。可以对图片进行集合变换,如平移,水平翻转等,论文中把原始图像缩放到256X256,然后分别取四个corner以及中间的224X224大小的patch,以及其flip后的patch来训练。论文还提到了对图片的RGB通道进行强度改变。即在训练集的RGB通道上做PCA,但是不降维,只取特征向量和特征值,对训练集上每张图片的每个像素
dropout层一般用在FC层之后,每次forward的时候FC之前层的每个神经元会以一定的概率不参与forward,而backward的时候这些单元也不参与。这种方式使得网络强制以部分神经元来表示当前的图片,很大限度上降低过拟合。但是这样一定程度上会延长训练的时间,因为随机性不只是会打乱过拟合的过程,也会打乱正常拟合的过程。
在test的时候,不使用dropout,使所有神经元参与运算,给他们的结果乘以0.5来作为输出值。
其实,最后不乘0.5也是可以的。如果在分类的时候使用的不是原来的softmax,那么只要特征之间可以区分就行了,乘不同的系数只是放大或者缩小了这种差别。
其中,
weight decay一般是作为正则化项来避免过拟合的,但是论文说这里的weight decay可以减少训练错误率,还没有想到是为啥,欢迎大神指点。。。