卷积神经网络CNNs的理解与体会

article/2025/10/2 3:55:29

孔子说过,温故而知新,时隔俩月再重看CNNs,当时不太了解的地方,又有了新的理解与体会,特此记录下来。文章图片及部分素材均来自网络,侵权请告知。

卷积神经网络(Convolutinal Neural Networks)是非常强大的一种深度神经网络,它在图片的识别分类、NLP句子分类等方面已经获得了巨大的成功,也被广泛使用于工业界,例如谷歌将它用于图片搜索、亚马逊将它用于商品推荐等。

首先给出几个CNNs应用的两个例子如下:


这里写图片描述
(1)、手写体数字识别


对象识别
(2)、对象识别 [1]


句子分类

可以看到CNNs可以被用来做许多图像与NLP的事情,且效果都很不错。那么CNNs的工作框架是什么样子呢?

这里写图片描述

由上可以看到,CNNs的输入层为原始图片,当然,在计算机中图片就是用构成像素点的多维矩阵来表示了。然后中间层包括若干层的卷积+ReLU+池化,和若干层的全连接层,这一部分是CNNs的核心,是用来对特征进行学习和组合的,最终会学到一些强特征,具体是如何学习到的会在下面给出。最后会利用中间层学到的强特征做为输入通过softmax函数来得到输出标记。

下面就针对上面给出的CNNs框架一层层进行解析。

1、输入层

输入层没有什么可讲的,就是将图片解析成由像素值表示的多维矩阵即可,如下:


图片的像素表示

通道为1也就是厚度为1的图称为灰度图,也即上图。若是由RGB表示的图片则是一个三维矩阵表示的形式,其中第三维长度为3,包含了RGB每个通道下的信息。

2、隐层

CNNs隐层与ANN相比,不仅增加了隐层的层数,而且在结构上增加了convolution卷积、ReLU线性修正单元和pooling池化的操作。其中,卷积的作用是用来过滤特征,ReLu作为CNNs中的激活函数,作用稍后再说,pooling的作用是用来降低维度并提高模型的容错性,如保证原图片的轻微扭曲旋转并不会对模型产生影响。
由于CNNs与ANN相比,模型中包含的参数多了很多,若是直接使用基于全连接的神经网络来处理,会因为参数太多而根本无法训练出来。那有没有一些方法降低模型的参数数目呢?答案就是局部感知野和权值共享,中间层的操作也就是利用这些trick来实现降低参数数目的目的。

首先解释一下什么是局部感知野 [2] :一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。

举个例子来讲就是,一个32 × 32 × 3的RGB图经过一层5 × 5 × 3的卷积后变成了一个28 × 28 × 1的特征图,那么输入层共有32 × 32 × 3=3072个神经元,第一层隐层会有28 × 28=784个神经元,这784个神经元对原输入层的神经元只是局部连接,如图:


这里写图片描述

通过局部感知的特性,可以大大减少神经元间的连接数目,也就大大减少了模型参数。

但是这样还不行,参数还是会有很多,那么就有了第二个trick,权值共享。那么什么是权值共享呢?在上面提到的局部感知中图中,假设有1m的隐层神经元,每个神经元对应了10 × 10的连接,这样就会有1m × 100个参数。实际上,对于每一层来讲,所有的神经元对应的权值参数应该是一样的,也就是说如果第一个神经元的参数向量为 [w1,w2,...,w100] , 那么其他的神经元参数也应该是 [w1,w2,...,w100] , 这就是权值是共享的。

为什么是一样的呢?其实,同一层下的神经元的连接参数只与特征提取的方式有关,而与具体的位置无关,因此可以保证同一层中对所有位置的连接是权值共享的。举个例子来讲,第一层隐层是一般用来做边缘和曲线检测,第二层是对第一层学到的边缘曲线组合得到的一些特征,如角度、矩形等,第三层则会学到更复杂的一些特征,如手掌、眼睛等。对于同一层来讲,它们提取特征的方式一样,所以权值也应该一样。

通过上面讲到的局部感知野和权值共享的trick,CNNs中的参数会大幅减少,从而使模型训练成为可能。

在讲局部感知野时提到了卷积操作,卷积操作,说白了就是矩阵的对位位置的相乘相加操作,如下:


这里写图片描述

