CNN卷积神经网络新想法
近期一直在看卷积神经网络,想改进改进弄出点新东西来。看了好多论文,写了一篇综述。对深度学习中卷积神经网络有了一些新认识,和大家分享下。
事实上卷积神经网络并非一项新兴的算法。早在上世纪八十年代就已经被提出来,但当时硬件运算能力有限,所以当时仅仅用来识别支票上的手写体数字,而且应用于实际。
2006年深度学习的泰斗在《科学》上发表一篇文章,论证了深度结构在特征提取问题上的潜在实力。从而掀起了深度结构研究的浪潮,卷积神经网络作为一种已经存在的、有一定应用经验的深度结构。又一次回到人们视线,此时硬件的运算能力也比之前有了质的飞跃,要芯片有芯片要GPU有GPU,还有开源的Caffe框架。于是CNN就起来了。
纵观眼下已经发表的有关CNN方面的文献,多是側重应用领域。国内期刊上有关CNN的期刊发表得并不多。一般都是从2012年之后開始出现,并且四大学报对CNN方面的文章发表力度还并没有想想中的大,不知道是大家不愿意投呢,还是期刊那对这个领域的东西持犹豫态度,只是CNN方面的学术论文但是非常多,可见非常多学校,非常多老师。非常多学生都在搞这个。国外方面对于CNN的论文就相对多一些了,图像识别。语音识别等方面都有涉猎,与国内不同的是国外发表的文献在理论方面下的功夫要多一些,国内一般都是直接把CNN直接拿来用,老方法新问题,并且效果还不错,可见CNN作为深度学习的重要成员。确实非常强。
之前一直想着如何对传统CNN进行改进。看了看大家的工作,改进的方向无非是要么在结构上改,要么在训练算法上改,眼下CNN的改进基本上都在遵循着这个框架。
一、在结构上的改进
传统的CNN本质上是一个映射的堆叠。图下图所看到的
之所以说它是传统,主要是它对输入形式、卷积核、级联形式、初始化方法都没有严格要求。就使用最原始的卷积核,随机初始化。当然也正是由于他的传统、原始,才使得其有改进的空间。以下说说已有的比較成功的改进方法。
1、在网络输入上下功夫。传统的CNN呢,直接把图片作为数据输入进去了,从道理上讲刚好符合稀疏表示理论中“像素本身是图像语音最冗余的表示”的观点,可是大家还是希望对图像进行一些预处理,毕竟机器视觉比不上人眼。人的肉眼看东西时可能一下完毕了好多种模式分类的工作,而我们在做研究时,一次一般也就研究一种或者几种特定的模式分类问题。
既然问题是特定的。理论上必定会有对付这样的问题的特效药,就好比我们要识别白纸上的毛笔字,不是必需把整张纸都送进去操作,那样确实信息够全,可是速度太慢。反过来想想,要是条件理想。说不定直接阈值化一把就OK了,尽管信息损失了不少,但重要的信息还在。速度也快。正确率也能够接受,因此须要对图像预处理。可见,并非全部的问题都是直接把图像直接以输入就OK了,做些预处理还是非常有必要,比方颜色分层处理、构建尺度金字塔、提取点什么特征(Gabor、SIFT、PCA等等),都是能够的,因问题而已。
有人在用CNN做显著性检測时就是把图像先进行了一把超像素切割,然后把切割后的超像素作为新的网络输入,并且是三个通道同一时候输入。例如以下图:
他是把各个层的映射结果PCA降维后融合到一起的,效果不错。
3、在卷积核上加限制。
前面说过。传统CNN就是单纯的卷积核,于是我们想。能不能把那些卷积核改成Gabor核呢?小波核行不行?稀疏映射矩阵是不是也能够。只是那时候的神经网络就不能再叫卷积神经网络了,预计就应该叫深度Gabor卷积网络了吧,重要的是这点还没有人做,说不定以后能够下下功夫,只是已经有人把卷积核改进到加权PCA 矩阵。做出深度特征脸卷积神经网络了。结构例如以下图:
这个看上去有点复杂,事实上就是先对图像进行分块。然后将每一个小块都送入深度网络中进行映射,映射核即为加权PCA矩阵,然后将每层映射结果经过码本聚合。得到终于的特征表示形式。事实上这样的针对特定问题构建特定映射核的方法在理论上是有道理的。比方说之前的场景分类,用Gist特征有奇效。那就最好还是将卷积核改为Gist核,事实上也就类似于Gabor核。弄个深度Gist卷积神经网络来解决场景分类问题。说不定就会有更好的效果,科研重在实验嘛。事实上这样的卷积核的改进和曾经的传统CNN已经有了非常大差别。主要是抽象的借鉴了深度结构的概念,只是我觉得这也正是深度学习的精髓所在。
4、与其它分类器结合。
卷积神经网络能够看做是特征提取与分类器的结合体,单从它的各个层的映射来看,类似于一个特征提取的过程,提取了不同层次的特征。
但假设映射来映射去,最后就映射到几个标签上,则它又有了分类的功能。但我更倾向于把CNN看成是一个特征提取的手段。那既然是特征提取,就必定要搭配一些好的分类器了,SVM、稀疏表示分了器,都不错,相信两者结合肯定能取得好的效果,只是这部分工作眼下没有多少人做。不知道为什么。
二、在训练算法上的改进
一提到算法的改进,涉及到很多其它的是理论的部分,难度比較大。眼下已有的改进主要体如今两个方面:一是对非线性映射函数的修改。二是网络训练的无监督化
1、非线性映射函数改进
在CNN每一个映射层之后其结果都会经过一个非线性函数处理,主要是调整映射结果的范围。
传统CNN一般採用sigmoid函数或双曲正切函数(tanh)。后来稀疏表示兴起了,人们发现稀疏的东西效果都比較好,因此我们希望卷积层的映射结果也能尽量稀疏一点。更接近人的视觉反应。对非线性函数的一个最成功的改进就是纠正线性单元(Rectified Linear Units,ReLU),其作用是假设卷积计算的值小于0,则让其等于0,否则即保持原来的值不变。这样的做法所谓是简单粗暴,但结果却能得到非常好的稀疏性。实验说明一切。
2、训练算法的无监督化
事实上训练算法的无监督化改进是CNN很重要的一项改进。原因很easy,深度学习须要海量数据,对海量数据进行标注可不是一项简单的工作,更不用说想表情、漂亮度等等这样的抽象标注了。CNN的无监督改进眼下比較成功的仅仅有少数几个方案,当中最具代表性的应该算是2011年J Ngiam等人提出稀疏滤波(Sparse filtering)算法,通过构建特征分布矩阵(feature distributions)。对矩阵依照特征方向求解一次稀疏优化问题。同一时候对每一个样本的特征进行L2范数归一化,终于得到一个具有样本分布稀疏性((Population
Sparsity)、激活时间稀疏性(Lifetime Sparsity)以及高离散性(High Dispersal)等特点的样本分布矩阵。并指出能够通过将这些样本分布矩阵进行多层级联扩展。形成无监督深度学习模型。
事实上这有点像稀疏表示的一点延伸。说白了就是把卷积核改成稀疏字典了,舍弃了原来的BP算法。既然不依赖BP了。自然也就能够实现无监督。稀疏滤波算法在这里一两句话也说不清楚,在这里推荐两篇文献。一个是作者的原始文献,还有一个是它的应用,这两篇文献在谷歌都能够下载得到。要是登陆谷歌出现困难的话再这里给大家提供一种稳定的登陆方法,一个月10元也不贵。
(1)Ngiam, Jiquan,Koh Pang Wei,Chen Zheng hao,Bhaskar Sonia,Ng Andrew Y. Sparse filtering,[C]. Advances in Neural Information Processing Systems 24: 25th Annual Conference on Neural Information Processing Systems,2011:1125-1133.
(2) Zhen Dong,Ming tao Pei,Yang He,Ting Liu,Yan mei Dong,Yun de Jia. Vehicle Type Classification Using Unsupervised Convolutional Neural Network,[C]. Pattern Recognition (ICPR), 2014 22nd International Conference on,2014:172-177.
FQ地址:点击打开链接
CNN作为深度学习中应用最为广泛的网络模型,最有影响力之中的一个的应用应该算是香港理工大学王晓刚教授团队提出的DeepID人脸识别算法。其三代算法已经达到了99%,确实厉害。以上就是我这一个月来对CNN的理解了。欠妥地方欢迎大家指正,一起讨论,另外因为博客,对非常多算法提出并未给出原始參考文献,须要查阅相关參考文献的能够留言给我。
CNN卷积神经网络新想法的更多相关文章
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- cnn(卷积神经网络)比较系统的讲解
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- [转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR
Theano下用CNN(卷积神经网络)做车牌中文字符OCR 原文地址:http://m.blog.csdn.net/article/details?id=50989742 之前时间一直在看 Micha ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM
http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- TensorFlow——CNN卷积神经网络处理Mnist数据集
CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...
随机推荐
- idea下的hibernate反向生成插件
阅读目录 1. 打开 DataBase 窗口,添加数据源 2. 添加 hibernate 持久层支持,生成实体 Bean /配置文件 谈起 Hibernate 应该得知道 Gavin King 大叔, ...
- PHP共享内存的应用shmop系列
简单的说明 可能很少情况会使用PHP来操控共享内存,一方面在内存的控制上,MC已经提供了一套很好的方式,另一方面,自己来操控内存的难度较大,内存的读写与转存,包括后面可能会用到的存储策略,要是没有一定 ...
- oracle 修改数据 保险方法
oracle 中修改比较安全的方法:(pl/sql) 第一种方法: select * from temp where id=9 for update; 第二种方法: select t.*,rowid ...
- Angularjs的$apply及其优化使用
今天,我们要聊得是Angularjs中的小明星$apply.当我们数据更新了,但是view层却没反应时,总能听到有人说,用apply吧,然后,懵懂无知的我们,在赋值代码后面加了$scope.$appl ...
- Ionic2中使用第三方插件极光推送
不同于Ionic1中插件的调用,Ionic2提供了Ionic Native.Ionic Native封装了一些常见的插件(如:Camera.Barcode Scanner等),这些插件的使用方式在官方 ...
- 怎样让enum枚举支持string
原文发布时间为:2011-03-02 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道enum是以下两种情况,不能支持string 1,enum类型是静态 2,enum类型仅限于long、i ...
- event.srcElement就是指向触发事件的元素,他是什么就有什么的属性
原文发布时间为:2009-06-29 -- 来源于本人的百度文章 [由搬家工具导入] 得到或设置触发事件的对象。 event.srcElement就是指向触发事件的元素,他是什么就有什么的属性 s ...
- 给所有ajax请求增加随机数
var origionAjax=$.ajax $.ajax=function(obj){ obj.url=(obj.url).indexOf("?")>-1?(obj.url ...
- Docker(六):容器
一.启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将一个在终止状态的容器重新启动,因为Docker的容器实在是太轻量了,很多用户都可以随时删除和新创建容器. 新建并启动 $s ...
- [LeetCode] Reorder List 反向插入链表
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...