捡起好久没有写的博客,就在刚才我本科的同学还跟我说她期中考试会用到我写的东西,真的感觉很欣慰,写的东西能对其他人起到或大或小的帮助,一定会坚持下去的。最近的心情真的是很糟,为了转移下注意力,就加快点博客的更新速度吧。
之后的几篇博客会讨论下CNN在具体问题中的应用,同样会涉及到一些tricks。
这篇文章的内容是描述作者在ImageNet LSVRC-2010这个竞赛中,所达到the-state-of-art的工作。记得原来有在微博中看到过,现在世界上做图像最顶尖的那一批人都投身在ImageNet中。而且所给的数据又是非常的庞大,就拿本篇文章所使用的数据集来说,任务是需要将1,200,000高维的图片分为1000个不同的类,可见要取得好的成绩难度还是非常大的。
言归正传,先大体的介绍下文章模型的结构,让大家认识到这个模型是有多么庞大。整个模型共有60,000,000个参数,650,000个神经元,共有5个卷积层,其中有一些卷积层之后是最大池化层(这个告诉我们并不一定卷积层之后就一定是池化层),还有三个全连接层,最后是一个有1000个输出的softmax层。之后会给出模型结构的图示。模型的参数这么多,训练数据的量又这么大,我们必然需要找到一些方法来加快模型的训练速度以及避免过拟合问题的出现。之后会一一介绍所使用的措施。
首先是在加快模型训练速度方面所使用的一些方法(接下来介绍的顺序是根据作者认为重要性的由大到小来排序的):
(1)ReLU Nonlinearity
这里,每一个神经元所使用的激活函数不再是或是,而是f(x)=max(0,x).将之前的两个函数称之为saturating nonlinearities函数,而将之后的函数称为non-saturating nonlinearities函数。在梯度下降的过程中,使用saturating nonlinearities函数的训练速度要慢于使用non-saturating nonlinearities函数。作者还做了一个实验来证明这一点: