CNN卷积神经网络和transformer相关的知识,是AI的一个基础的,也是前言的知识点。一般面试官会从以下这些问题入手:
- 卷积神经网络,有什么特点?
- 1*1卷积核有什么作用?
- 计算经过卷积的输出尺寸大小
- 空洞卷积你了解吗?有什么特点
- CNN和transformer两者相比,有什么优缺点?
后面,我们就带着这些问题,一一找到答案。
一、CNN
首先是听到卷积神经网络,立马就会顾名思义,卷积+神经网络。
1.1、卷积
卷积我们知道,在信息论里面都会提到这个名词,在这里就根据要描述的内容,要处理的是输入图像,卷积是对图像和卷积模板做内积。
在这里,对单纯的一个像素做卷积就没什么意义了,这里不是对每个输入像素的信息做处理,而是对整幅图像中,其中的一小部分像素区域。也就是一小块图像,是大幅图片的一个真子集。
随着卷积核在图像中的不断以步长为1的移动,它将与矩阵不断的进行卷积运算,输出卷积后的计算结果。
在这里输出的结果,是经过11+10+11+00+11+10+01+00+1*1=4。通过它不断的按找步长stride移动,就能够输出图像经过卷积后的结果了。
1.2、神经网络
这里所说道的神经网络,我们可以把它与人脑的神经网络来做一个类比。
我们观察过千奇百怪的猫,但总是能得出一些猫的独有的特征来,比如说尖耳朵,猫脸,还有毛茸茸的样子,在下次拿给你一个即便你不知道它是一只什么品种的猫,但是你知道,她肯定是只猫就行了。
每个神经元拥有多个实际值的输入(从小到大见过了很多的猫),并产生了一个实际值的输出(由过往认识猫的了解,总结的特征,得出这个不认识的动物也是猫的结论),这就是仿生物的神经网络。
有了卷积和神经网络的概念,下面该怎么将两者和输入图像联系在一起呢?怎么与普通的神经网络做对比呢,慢慢道来。
还不要着急,先看看CNN在整个AI时代,处于什么样子的一个层次,或者说位置。
1.3 CNN与模式识别、机器学习、深度学习的关系
一张表没有看到CNN,因为卷积神经网络只是深度学习算法的一个基础模型,它是深度学习中一种新的特征抽取的方法。
而深度学习又是机器学习中的一个新的领域,其模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据。
这时候我们就该思考一个问题了,不知道你们有没有思考过。为什么要深度学习?为什么要用卷积神经网络的方式来做深度学习。
因为CNN具有别的一般方法所没有的优势,否则它不可能出现而被推崇的。
1.4、CNN有什么特点?
看着这个鸟,我们都知道它是一只鸟,尽管我们不知道它是一只什么鸟。那为什么我们会异口同声的说它就是一只鸟呢,Why is a bird?
因为它的一些鸟的特征呗,什么特征:,
- 鸟嘴,尖尖的
- 还有翅膀
- 还有锋利的爪子
可能还有别的一些特征,那下面我们再看一个图:
这里呢变成了三幅图了,最左边还是上面的那个鸟,有尖嘴,锋利的爪子,还有翅膀。首先,看右下的部分,那个鸟,有什么相同的地方?有什么不同的地方?
图片变小了,鸟嘴和翅膀,锋利的爪子都在,我们也知道它也是一只鸟,就是尺寸变小了而已。
你有没有发现,我们在解读这幅带有鸟的图片的时候,关注了更多的是小鸟这个动物本身。如果更具体点是关注的鸟嘴,翅膀等等。
那图片那么大,像素那么多,还有绿色的图像部分,我们好像熟视无睹,根本就没有关于那些地方。
既然我们都不关注那些地方,那它对于我们解读这幅图像是不是就是没那么重要,我们是不是可以不要它了,不看他了。即便它存在,我们也不关注它,因为它对于我们关注的问题没有那么重要了。总结起来,就是:
- 这里就是说,同样的一个图案只需要看一小部分,而不是整个部分。
- 对像素进行抽样,而不改变对象本身
然后,再看下右上角的那个动物,也是一只鸟,尽管我看它长的有点像雏鸡,那它就是一只不一样的鸟。我们也找到了鸟的一些基本特征, 比如:鸟嘴,尖尖的,翅膀,锋利的爪子,它都有。
可是,细心看就会发现,1和2进行对比,鸟的站姿变了,鸟嘴在图像中的相对位置也变了,一个在图像的左上角,另一个在图像的右上角。鸟嘴尽管都是尖尖的,但是颜色也变了,但是我们还是说它是一只鸟。这里就引出来了CNN的一些专有的特点属性了
1.4.1、局部感知
卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是与周围局部的像素联系较为紧密,距离较远的像素相关性则较弱。
因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。
在这里,将CNN与全连接full connect(FC)网络进行一个对比。
假设一次训练样本中输入图像像素大小为1000*1000,隐藏层神经元为100个(这里就不选用上面图中提到的一百万个了,当时一直以为这个隐藏层单元数量与输入图像的像素数目是有关系的,纠结了好久)
在全连接网络中:每个隐层神经元都连接图像的每一个像素点,就有1000*1000*100=10^8
个连接,也就是会有10^8
个权值参数
在局部连接(CNN)网络中:假设CNN中每一个节点与上层节点同位置附件10x10的窗口相连接,每一个隐藏层的神经元只关注于这个卷积窗口,此时就是会有10*10*100=10^4
个连接,也就是会有10^4个
权值参数,其权值连接个数比原来减少了四个数量级。
下图直观的描述了全连接网络和CNN局部感知网络的神经元连接方式:
1.4.2 、权值共享
先来看一下全连接神经网络的一般情况,就如下面这样:
全连接fc
中,上一次的输入节点,会与下一层的所有输出节点,都产生连接,故名全连接。这样,节点与节点之间的权重,是独立的,是不会共享的。
但是,在卷积神经网络中,一个3*3
卷积核,就可以便利一个channel
的整幅图像,与所有的像素节点产生了联系。此时,相比于FC
层,CNN
对Input layer
中的值,就是共享了权重参数的。也就是一个卷积核,在channel维度上,会应用到输入数组所有的计算上。输出多少个channel,也就会有多少个卷积核。
共享权值和不共享之间最大差别,就是参数量降低了很多。同时,一套权值也使得目标无论是在图像中的哪个位置,经过卷积后得到的特征,是一样的。
1.5、1*1卷积核有什么作用?
我们一直都在说3*3
卷积核,或者是1*1
卷积核。其实,这里描述的都是在一个channel
维度上的大小。而真正的大小,应该还要算上channel
的数量。
比如:
- 输入尺寸是
256*256*3
; - 输出的
channel维度为32
; - 那么卷积核的大小就该是
3*3*32
。这样3*3
的卷积核,分别在输入的3个channel
上进行卷积操作,得到3个卷积后的值; - 再把分别在不同
channel
上卷积得到的值,求和得到1个输出的channel
。
那此时,要求的输出,是要有32个channel
,那是不是意味着要有32个类似的3*3卷积核
,上述的方式做32次
,输出的channel就变成了32
。
上述的这个过程,可以发现,卷积操作改变了channel的维度
,由3维变成了32维
,并且在每一个channel上,都是融合了输入的3个channel
得到的,起到了在通道维度上的特征融合。
1*1卷积核的作用汇总:
-
增加非线性:1x1的卷积核的卷积过程,相当于全连接层的计算过程,并且还加入了非线性激活函数,从而可以增加网络的非线性,使得网络可以表达更加复杂的特征。
-
特征维度改变:通过控制卷积核的数量,达到通道数大小的放缩。特征降维带来的好处是可以减少参数和减少计算量。
降维有什么好处?
- 减少权重个数
- 减少计算量
1.6、卷积核输出尺寸计算
问题如下:假设输入一个维度为224x224x3
的数据,然后采用5个大小为7x7卷积核
、stride为1
,没有padding
的进行数据操作。那么神经网络下一层所接收到的数据维度是多少?
A、218x218x5
B、217x217x8
C、217x217x3
D、220x220x5
解析:选A,计算方式如下:
- 首先,输入数据,经过5个卷积核操作,输出的channel肯定等于5,排除BC;
- 其次,不采用
padding
形式进行填补,故经过7x7
的卷积之后,上下左右均少了3
个数据,故224-3x2=218
,所以是218x218x5
。(如果没有给stride,默认stride=1)
计算公式:
二、transformer
自注意力机制(Self-Attention Mechanism)
是深度学习中一种用于捕捉序列间依赖关系的重要技术,常用于自然语言处理和计算机视觉等领域。在自注意力机制中,transformer
模型(或称为"Attention Is All You Need"
模型)是一种典型的应用。
在transformer
模型中,自注意力机制被用于处理输入序列的编码和解码。下面是transformer
模型中自注意力机制的基本流程:
- 输入表示:
输入序列首先通过线性变换,将每个输入元素(如单词或像素)映射到一个较低维度的向量表示,分别称为查询(Query)
、键(Key)
和值(Value)
向量。这三种向量通常是通过对输入向量进行线性变换得到的。
- 相似度计算:
对于每个查询向量,计算它与所有键向量之间的相似度得分。通常使用点积(dot product)
或其他方法(如缩放点积)来计算相似度得分。
- 注意力权重计算:
将相似度得分进行归一化,得到注意力权重,用于衡量键向量对于当前查询向量的重要性。较高的相似度得分对应于较高的注意力权重。
- 上下文向量计算:
使用注意力权重对值向量进行加权求和,得到上下文向量。上下文向量综合考虑了与当前查询向量相关的所有值向量。
- 多头注意力机制(Mult Self-Attention):
为了提高模型的表达能力和泛化性能,通常会使用多个独立的自注意力机制,称为多头注意力机制。每个注意力头都有自己的查询、键和值向量,并生成一个独立的上下文向量。
- 输出表示:
最后,将多个头的上下文向量进行拼接或线性变换,得到最终的输出表示。这个输出表示可以进一步传递给下一层的自注意力机制,或者用于其他任务,如语言建模、机器翻译等。
自注意力机制通过计算序列中每个元素与其他元素的关联度,从而能够捕捉到元素之间的长程依赖关系。这种机制使得transformer
模型在处理序列数据时具有较好的并行性和学习能力,因此在自然语言处理领域的许多任务中取得了显著的成功。
https://www.nowcoder.com/discuss/352537292575174656
三、CNN 和 transformer 对比
卷积神经网络(Convolutional Neural Network,CNN)
和Transformer
是两种在图像视觉深度学习中常用的模型。它们各自具有不同的优点和缺点。
CNN的优点:
- 层次化特征学习:CNN通过使用卷积层、池化层和全连接层的组合,能够自动学习输入图像的层次化特征表示。这使得CNN在处理图像等二维数据时非常有效。
- 参数共享:CNN中的卷积层使用了参数共享的策略,即在整个图像中共享卷积核的权重。这大大减少了网络中需要学习的参数数量,从而降低了模型的复杂性和计算成本。
- 位置不变性:由于卷积操作在图像的不同位置上共享权重,CNN对于输入图像的平移和部分尺度变化具有一定程度的位置不变性,这对于处理图像中的物体识别和检测任务非常有用。
CNN的缺点:
- 局限于固定大小的输入:CNN通常需要固定大小的输入图像,这对于处理不同尺寸的图像可能存在问题。在处理变形或不规则形状的图像时,需要进行额外的预处理或使用更复杂的网络结构。
- 缺乏全局上下文信息:由于卷积和池化操作的局部性质,CNN在处理图像时可能缺乏全局上下文信息。这对于一些需要全局信息的任务,如图像分割,可能限制了CNN的性能。
Transformer的优点:
- 全局上下文建模:Transformer通过自注意力机制(self-attention)可以在输入序列中捕捉全局依赖关系,有效地对输入进行全局建模。这使得Transformer在处理长序列数据时表现优异,包括图像中的像素序列。
- 可扩展性:Transformer的结构非常灵活,可以通过增加或减少层、调整隐藏层的大小等方式进行扩展和定制。这使得Transformer在处理不同规模和复杂度的任务时非常适用。
Transformer的缺点:
- 计算和内存开销:相对于CNN,Transformer在处理图像等高维数据时通常需要更多的计算和内存资源。这使得Transformer在大规模图像数据集上的训练和推理过程更加昂贵。
- 需要位置编码:Transformer无法直接处理空间结构的数据,如图像。为了将图像输入Transformer,需要额外的位置编码来表示像素之间的空间关系。这增加了模型的复杂性和计算成本。
- 对于小数据集的欠拟合:相对于CNN,Transformer在小数据集上的表现可能不如预期。
总的来说,CNN在处理图像等二维数据时具有天然的优势,能够有效地学习层次化特征表示和处理空间不变性。而Transformer在处理图像时需要额外的预处理和较大的计算资源,但在处理长序列数据和全局上下文建模方面具有优势。选择适当的模型取决于具体的任务和数据集特征。在实践中,也可以结合两种模型的优点,如使用CNN提取图像特征,然后使用Transformer进行全局建模和推理。
transformer这种在小数据集上,相对于CNN较差的原因是什么?
ViT原论文中最核心的结论是,当拥有足够多的数据进行预训练的时候,ViT的表现就会超过CNN,突破transformer缺少归纳偏置的限制,可以在下游任务中获得较好的迁移效果。
但是当训练数据集不够大的时候,ViT的表现通常比同等大小的ResNets要差一些,原因是什么呢?
因为Transformer和CNN相比缺少归纳偏置(inductive bias),即一种先验知识,提前做好的假设。CNN具有两种归纳偏置:
- 一种是局部性共享(locality/two-dimensional neighborhood structure),即图片上相邻的区域具有相似的特征;
- 一种是平移不变形(translation equivariance)先进行卷积再平移,和先平移再卷积,得到的结果是一样的,其中g代表卷积操作,f代表平移操作。
当CNN
具有以上两种归纳偏置,就有了很多先验信息,需要相对少的数据就可以学习一个比较好的模型。Transformer模型在没有足够数据支撑的情况下,由于其自由度较高、参数较多,可能无法充分捕捉到数据中的复杂模式和规律