首页 > 编程知识 正文

神经网络算法三大类,卷积神经网络python实现

时间:2023-05-03 05:05:35 阅读:13516 作者:2255

卷积神经网络转载请注明http://blog.csdn.net/stdcoutzyx/article/details/4159663

今年7月以来,在实验室负责卷积神经网络(Convolutional Neural Network,CNN ),其间配置了theano和cuda-convnet、cuda-convnet2进行使用为了增进对CNN的理解和使用,特写了这篇博文,以此与人交流,互惠互利。 在正文之前,首先说一下自己对CNN的一些感触。 明确地说,深度学习是所有深度学习算法的总称,CNN是深度学习算法在图像处理领域的应用。

第一,在学习深度学习和CNN之前,总觉得这是很厉害的知识。 我一直以为能解决很多问题。 学习起来,它只是和其他机器学习算法(如svm )相似,可以作为分类器使用,也可以像黑匣子一样使用。

第二,深度学习的强大之处在于网络中间一层的输出可以用作数据的另一表示,并且可以被认为是通过网络学习的特征。 根据该特征,还可以进行类似度的比较等。

第三,深度学习算法有效的关键其实是大数据。 这是因为每个DL都有很多参数,少量的数据无法充分训练参数。

接下来当然,直接跳进主题开始CNN之旅。

1 .神经网络首先介绍神经网络。 有关此步骤的详细信息,请参阅资源1。 简单介绍一下。 神经网络的各单元如下。

对应的公式如下:

其中,该单元也称为Logistic回归模型。 在组合多个单元具有分层结构的情况下,形成神经网络模型。 下图显示了具有隐式层的神经网络。

对应的公式如下:

相似的,可以扩展到2、3、4、5、…这样的隐含层。

神经网络训练方法也与Logistic相似,但由于其多层性,需要对隐含层节点采用链式求导规律,即梯度下降链式求导规律,专业名称为反向传播。 关于训练算法,本文暂时不谈。

双卷积神经网络在图像处理中通常将图像表示为像素向量。 例如,10001000的图像可表示为1000000的向量。 在前一节所述的神经网络中,当隐含层数与输入层相同为1000000时,从输入层到隐含层的参数数据为10000001000000=10^12,太多,几乎无法训练。 因此,为了使图像处理成为神经网络法,首先需要减少参数来加快速度。 就像辟邪剑谱一样,惠普滴滴涕非常受挫,一旦出宫内力增强剑法加快,就会变得很牛。

2.1局部感知卷积神经网络有两种神器,可以减少参数。 第一神器被称为局部感知区。 人们对外界的认识是从局部到全局的,图像的空间联系也被认为局部像素联系强,远像素联系弱。 因此,每个神经元实际上不需要感知全局图像,而只需要感知局部,就可以在更高层次上集成局部信息以获得全局信息。 互联网的一部分相连的思想也受到生物学中视觉系统结构的启发。 视觉皮层的神经元局部接收信息(也就是说,这些神经元只对特定区域的刺激做出响应)。 如下图所示,左图为全连接,右图为局部连接。

在上图中,如果各神经元与1010个像素值相连,则权重数据为1000000100个参数,减少为原来的万分之一。 对应于1010个像素值的1010个参数实际上对应于卷积操作。

2.2参数共享,实际上如果这样下去参数太多,就会启动二级神器,即权重共享。 在上面的局部连接中,每个神经元对应100个参数,共有10000000个神经元。 如果这1000000个神经元的100个参数相同,则参数为100。

怎么理解权重的共享? 这100个参数也就是卷积操作可被看作提取特征的方法,而不管位置如何。 这具有图像的一部分统计特性与其他部分相同的隐含原理。 这意味着我们在这个部分学习的特征也可以用于另一部分,所以可以对这个图像上的所有位置使用相同的学习特征。

直观地,可以从大尺寸图像中随机选择小块(例如,8x-8 )作为样本,并且如果从小块样本中学习了一些特征,则可以将从该8x-8样本中学习到的特征作为探针应用于图像中的任何位置。 特别是,通过将从8x8样本中学习到的特征与原始大尺寸图像进行卷积,可以针对该大尺寸图像上的任意位置获得不同特征的激活值。

如下图所示,表示33的卷积核在55的图像中进行卷积的过程。 卷积分别是特征提取方式,像筛子一样筛选出图像中符合条件的部分(激活值越大越符合条件)。

-align:center;">

 

2.3 多卷积核

上面所述只有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表示卷积核大小。

2.4 Down-pooling

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

 

至此,卷积神经网络的基本结构和原理已经阐述完毕。

2.5 多层卷积

在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。

3 ImageNet-2010网络结构

ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年ngdyc Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。值得一提的是,在今年的ImageNet LSVRC比赛中,取得冠军的GoogNet已经达到了top-5错误率6.67%。可见,深度学习的提升空间还很巨大。

下图即为ngdyc的CNN结构图。需要注意的是,该模型采用了2-GPU并行结构,即第1、2、4、5卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不同的GPU上,模型结构相同,但将训练数据进行切分,分别训练得到不同的模型,然后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不同的GPU上使用相同的数据进行训练,得到的结果直接连接作为下一层的输入。

 

上图模型的基本参数为: 输入:224×224大小的图片,3通道第一层卷积:11×11大小的卷积核96个,每个GPU上48个。第一层max-pooling:2×2的核。第二层卷积:5×5卷积核256个,每个GPU上128个。第二层max-pooling:2×2的核。第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。第五层卷积:3×3的卷积核256个,两个GPU上个128个。第五层max-pooling:2×2的核。第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。第二层全连接:4096维Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。4 DeepID网络结构

DeepID网络结构是香港中文大学的Sun Yi开发出来用来学习人脸特征的卷积神经网络。每张输入的人脸被表示为160维的向量,学习到的向量经过其他模型进行分类,在人脸验证试验上得到了97.45%的正确率,更进一步的,原作者改进了CNN,又得到了99.15%的正确率。

如下图所示,该结构与ImageNet的具体参数类似,所以只解释一下不同的部分吧。

 

上图中的结构,在最后只有一层全连接层,然后就是softmax层了。论文中就是以该全连接层作为图像的表示。在全连接层,以第四层卷积和第三层max-pooling的输出作为全连接层的输入,这样可以学习到局部的和全局的特征。

5 参考资源 [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.

更多内容欢迎关注微信公众后【雨石记】。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。