目录
1 神经网络
2 卷积神经网络
2.1 局部感知
2.2 参数共享
2.3 多卷积核
2.4 Down-pooling
2.5 多层卷积
3 ImageNet-2010网络结构
4 DeepID网络结构
5 参考资源php
自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。正文以前,先说几点本身对于CNN的感触。先明确一点就是,Deep Learning是所有深度学习算法的总称,CNN是深度学习算法在图像处理领域的一个应用。算法
第一点,在学习Deep learning和CNN以前,总觉得它们是很了不起的知识,总觉得它们能解决不少问题,学习了以后,才知道它们不过与其余机器学习算法如svm等类似,仍然能够把它当作一个分类器,仍然能够像使用一个黑盒子那样使用它。网络
第二点,Deep Learning强大的地方就是能够利用网络中间某一层的输出当作是数据的另外一种表达,从而能够将其认为是通过网络学习到的特征。基于该特征,能够进行进一步的类似度比较等。机器学习
第三点,Deep Learning算法可以有效的关键实际上是大规模的数据,这一点缘由在于每一个DL都有众多的参数,少许数据没法将参数训练充分。函数
接下来话很少说,直接奔入主题开始CNN之旅。学习
首先介绍神经网络,这一步的详细能够参考资源1。简要介绍下。神经网络的每一个单元以下:测试
其对应的公式以下:.net
其中,该单元也能够被称做是Logistic回归模型。当将多个单元组合起来并具备分层结构时,就造成了神经网络模型。下图展现了一个具备一个隐含层的神经网络。翻译
其对应的公式以下:orm
比较相似的,能够拓展到有2,3,4,5,…个隐含层。
神经网络的训练方法也同Logistic相似,不过因为其多层性,还须要利用链式求导法则对隐含层的节点进行求导,即梯度降低+链式求导法则,专业名称为反向传播。关于训练算法,本文暂不涉及。
在图像处理中,每每把图像表示为像素的向量,好比一个1000×1000的图像,能够表示为一个1000000的向量。在上一节中提到的神经网络中,若是隐含层数目与输入层同样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本无法训练。因此图像处理要想练成神经网络大法,必先减小参数加快速度。就跟辟邪剑谱似的,普通人练得很挫,一旦自宫后内力变强剑法变快,就变的很牛了。
卷积神经网络有两种神器能够下降参数数目,第一种神器叫作局部感知野。通常认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。于是,每一个神经元其实没有必要对全局图像进行感知,只须要对局部进行感知,而后在更高层将局部的信息综合起来就获得了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。以下图所示:左图为全链接,右图为局部链接。
在上右图中,假如每一个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减小为原来的万分之一。而那10×10个像素值对应的10×10个参数,其实就至关于卷积操做。
但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部链接中,每一个神经元都对应100个参数,一共1000000个神经元,若是这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。
怎么理解权值共享呢?咱们能够这100个参数(也就是卷积操做)当作是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其余部分是同样的。这也意味着咱们在这一部分学习的特征也能用在另外一部分上,因此对于这个图像上的全部位置,咱们都能使用一样的学习特征。
更直观一些,当从一个大尺寸图像中随机选取一小块,好比说 8x8 做为样本,而且从这个小块样本中学习到了一些特征,这时咱们能够把从这个 8x8 样本中学习到的特征做为探测器,应用到这个图像的任意地方中去。特别是,咱们能够用从 8x8 样本中所学习到的特征跟本来的大尺寸图像做卷积,从而对这个大尺寸图像上的任一位置得到一个不一样特征的激活值。
以下图所示,展现了一个3×3的卷积核在5×5的图像上作卷积的过程。每一个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
上面所述只有100个参数时,代表只有1个10*10的卷积核,显然,特征提取是不充分的,咱们能够添加多个卷积核,好比32个卷积核,能够学习32种特征。在有多个卷积核时,以下图所示:
上图右,不一样颜色代表不一样的卷积核。每一个卷积核都会将图像生成为另外一幅图像。好比两个卷积核就能够将生成两幅图像,这两幅图像能够看作是一张图像的不一样的通道。以下图所示,下图有个小错误,即将w1改成w0,w2改成w1便可。下文中仍以w1和w2称呼它们。
下图展现了在四个通道上的卷积操做,有两个卷积核,生成两个通道。其中须要注意的是,四个通道上每一个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加而后再取激活函数值获得的。
因此,在上图由4个通道卷积获得2个通道的过程当中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。
在经过卷积得到了特征 (features) 以后,下一步咱们但愿利用这些特征去作分类。理论上讲,人们能够用全部提取获得的特征去训练分类器,例如 softmax 分类器,但这样作面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设咱们已经学习获得了400个定义在8X8输入上的特征,每个特征和图像卷积都会获得一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,因为有 400 个特征,因此每一个样例 (example) 都会获得一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,而且容易出现过拟合 (over-fitting)。
为了解决这个问题,首先回忆一下,咱们之因此决定使用卷积后的特征是由于图像具备一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另外一个区域一样适用。所以,为了描述大的图像,一个很天然的想法就是对不一样位置的特征进行聚合统计,例如,人们能够计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不只具备低得多的维度 (相比使用全部提取获得的特征),同时还会改善结果(不容易过拟合)。这种聚合的操做就叫作池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。
至此,卷积神经网络的基本结构和原理已经阐述完毕。
在实际应用中,每每使用多层卷积,而后再使用全链接层进行训练,多层卷积的目的是一层卷积学到的特征每每是局部的,层数越高,学到的特征就越全局化。
ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年Alex Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。值得一提的是,在今年的ImageNet LSVRC比赛中,取得冠军的GoogNet已经达到了top-5错误率6.67%。可见,深度学习的提高空间还很巨大。
下图即为Alex的CNN结构图。须要注意的是,该模型采用了2-GPU并行结构,即第一、二、四、5卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不一样的GPU上,模型结构相同,但将训练数据进行切分,分别训练获得不一样的模型,而后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不一样的GPU上使用相同的数据进行训练,获得的结果直接链接做为下一层的输入。
上图模型的基本参数为:
DeepID网络结构是香港中文大学的Sun Yi开发出来用来学习人脸特征的卷积神经网络。每张输入的人脸被表示为160维的向量,学习到的向量通过其余模型进行分类,在人脸验证试验上获得了97.45%的正确率,更进一步的,原做者改进了CNN,又获得了99.15%的正确率。
以下图所示,该结构与ImageNet的具体参数相似,因此只解释一下不一样的部分吧。
上图中的结构,在最后只有一层全链接层,而后就是softmax层了。论文中就是以该全链接层做为图像的表示。在全链接层,以第四层卷积和第三层max-pooling的输出做为全链接层的输入,这样能够学习到局部的和全局的特征。
[1] http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B 栀子花对Stanford深度学习研究团队的深度学习教程的翻译
[2] http://blog.csdn.net/zouxy09/article/details/14222605 csdn博主zouxy09深度学习教程系列
[3] http://deeplearning.net/tutorial/ theano实现deep learning
[4] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
[5] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.
From:http://blog.csdn.net/stdcoutzyx/article/details/41596663