绿色为原始输入,黄色为卷积核,也称为过滤器,右侧为经过卷积操作生成的特征图。值得一提的是,卷积核的通道长度需要与输入的通道长度一致。
下面一张图很好地诠释了卷积核的作用,如图:

这里写图片描述

上图中的红色和绿色两个小方块对应两个卷积核,通过两轮卷积操作会产生两个特征图作为下一层的输入进行操作。

为什么在CNNs中激活函数选用ReLU,而不用sigmoid或tanh函数?这里给出网上的一个回答 [3]

第一个问题:为什么引入非线性激励函数?
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。

第二个问题:为什么引入ReLU呢?
第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用ReLU激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,参见 @Haofeng Li 答案的第三点),从而无法完成深层网络的训练。
第三,ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。

接下来讲一下pooling过程。
池化pooling,也称为欠采样(subsampling)或下采样(downsampling),主要用于降低特征的维度,同时提高模型容错性,主要有max,average和sum等不同类型的操作。如下图对特征图进行最大池化的操作:


这里写图片描述

通过池化操作,使原本4 × 4的特征图变成了2 × 2,从而降低了特征维度,提高了容错性。
下图给出了模型经过池化的可视化表示:
这里写图片描述
是不是人眼不太容易分辨出来特征了?没关系,机器还是可以的。

3、输出层

经过若干次的卷积+线性修正+pooling后,模型会将学到的高水平的特征接到一个全连接层。这个时候你就可以把它理解为一个简单的多分类的神经网络,通过softmax函数得到输出,一个完整的过程如下图:


这里写图片描述

4、可视化

参考【1】中给了一个CNNs做手写体数字识别的2D可视化展示,可以看到每一层做了什么工作,很有意思,大家可以看看。

5、参考

【1】、An Intuitive Explanation of Convolutional Neural Networks
【2】、技术向:一文读懂卷积神经网络CNN
【3】、知乎Begin Again关于ReLU作用的回答


http://chatgpt.dhexx.cn/article/OJuuob5J.shtml

相关文章

Gated-SCNN: Gated Shape CNNs for Semantic Segmentation论文笔记

论文介绍 作者认为之前的semantic segmentation的工作将所有信息都放入到了CNN的网络之中(这其中包含了颜色、边界、纹理等信息),这不太理想,所以作者在regular stream的基础之上增加了一个shape stream的分支,通过利用门控卷积来控制使得sh…

【t-SNE可视化CNNs特征向量-代码】

t-SNE可视化CNNs特征向量-代码 本博客主要是自己学习记录,参考网络,欢迎指正 整体代码 ModelPath是存放训练好的模型参数的路径 DatasetPath是存放数据集的文件夹的路径,其中不同类别放在不同的子文件夹里也可以参考【t-SNE可视化-代码】 …

CNNs: AlexNet补充

CNNs: AlexNet的补充 导言对AlexNet模型进行调整模型不同层的表征其他探索总结 导言 上上篇和上一篇我们详细地讲述了AlexNet的网络结构和不同超参数对同一数据集的不同实验现象。 本节,我们就AlexNet的一些其他相关问题进行解剖,如修改AlexNet参数量调…

深度学习-浅谈CNNs

偶尔看到了这篇文章,感觉作者写的很容易理解,对于初步认识CNNs有很大的帮助,若想查看原文,请点击此处。 关于神经网络的学习方法,总结起来的要点有以下几点: BP算法 激励函数正则化与交叉验证等其他防止过…

【GSCNN】GSCNN:Gated Shape CNNs for Semantic Segmentation论文记录

目录 简单不看版: 摘要 一、介绍 二、相关工作 三、Gated Shape CNN 代码 四、实验 五.总结 论文:https://arxiv.org/abs/1907.05740 代码:GitHub - nv-tlabs/GSCNN: Gated-Shape CNN for Semantic Segmentation (ICCV 2…

CNNs和视觉Transformer:分析与比较

探索视觉Transformer和卷积神经网络(CNNs)在图像分类任务中的有效性。 图像分类是计算机视觉中的关键任务,在工业、医学影像和农业等各个领域得到广泛应用。卷积神经网络(CNNs)是该领域的一项重大突破,被广…

你应该知道的9篇深度学习论文(CNNs 理解)

当时看到英文的博客,本想翻译给感兴趣的同学们看看,没想到已经有人翻译,于是进行了转载,留给自己和更多的人学习,本文仅供参考。 英文博客:https://adeshpande3.github.io/adeshpande3.github.io/The-9-Dee…

