CNN模型小结(1)

来源:互联网 发布:淘宝二手beats耳机 编辑:程序博客网 时间:2024/05/16 14:57

文章的部分图片引自陈天奇老师deep learning system里的ppt

http://dlsys.cs.washington.edu/


考虑到一入学老师就让我入CNN的坑,还是有必要把它的整个发展以及定义进行一个简要的总结和描述

虽然其实上周组会已经讲过一遍了,但碍于自己的表达能力,似乎全场还是懵B脸(;′⌒`)

(我也很无奈啊,我尽力了好么~


首先CNN是啥,卷积神经网络(Convolutional Neural Network)

传统的神经网络长啥样,下图左边这样,输入的神经元和输出的神经元都有联系,这样做好不好?好,它确保了所有输入和输出可能有的关联,但是它有一个很大的弊病,权重W这个矩阵太大了,占用了太多的内存。于是卷积神经网络应运而生。


卷积神经网络长啥样,右边右边这样,去翻其他的博客,它的优点是:1)局部连接;2)权值共享。

什么意思:1)输出的神经元不与所有输入的神经元相连,我们只连接一部分(图中是3个神经元);2)连接输入与输出所有平行的线他们都共用一个参数。

这里有几个定义,对于有多少个输入对应一个输出,我们定义它的数量为接受域;而一层内共享的权值参数我们称其为卷积核


从这个定义里我们其实可以看到CNN对样本的要求:我们看到CNN对于特征的抽象(输入到输出的抽象)并不是考虑整体的,而是考虑局部的,所以我们要求局部的特征是有关联的,并且局部所抽象出来的特征也是有关联的,为啥,因为我们实质上有很多个层(这一层的输入就是下一层的输出),所以图像可以作为输入,同样,CNN也可以应用在自然语言上。


当然这里有一个问题,并不是所有的卷积神经网络的卷积层都是权值共享的,我曾经瞟过一眼一篇人脸识别的文章,当他们做到了脸的配准(即确认了脸的眼睛鼻子嘴巴都在指定的位置)后,他们对于不同区域的一组卷积核是不同的;当然这样讲可能会引起歧义,如若不能理解,请跳过这句话。


CNN的产生在我看来就是相应深度学习的号召,为啥,因为层数一多,我们才会考虑到计算资源有限,想办法利用卷积来节约资源。


这里值得一提的是,我所了解到CNN最早也是应用在乳腺钼靶图像钙化的检测(默默流出热泪(;′⌒`)


但是从下图看,CNN98年火了一会儿,12年才被Alex大大翻出来


这里我们来看看Lenet,LeNet整出来后被广泛应用在了数字识别上


LeNet厉害在它在卷积的概念上加入了池化(Pooling),Pooling是啥意思,如上图坐下所示,也是对于局部特征的一种抽象,图中所示的是max-pooling,即取局部最大的特征,这样做最直接的好处就是降维,比起卷积层的降维,你还不用构造卷积核你说划算不划算,在我看来它本质上就是一种卷积,只是是人为的卷积(卷积本身就是进行不同尺度的抽象,池化在我理解是用我们用人为的尺度对它进行抽象),如果我关注的是图像的目标,可能认为会设置成max-pooling,如果我关注的是图像的背景,那么我们就可能用的是mean-pooling。

另外很多博客中也提到池化具有一定的平移不变型,其实很好理解,比如上图左下,我对图片假如是有一个像素点的偏移,max-pooling还是会输出最大的值,比如8的输出始终不会受到影响


顺带提一下,这里的flatten就是把三维的张量(一维是向量,二维是矩阵,三维是张量)铺开成一维的向量方便做全连接。(实质上张量的运算都是flatten开来运算的


为啥后来又不火了?

1)层数一深资源还是有限;

2)之前的激活函数是sigmoid/tanh,会出现梯度弥散(啥意思,输入的x太大/太小,在激活函数tanh(x)/sigmoid(x)上求导之后太小,然而我们又要用梯度进行调整,可太小跑一个循环基本上不调整啥;

3)深度学习因为可能模拟很多层的非线性变化,所以样本太小它很容易过拟合;

总结来说:

1)计算资源不够;

2)梯度会弥散;

3)数据集太小,容易过拟合。


于是乎,CNN被冷落了,很长一段时间被SVM取代了

(当然SVM火也是有道理的,它的重点在于特征的映射(核函数,我的理解就是对低维特征的映射组合);CNN关注的是特征的抽象变化


终于在12年,CNN扬眉吐气啦o(* ̄▽ ̄*)ブ

AlexNet怎么解决之前的问题的:

1)计算资源不够——GPU;

2)梯度会弥散——Relu;(当然用Relu梯度也可能爆炸,所以它们又加入了Batch Normalization

3)数据集太小,容易过拟合——ImageNet数据集,Dropout,Data Augmentation.




Relu就像上图左边所示,它只对负值加以抑制;而Dropout如上图右边所示,我们测试的时候,不是用所有的神经元作为输入,我们随机的屏蔽掉一些连接,一般而言dropout加在全连接层,但它同样也能加在卷积层/池化层(在卷积/池化层上加就相当于加噪)


除了在网络上做调整,Alex也提出来在数据上调整,Data Augmentation实质就是扩大样本集,一幅图,我旋转一下,裁剪一下,加一波滤镜,就可以有很多个图像样本了~开不开心意不意外( ̄▽ ̄)"7

不过Data Augmentation在多大程度上能够提升效能我是存疑的,我之前在TMI上看过一篇论文是对肺结节(这玩意儿怎么辣么火?)上通过流型制造新数据进行数据增加,结果是,对于少样本数据增加很有意义,但对于ImageNet这个数量的数据集我持怀疑态度。


自此CNN确立了在图像识别江湖大佬的地位


14年全面开花,VGG和GoogleNet在不同的方向玩出了新花样

VGG的考虑是,两层3*3的卷积比一层5*5的卷积更省资源~

GoogleNet的想法是利用不同尺度的卷积核的抽象以便抽出对于图像分类最有意义的抽象,更重要的是,我可以用一个1*1*N的卷积核进行升维/降维~


15年ResNet横空出世,152层就问你怕不怕~

但152层只是个幌子,ResNet真正的创新点在于残差的引入(指不定是看到gbdt在人工特征分类比赛上太火?

首先作者在之前VGG的基础上继续实验,发觉56层的网络还不如20层,无论是训练误差还是测试误差都不行,所以想到引入残差,于是乎可以加到152层,当然再往深又GG。



基本上这些就是分类任务上主流的模型,当然除了分类,CNN也有在检测等任务上作出了长足的进步,这些我们以后再聊。


收工~


一些文献

[1] DE Rumelhart, GE Hinton, RJ Williams, Learning internal representations by error propagation. 1985 – DTIC Document.
[2] Y. LeCun , B. Boser , J. S. Denker , D. Henderson , R. E. Howard , W. Hubbard and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition”, Neural Computation, vol. 1, no. 4, pp. 541-551, 1989.
[3] Kaiming He, Deep Residual Learning, image-net.org/challenge
[4] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, 1998.
[5] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in Neural Information Processing Systems 25, pages 1106–1114, 2012.
[6] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott E. Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich: Going deeper with convolutions. CVPR 2015: 1-9
[7] Karen Simonyan, Andrew Zisserman: Very Deep Convolutional Networks for Large-Scale Image Recognition. CoRR abs/1409.1556 (2014)
[8] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep Residual Learning for Image Recognition. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016