热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

浅谈卷积神经网络CNN

前言:鉴于这是本人的第一篇深度学习博客(之前写过几篇C++和RCNN的,不过比较水,自认干货不多),就想唠叨几句,看客老爷如果不喜欢,可直接跳过看正文哈。写这篇的时候,本人马上要硕

前言:

鉴于这是本人的第一篇深度学习博客(之前写过几篇C++和RCNN的,不过比较水,自认干货不多),就想唠叨几句,看客老爷如果不喜欢,可直接跳过看正文哈。写这篇的时候,本人马上要硕士毕业了,学了将近2年半的深度学习(图像描述和生成方向),想着在毕业之前,对所学的相关知识做个总结,也为后续的工作做个预热(在菊厂做人工智能工程师),所以就想做个系列,既是为自己,也想给大家分享一下我在这方面的一些看法和感悟。当然本人也不是什么AI大牛,对知识以及相关概念的理解难免会有偏差,如果小伙伴们发现了,可以及时评论或者私信我,我会在第一时间纠正。每篇的最后我也会把相关参考文献和本人的公众号放上去,如果感兴趣的话也欢迎大家与我交流学习。

正文:

其实说到卷积神经网络,大家都不陌生,从2012年深度学习的崛起,大家或许第一个知道的就是CNN,其实卷积神经网络的概念早在上世纪八九十年代就提出来了,经过二十多年的发展,随着计算机算力的巨大提升,直至2012年在Imagene上面的惊人的准确率(top-5:15.3%),这才使得人们看到CNN的巨大价值。那么为什么CNN就可以取得这么好的效果呢?这还得从过去人们对图像的处理手段说起。其实学图像处理专业的学生都知道过去有一门必修的课程就是冈萨雷斯的《数字图像处理》(还有幸听过他的讲座),厚厚的一本绿皮书,其实在这本书里面对图像的处理更多的是数学上的计算与统计。你看SIFT,HOG,LBP等这些特征都是有其数学变换的意义在里面,其背后就是抓住了图像空间特征的特点:局部信息,所以传统图像处理方法可解释性很好,因为数学公式是所有人都能看懂并信服的。但是它有一些很大的缺点就是麻烦,门槛高,依赖个人的主观经验。人工提取特征本身就是一件耗时耗力的事情,而且推广性差,换个场景或者图片内容,就要重新制定一套新的模版,所以LeCun等人就提出CNN来彻底改变图像处理的方式,使得图像处理的门槛大大降低(当然网络设计也很难,最近的神经网络搜索NAS就是想改进这一点,总之就是越来越趋向于自动化,变得更智能),处理的性能和扩展性都大大增加了。

卷积神经网络一般有5个部分:1.输入层 2.卷积层 3.池化层 4.激励函数 5.全连接(输出层)

1.输入层

这个根据数据特点来,图像的话就是RGB三通道,例如(Height x Width x Channel),文本的话就是Length x word-vector(一般是one-hot或者是word2vec),视频的话就是(Height x Width x Channel x time)对应与三维卷积操作。

2.卷积层

这个主要就是定义stride,卷积核大小,是否padding和channel通道数,这个一般是根据特征尺寸以及具体的任务来的,尤其是channel通道数,过大或者过小都不好,一般建议是2或者是4的倍数,运算过程中的点积计算示意图如下:

浅谈卷积神经网络CNN

3.池化层

pooling层一般分为最大值pooling和均值pooling,根据图像的特点,即局部图像的表达性,maxpooling用的最多。作用一般有三个:(1)改变特征尺寸,降维 (2)减少参数量 (3)防止过拟合的同时尽可能地保留特征最显著的部分。

浅谈卷积神经网络CNN

4.激励层

激励函数能够提升网络的非线性表达能力,要不然的话网络表达的能力将十分有限。用的最多的Relu和LeaklyRelu(在负数部分有差别),tanh和sigmoid用的比较少,sigmoid是非0均值,且极大和极小值导数都是0,tanh是0均值的,但是导数不如Relu简便。

5.全连接(输出)

其实全连接也不一定必须要使用,要不然全卷积网络咋来的,但是一般情况还是要用的,比如分类和检测。fc层会极大地增加网络的参数量,所以用的时候要慎重,不宜过多,一般3层以内。

下面说一下卷积神经网络的最大特点:权值共享

这个也是区别与传统神经网络的一个关键地方。传统神经网络为什么难以训练,就是因为其网络参数过多,有人说还是算力达不到,当然这也是个原因。但是最本质的还是参数量但过于巨大,对一般的图像任务而言,我们的输入一般是256x256x3(RGB),如果我们做1000类物体分类,那么传统神经网络就需要256x256x3x1000(忽略偏置)将近20亿个参数!这是很难训练的,那么如果我们利用权值共享呢,以3x3的卷积核为例就是3x3x1000=9000的参数量,孰多孰少一目了然。这里就会有人问了,那么它们的效果怎么样呢,我们也不能只追求减少参数量而忽略网络的表达能力吧。其实我们可以想一下,无论是文本还是图像又或者是视频,它们局部信息都是有关联的,文本的话就是每个词之间是有逻辑的,图像的话局部往往代表着物体的某一个部位,所以我们就借鉴传统图像处理那一套,利用特征模版进行窗口滑动,每一个特征模版滑动的结果都对应着一种特征响应,我们利用多个特征模版就可以得到图像的各种信息,比如图像的边缘,颜色,纹理信息,再把它们集合起来,再利用同样的方式进行特征提取,这样我们就会得到由低层到高层的不同级别的图像特征来帮助我们进行图像的进一步处理。这里有一个特征的可视化结果:

浅谈卷积神经网络CNN

这样的话我们不仅减少了参数量,避免了过拟合,而且还充分利用了图像信息,所以卷积神经网络越来越被人们所接受。当然了,传统图像处理的一些方法现在仍然有用,由于CNN对于样本的依赖和难解释性,传统的一些处理图像的方法也可以进行一个补充和完善。

好了,今天的分享就到这里吧,当然卷积神经网络的内容还有很多,下一次我可以给大家分享一下BP反向传播机制,这个对于网络的学习与理解也是至关重要的,我们一起加油~~

最后附上本人的公众号(昨天才开通,后续会分享一些自己的学习和工作感悟)和微信,感兴趣的小伙伴欢迎找我进一步地讨论

我的微信:                          公众号:

浅谈卷积神经网络CNN       浅谈卷积神经网络CNN

参考文献:

1.博客:https://www.jianshu.com/p/ac7d7a46106a

2.博客:https://blog.csdn.net/littlestudent12/article/details/80777494

3.博客:https://baijiahao.baidu.com/s?id=1636468254076776780&wfr=spider&for=pc

 

 


推荐阅读
author-avatar
怕疼不怕死
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有