ImageNet Classification with Deep Convolutional Neural Networks 阅读笔记
(决定以后每读一篇论文,都将笔记记录于博客上。)
这篇发表于NIPS2012的文章,是Hinton与其学生为了回应别人对于deep learning的质疑而将deep learning用于ImageNet(图像识别目前最大的数据库)上,最终取得了非常惊人的结果,其结果相对原来的state of the art好了非常多(前5选错误率由25%降低为17%)。
ImageNet目前共包含大约22000类,15兆左右的标定图像。其中,目前最常用的LSVRC-2010 contest包含1000类,1.2兆图像。本文的结果在这个测试集上得到了前五选错误率17%的结果。
下图给出了整个deep net的结构:
共包含8层,其中前5层是cnn,后面3层是全连接的网络,其中最后一层是softmax组成的输出决策层(输出节点数等于类别数目1000)。
具体的实现上,这篇文章在结构上面的一些改进在于:
1,采用ReLU来代替传统的tanh引入非线性,;
2,采用2块显卡来进行并行计算,减少了更多显卡需要host传递数据的时间消耗,在结构上,部分分布在不同显卡上面的前后层节点之间无连接,从而提高了训练速度;
3,同层相邻节点的响应进行局部归一化提高了识别率(top5错误率降低1.2%);
4,有交叠的pooling(top5错误率降低0.3%);
此外,为了降低over-fitting,文章采用了两种方式:
1,数据加强:
对训练数据进行左右对称以及平移变换,将训练数据增加为原来的2048倍;对像素进行PCA变换构造新样本(此机制使得top5错误率降低%1);
2,Dropout:
优化算法:
采用mini-batch SGD算法来优化,每个batch128个样本,momentum = 0.9, weight decay = 0.0005
随机初始化权重和bias(具体随机参数请参见论文)
论文链接:
http://books.nips.cc/papers/files/nips25/NIPS2012_0534.pdf
源码地址:
http://code.google.com/p/cuda-convnet/