【神经网络】CNN

CNN工作原理笔记 卷积神经网络定义卷积运算池化激活函数全连接反向传播算法其他应用延伸知识 首先放个学习视频链接: 大白话讲解卷积神经网络工作原理. 卷积神经网络定义 CNN其实就相当于黑箱,有输入有输出 输入:二维像素阵列 输出:判决结果…

CNN+RNN

CNN,RNN(recurrent, 下同)结合到一起可以建立一个更好的model 1. CRNN(先CNN,后RNN) References: An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 一般用于基…

CNNs: ZFNet之CNN的可视化网络介绍

CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容,我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点&#xff0…

吊炸天的CNNs,这是我见过最详尽的图解!(上)

导读:卷积神经网络(CNNs)在“自动驾驶”、“人脸识别”、“医疗影像诊断”等领域,都发挥着巨大的作用。这一无比强大的算法,唤起了很多人的好奇心。当阿尔法狗战胜了李世石和柯杰后,人们都在谈论“它”。但…

深度学习—CNN

CNN简介 卷积神经网络 – CNN 最擅长的就是图片的处理。它受到人类视觉神经系统的启发。 CNN 有2大特点: 能够有效的将大数据量的图片降维成小数据量能够有效的保留图片特征,符合图片处理的原则 目前 CNN 已经得到了广泛的应用,比如&…

吊炸天的CNNs,这是我见过最详尽的图解!(下)

【摘要】本文详细介绍了卷积神经网络的运行原理,特别是池化、全连接等过程。为了使大家更快、更轻松的入门,文章没有晦涩难懂的术语和公式,全部采用“图形”的方式来描述。文末的延展阅读部分,更加入了彩色图片卷积原理的手工演算…

CNNs:ZFNet之基于AlexNet特征可视化实验分析

CNNs:ZFNet之基于AlexNet特征可视化实验分析 导言基于AlexNet网络的实验分析实验一:不同卷积层特征提取分析实验二:不同卷积层提取特征收敛分析 ZFNet网络介绍基于ZFNet网络的实验分析实验三:针对AlexNet特征提取改善可视化实验四:特征不变性…

CNN详细学习

前馈神经网络 MLP:multi-layer percetron Feed Forward and Back error propagation解决异或划分问题 缺点: 容易过拟合容易陷入局部最优化梯度消失计算资源不充分,训练集小 DNN 深一点效果好,宽一点容易理解,发现…

CNNs 入门论文汇总

Introduction 本文主要总结了卷积神经网络在机器视觉领域的重要发展及其应用。我们将介绍几篇重要的公开发表的论文,讨论它们为何重要。前一半的论文(AlexNet到ResNet)将主要涉及整体系统架构的发展和演变,后一半论文将主要集中在…

论文阅读和分析:《DeepGCNs: Can GCNs Go as Deep as CNNs?》

下面所有博客是个人对EEG脑电的探索,项目代码是早期版本不完整,需要完整项目代码和资料请私聊。 数据集 1、脑电项目探索和实现(EEG) (上):研究数据集选取和介绍SEED 相关论文阅读分析: 1、EEG-SEED数据集作者的—基线论文阅读和…

Gated-SCNN: Gated Shape CNNs for Semantic Segmentation

目录 作者 一、Model of Gated-SCNN 二、 Gated Shape CNN 1.Regular Stream 2.Shape Stream 3. Gate Conv Layer 4.ASPP 5 总代码 三 损失函数 1.BoundaryBCELoss 2.DualTaskLoss 作者 一、Model of Gated-SCNN 文章使用了双流CNN来处理语义分割中的边界问题,分为R…

(整理)吊炸天的CNNs,这是我见过最详尽的图解!(下)

之前在CSDN上看到这篇文章,觉得通俗易懂,写的非常好。不过近来再次查看,发现文章的照片莫名其妙的没有了,没有图就根本看不懂了。找到了之前关注的微信公众号:AI传送门 。 在里面找到了这篇文章,决定再把这…

CNNs详尽图解

已经成为每一个初入人工智能——特别是图像识别领域的朋友,都渴望探究的秘密。 本文通过“算法可视化”的方法,将卷积神经网络的原理,呈献给大家。教程分为上、下两个部分,通篇长度不超过7000字,没有复杂的数学公式&a…