网站首页 > 技术文章 正文
文章对卷积神经网络CNN核心特点以及它的基本原理展开简要的解读,希望能够加深你对卷积神经网络的解。
一、卷积神经网络概述
1.卷积神经网络要解决的问题
传统的BP神经网络与DNN(深度神经网络)不同层神经元的连接方式是“全连接”,也就是这一次层的一个神经元的输入,会接受上一次每一个神经元的输出,这种方式即为“全连接神经网络”。
这样的连接方式有一个的缺点:因为权值与偏置等参数量大,导致训练收敛十分缓慢。特别是对于图像这样的训练数据,动不动就是数以百万的像素,理论上虽然可以收敛,但你可能得等上N年才有结果,而且它的泛化性也会变差。
2.卷积神经网络的特点
卷积神经网络CNN就是为了解决这个问题而生,它的核心特点有三个
局部感受野
一张图像,我们实际上并不需要让每个神经元都接受整个图片的信息,而是让不同区域的神经元对应一整张图片的不同局部,最后只要再把局部信息整合到一起就可以了。这样就相当于在神经元最初的输入层实现了一次降维
这有点像我们的眼镜,左右眼各负责看到一部分视野,最后只要通过神经把视野整合到一起,我们看到的依旧是一个相对完整的视野
卷积层的权值共享
这可以说是卷积神经网络的最最最重要也是它牛逼之处,刚刚我们说到全连接神经网络最大的问题就是权值参数太多,而卷积神经网络的卷积层,不同神经元的权值是共享的,这使得整个神经网络的参数大大减小,提高了整个网络的训练性能,具体的实现方式我们一会再说
池化层(Pooling Layer)
简单理解可以看作是对图像的一次“有损压缩”,因为在实际的训练中,我们并不需要对图像中的每一个细节都进行特征提取和训练,所以池化的作用就是更进一步的信息抽象和特征提取,当然也会减小数据的处理量
二、卷积神经网络核心概念
我们先来来看看所谓的卷积到底是什么
1.卷积核
卷积核表达式: F(x)=wx+b
简单认识一下卷积到底是怎么实现特征提取的。假设现在输入一个图片作为x(3×3像素),一个简单的卷积核w=【1,1,1,1,1,1,1,1,1】,b为0,那么这个图像经过一次卷积后,实现的效果如图
这样一个3×3的图像,通过卷积后就被压缩得到一个点“6”,我们就把这个点存储在卷积层的空间里(即 Feature map)。
当然在实际的训练中,卷积核的w与b也是被随机赋值并通过迭代法学出来的。而且在卷积后往往还会跟上一个激励函数如ReLU或Sigmoid。
2.步长
刚刚我们所说的是最为简化的图像(3×3),而卷积的工作方式,我们理解为“扫描”,加入一个图像是9×9像素,而卷积核理解为一个3×3的方框,那么一次卷积得到一个数字,而步长即为卷积下次移动扫描挪动的步数。
假设stride=1,那么每次就只滑动一个单位,它主要影响卷积对数据扫描的细密程度,步长越大,当然扫描的越粗糙,通常情况下Stride都会取“1”
3.卷积滤波器与卷积层
卷积滤波器通常由一个卷积核和激励函数构成,一个局部图像经过卷积滤波器提取特征后会形成一个Feature map,该平面上所有的神经元权值共享
4.Pooling Layer(池化层)
池化层是在图像经过卷积处理后的又一次有效特征提取和模糊处理。它和“下采样”实际上是一个意思。下面我们来看看所谓的“池化处理”或“下采样过程”到底是怎么回事。
常见的方式有两种,一种叫Max pooling(最大化),一种为Mean pooling(平均),它们都是对前面输入的数据做一次处理,假设我们用的是2X2的Pooling Filter(池化滤波器)
最大值池化过程
对输入的数据进行一次取最大值处理
平均值池化过程
对输入的数据进行一次取平均值处理
池化(下采样)的作用
这样的池化处理,在处理图像的时候是可以提取更为抽象的特征,减少数据处理量的同时保留有效信息。
当然它还可以防止过拟合,想想过拟合的原因就是模型过多开始学习数据中的细节导致其泛化性下降,而这样的处理刚好可以去除掉不怎么重要的细节,帮助模型更好地学习更为抽象的特征
三、参数减少和共享权值
下面我们来看看,CNN到底是以何种方式来完成权值共享的,要知道这可是它最大的卖点啊!
1.全连接神经网络
没有对比就没有伤害,不妨先来看看全连接的神经网络处理图像时候的一番景象!
这密密麻麻交错纵横的连接线,还仅仅是连接到隐含层的一个神经元,连接次数已经红字标出,不要太多。
2.“局部野”神经网络效果图
先声明本身是没有这个什么“局部野”神经网络的,只不过为了能更好地一步一步去理解我们先前说的概念
发现了没,通过不同神经元去接受局部图像的信息,这样它们明显不会有那么多的权值参数了!但这还不够
3.卷积层
如果我们在这个基础上,加上卷积滤波和激励函数的处理,最后会得到一层Feature map,在这个层中神经元之间的权值参数将会共享,完全一致哦
到这里你应该已经体会到卷积神经网络思想的核心所在:通过局部感受野、卷积层权值共享的方法,大大降低了网络参数的数量,减小网络的空间复杂程度。这就解决了我们最开始引出的问题,面对图像这样数以百万像素维度的数据,全连接神经网络无法有效对其进行处理,而卷积神经网络则刚好是对症下药!
当然在整个神经网络的宏观结构上,不同局部对应不同的卷积滤波器,以提取不同的特征。
四、CNN网络架构及训练过程
1.LeNet-5CNN的网络模型架构
可以看出来,这是一个识别字母的神经网络(大写的“A”有木有)
首先经过一次卷积滤波处理,得到了C1(卷积层 Feature map),然后又经过了一次下采样(池化)处理得到了S2(下采样层),之后又是一次卷积滤波得到C3卷积层,依次处理至途中的C5位全连接层,至此卷积的过程结束,被抽象的特征输入至传统的全连接神经网络,之后就又是熟悉的节奏了。
2.训练过程(有监督学习)
向前传播阶段
- 选取训练样本(x,y),将x输入网络中
- 随机初始化权值(一般情况下选取小数),信息从输入层经过一层一层的特征提取和转换,最后到达输出层,得到输出结果
反向传播阶段
- 输出结果与理想结果对比,计算全局性误差(即我们之前说的Loss)
- 得到的误差反向传递给不同层的神经元,按照我们之前所说的“迭代法”调整权值和偏重,寻找全局性最优的结果
五、场景应用
卷积神经网络目前最广泛的应用场景为图像识别领域,其中一个原因就是我们最初提到的,权值共享使得网络在处理图像的时候大大减少了参数数量,使得网络的训练速度更快。
当然最重要的还不止于此,我们都知道图像识别一个很大的问题就是如果图像中有一些损坏、缺失或变形的话,那么很可能干扰图像的识别结果。
卷积神经网络的卷积层和池化层在图像的本质都是提取更为抽象的特征,简单理解就是“模糊化”压缩处理,把一个图像中不那么重要的细节去掉,找到最为重要的特征进行学习。
那么图像中小细节的变化,反应在神经网络中也就是一些特征向量的变化,但这这个变化在卷积和池化处理后,对产生的结果影响几乎是微乎其微的,换句话说在CNN看来,这两张图片几乎就完全是“一张图片”了
以上就是对卷积神经网络CNN核心特点以及它的基本原理,是不是并没有想象中的那么难以理解呢?最后给大家一个小彩蛋,希望可以帮助你们梳理卷积神经网络的知识结构:
本文由 @free 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自 Unsplash ,基于 CC0 协议
猜你喜欢
- 2024-10-12 神经网络训练模型 神经网络训练好的模型怎么用
- 2024-10-12 人工智能Keras的第一个图像分类器(CNN卷积神经网络的图片识别)
- 2024-10-12 使用Keras进行深度学习(二):CNN讲解及实践
- 2024-10-12 pytorch利用CNN卷积神经网络来识别手写数字
- 2024-10-12 Tensorflow入门教程-第五课:TensorFlow中的卷积神经网络(CNN)
- 2024-10-12 7 大类卷积神经网络(CNN)创新综述
- 2024-10-12 卷积神经网络(CNN)简要教程 卷积神经网络代码入门
- 2024-10-12 测试开发 | 卷积神经网络(CNN):图像识别的骨干
- 2024-10-12 C++ 中的卷积神经网络 (CNN) c++实现卷积神经网络
- 2024-10-12 MNIST数字识别——CNN篇 数字识别网络
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)