① 为什么说Transformer的注意力机制是相对廉价的注意力机制相对更对于RNN系列及CNN系列算法有何优势
QA形式对自然语言处理中注意力机制(Attention)进行总结,并对Transformer进行深入解析。
二、Transformer(Attention Is All You Need)详解
1、Transformer的整体架构是怎样的?由哪些部分组成?
2、Transformer Encoder 与 Transformer Decoder 有哪些不同?
3、Encoder-Decoder attention 与self-attention mechanism有哪些不同?
4、multi-head self-attention mechanism具体的计算过程是怎样的?
5、Transformer在GPT和Bert等词向量预训练模型中具体是怎么应用的?有什么变化?
一、Attention机制剖析
1、为什么要引入Attention机制?
根据通用近似定理,前馈网络和循环网络都有很强的能力。但为什么还要引入注意力机制呢?
计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。
可以借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力。
2、Attention机制有哪些?(怎么分类?)
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只 选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:
聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
显着性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显着性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显着性的注意力机制。
在人工神经网络中,注意力机制一般就特指聚焦式注意力。
3、Attention机制的计算流程是怎样的?
Attention机制的实质其实就是一个寻址(addressing)的过程,如上图所示:给定一个和任务相关的查询Query向量q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
step1-信息输入:用X= [x1, · · · , xN ]表示N 个输入信息;
step2-注意力分布计算:令Key=Value=X,则可以给出注意力分布
我们将称之为注意力分布(概率分布),为注意力打分机制,有几种打分机制:
step3-信息加权平均:注意力分布可以解释为在上下文查询q时,第i个信息受关注的程度,采用一种“软性”的信息选择机制对输入信息X进行编码为:
这种编码方式为软性注意力机制(soft Attention),软性注意力机制有两种:普通模式(Key=Value=X)和键值对模式(Key!=Value)。
4、Attention机制的变种有哪些?
与普通的Attention机制(上图左)相比,Attention机制有哪些变种呢?
变种1-硬性注意力:之前提到的注意力是软性注意力,其选择的信息是所有输入信息在注意力 分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。硬性注意力模型的缺点:
变种2-键值对注意力:即上图右边的键值对模式,此时Key!=Value,注意力函数变为:
变种3-多头注意力:多头注意力(multi-head attention)是利用多个查询Q = [q1, · · · , qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接:
5、一种强大的Attention机制:为什么自注意力模型(self-Attention model)在长距离序列中如此强大?
(1)卷积或循环神经网络难道不能处理长距离序列吗?
当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列,如图所示:
从上图可以看出,无论卷积还是循环神经网络其实都是对变长序列的一种“局部编码”:卷积神经网络显然是基于N-gram的局部编码;而对于循环神经网络,由于梯度消失等问题也只能建立短距离依赖。
(2)要解决这种短距离依赖的“局部编码”问题,从而对输入序列建立长距离依赖关系,有哪些办法呢?
由上图可以看出,全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。
这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。
总体来说,为什么自注意力模型(self-Attention model)如此强大:利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。
(3)自注意力模型(self-Attention model)具体的计算流程是怎样的呢?
同样,给出信息输入:用X = [x1, · · · , xN ]表示N 个输入信息;通过线性变换得到为查询向量序列,键向量序列和值向量序列:
上面的公式可以看出,self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。
注意力计算公式为:
自注意力模型(self-Attention model)中,通常使用缩放点积来作为注意力打分函数,输出向量序列可以写为:
二、Transformer(Attention Is All You Need)详解
从Transformer这篇论文的题目可以看出,Transformer的核心就是Attention,这也就是为什么本文会在剖析玩Attention机制之后会引出Transformer,如果对上面的Attention机制特别是自注意力模型(self-Attention model)理解后,Transformer就很容易理解了。
1、Transformer的整体架构是怎样的?由哪些部分组成?
Transformer其实这就是一个Seq2Seq模型,左边一个encoder把输入读进去,右边一个decoder得到输出:
Transformer=Transformer Encoder+Transformer Decoder
(1)Transformer Encoder(N=6层,每层包括2个sub-layers):
sub-layer-1:multi-head self-attention mechanism,用来进行self-attention。
sub-layer-2:Position-wise Feed-forward Networks,简单的全连接网络,对每个position的向量分别进行相同的操作,包括两个线性变换和一个ReLU激活输出(输入输出层的维度都为512,中间层为2048):
每个sub-layer都使用了残差网络:
(2)Transformer Decoder(N=6层,每层包括3个sub-layers):
sub-layer-1:Masked multi-head self-attention mechanism,用来进行self-attention,与Encoder不同:由于是序列生成过程,所以在时刻 i 的时候,大于 i 的时刻都没有结果,只有小于 i 的时刻有结果,因此需要做Mask。
sub-layer-2:Position-wise Feed-forward Networks,同Encoder。
sub-layer-3:Encoder-Decoder attention计算。
2、Transformer Encoder 与 Transformer Decoder 有哪些不同?
(1)multi-head self-attention mechanism不同,Encoder中不需要使用Masked,而Decoder中需要使用Masked;
(2)Decoder中多了一层Encoder-Decoder attention,这与 self-attention mechanism不同。
3、Encoder-Decoder attention 与self-attention mechanism有哪些不同?
它们都是用了 multi-head计算,不过Encoder-Decoder attention采用传统的attention机制,其中的Query是self-attention mechanism已经计算出的上一时间i处的编码值,Key和Value都是Encoder的输出,这与self-attention mechanism不同。代码中具体体现:
4、multi-head self-attention mechanism具体的计算过程是怎样的?
Transformer中的Attention机制由Scaled Dot-Proct Attention和Multi-Head Attention组成,上图给出了整体流程。下面具体介绍各个环节:
Expand:实际上是经过线性变换,生成Q、K、V三个向量;
Split heads: 进行分头操作,在原文中将原来每个位置512维度分成8个head,每个head维度变为64;
Self Attention:对每个head进行Self Attention,具体过程和第一部分介绍的一致;
Concat heads:对进行完Self Attention每个head进行拼接;
上述过程公式为:
5、Transformer在GPT和Bert等词向量预训练模型中具体是怎么应用的?有什么变化?
GPT中训练的是单向语言模型,其实就是直接应用Transformer Decoder;
Bert中训练的是双向语言模型,应用了Transformer Encoder部分,不过在Encoder基础上还做了Masked操作;
BERT Transformer 使用双向self-attention,而GPT Transformer 使用受限制的self-attention,其中每个token只能处理其左侧的上下文。双向 Transformer 通常被称为“Transformer encoder”,而左侧上下文被称为“Transformer decoder”,decoder是不能获要预测的信息的。
② SENet及对轻量级网络的一些理解
转自: https://zhuanlan.hu.com/p/71995304
受限于硬件的羸弱,深度学习在上世纪的发展一直是不温不火,直到2012年,Alexnet横空出世,深度学习才开始前所未有的大发展。随着技术的发展,卷积神经网络逐渐取代了之前全连接的神经网络,成为深度学习领域的主流算法。
卷积神经网络的优势在于能够更好的提取特征和权值共享,自Alexnet之后,VGG又提出了神经网络的深度越深,效果越好的思想。自此深度成为构建网络时所考虑的第一要素。此时,又有人提出了Inception模型,这是人们在关注深度之外第一次关注网络的时间复杂度和空间复杂度。
图1
如图1所示,就是Inception v1的模型,该模型主要利用了1x1卷积进行了降维处理,达到了减小网络参数量和计算量的效果。在接下来的改进中,Inception又提出了利用两层3x3网络取代一层5x5网络这样的奇思妙想,进一步达到了减轻网络复杂度的作用。
如图2所示,就是5x5卷积变成3x3卷积的示意图。
图2
从此之后,轻量级网络开始盛行。诸如Squeezenet,Mobilenet等都是轻量级网络中的杰出代表。
自Inception之后,人们已经不再通过暴力的增加网络层数的方法来企图获得更高的准确率了,然而面对复杂的问题,过浅的网络很难达到理想的效果,所以加深网络依然是解决图像分类问题的最佳途径。但是增加网络很容易造成overfiting甚至训练集上得到的效果也比浅层网络要差,所以如何有效的增加网络层数就成了深度学习领域研究的重中之重。
为了解决这个问题,很多学者提出了自己的见解,如resnet所讲述的残差网络就是一例。然而残差网络虽然能够增加层数但是层数增加到三位数之后再增加也就有些无能为力了。此时作者另辟蹊径,提出了一种新型的网络结构SENet,这个网络结构可以对所有网络进行改进然后做到真正有效的增加层数,无论原网络层数有多深,通过加入SENet,都能增加相当数量的深度,并有效的提高实验效果。值得一提的是SENet在2017年的ImageNet挑战赛获得冠军。
从Inception开始,学者们提出网络的时候就主要是提出一个block,然后用这个block像搭积木一样的搭出整个网络。同样,作者也是用这个方法设计网络的,作者提出了一个Squeeze-and-Excitation block,然后用这个SE block搭出了整个网络。
卷积神经网络虽然有诸多的好处,但是卷积神经网络捕捉到的只是局部的信息,假如卷积核是7x7,那么感受野的大小也只有7x7。但是一张图片的每一个像素点之间都是互相有联系的,之前使用局部感受野的网络都忽略掉了全局像素点之间的关联信息,使得实验效果不够理想。Inception通过多尺度的卷积核,找到了提取一张feature map上全局关联信息的方法,然而直到本文网络之前都没有谁考虑各通道之间的全局关联信息。所以作者将关注点放到了通道关联信息上,作者发现提取出通道之间互相关联的信息可以有效的增加神经网络的分类准确率。
图3
如图3所示,就是一个SE block。对于任意给定的变换
(1)
我们可以构造一个对应的SE块来进行特征重新校准。首先通过挤压操作,跨越空间维度WXH产生一个全局描述符,这个全局描述符聚合了所有通道的空间信息,之后再进行激励操作,其中通过基于通道依赖性的门控机制为每个通道学习特定采样的激活,控制每个通道的激励。然后特征映射U被重新加权以生成SE块的输出,再与之前的block结合在一起,就达到了提取通道关联信息的目的。
SE网络可以通过简单地堆叠SE block的集合来生成,也可以用作架构中任意深度的原始块的直接替换。
新CNN架构的开发是一项具有挑战性的工程任务,通常涉及许多新的超参数和网络各层配置的选择。相比之下,上面概述的SE块的设计是简单的,并且可以直接与现有的最新架构一起使用,其卷积层可以通过直接用对应的SE层来替换从而使效果得到加强。另外,SE块在计算上是轻量级的,并且在模型复杂性和计算负担方面仅稍微增加。为了支持这些声明,作者开发了一些SENets,即SE-ResNet,SE-Inception,SE-ResNeXt和SE-Inception-ResNet,并在ImageNet 2012数据集上对SENets进行了广泛的评估。此外,为了证明SE块的一般适用性,作者还呈现了ImageNet之外的结果,这表明作者所提出的方法不受限于特定的数据集或任务。
图3所示的Ftr,我们可以将其看做一个普通的卷积层,事实上,在SE-ResNet,SE-Inception中,对应的Ftr分别就是残差块和Inception块。
Squeeze操作的目的其实就是将空间信息提取出来,为了网络的轻量级,事实上我们还希望能够将信息进行压缩,不要增加过大的时间复杂度和空间复杂度。
因此作者选取了全局平均池化进行Squeeze操作。如图3所示,我们将通过全局平均池化得到的向量设为Z,那么z的第c个元素即可通过公式(2)进行计算:
(2)
这个操作实际上是在得到U之后再进行的全局平均池化。一般CNN的每个通道的滤波器都是对局部感受野进行特征提取,因此U中的每个feature map都无法利用与其他feature map之间的关联关系,而且在较低网络层次上对应到原图尺寸上的感受野相对于较高层数的来说,无疑是很小的,这样空间关联信息的流失就会更加严重。
那么作者提出的这个Squeeze,实际上就相当于将感受野扩展到了全局,自然能够提取的特征就更为丰富,通过训练得到的分类识别的准确率就更高了。
为了利用在上一个操作中得到的全局信息,作者就提出了Excitation这个操作来全面捕获通道相关性。如图4和图5所示,就分别是SE-Inception Mole和SE-Inception Mole。作者指出我们所需的这个Excitation必须是灵活的同时又要能学习到非互斥的信息。
那么通过观察图4和图5我们也能轻易的得知:
(3)
其中指的是Relu函数,指的是sigmoid函数,r为压缩比例。这实际上就是两个全连接层再加上两个激活层。第一层全连接层的作用就是将global pooling所得到的全局信息进行压缩,作者通过实验发现,压缩比例r=16的时候实验结果最为理想。那么第二层全连接层的作用就是将被压缩的向量进行还原,还原到和global pooling层之后的向量大小一致。然后再将该向量与Ftr得到的三维卷积进行乘运算,实际上该向量中的每个值就与三维卷积中每个通道对应的feature map 相乘,这样每一个feather map就得到了与其他通道的空间关联特征了。
图4
那么图4和图5中的C指的就是通道的数目,而指的就是这个模块输入的feather map的尺寸大小。而通过图示我们也能清楚的看到SE block可以通用的加在所有的网络结构中从而达到提升性能的作用。
SENet通过堆叠一组SE块来构建。实际上,它是通过用原始块的SE对应部分(即SE残差块)替换每个原始块(即残差块)而产生的,作者在表1中描述了SE-ResNet-50和SE-ResNeXt-50的架构。
图5
表1
作者通过实验发现,SE block改进resnet-50时,所增加参数量不超过10%,却提升了1.5个百分点的准确率,并且作者后来通过实验发现整体网络最末尾的SE block对效果提升作用很小,去除掉这些block网络的准确率也不过下降0.1个百分点,而增加的额外参数量就减小到4%了。如表2所示,是几个原有的网络结构的top-1和top-5的准确率,original表示的是网络提出者得到的结果,而re-implementation指的是作者复现的结果,而SENet指的是作者运用SENet加强之后得到的结果,很明显有显着的准确率提升。
表2(该表截取自论文)
同时,作者还提出了一个计算模型复杂度的方法来探究运用了SENet之后,模型的参数量到底增加了多少,很显然准确率增加百分比相同的情况下,参数量增加越少的话,算法性价比越高。
两个全连接层的参数量都是,那么两个全连接层的参数量就是。以resnet为例,假设resnet一共包含了S个stage,其中第s个stage里面包含了个重复的残差块,那么用SENet加强过的resnet所增加的参数量就可以用公式(4)进行计算:
(4)
SENet的结构非常简单,特别容易部署,不需要引入新的函数或者卷积层,并且增加的参数量微乎其微,是一个有效增加神经网络分类准确率的方法。同时,作者通过实验发现,在Faster-rcnn等用于实现目标检测的网络中增加SENet块进行加强,也能得到很好的效果,这进一步证明了SENet网络的通用性。
接下来,作者思考了最后一个问题,增加的SE block添加在原有block中位置的不同会不会影响到实验结果。为此,作者进行了对比试验。
如图6所示, 是原来的残差网络与作者在四个不同位置添加了SE block的四种不同的网络结构,总共是五个不同的网络结构。
图6
表3
而表3即是四种不同的SENet结构的错误率对比,我们能够看到SE-PRE结构是其中相对表现最好的,这说明了SE block块所在位置确实会影响到神经网络的整体效果,所以我们在运用SENet时,对于其所添加的位置应该好好斟酌。
这篇论文提出了一个名为名为SE block的架构单元,通过使网络能够执行动态的信道特征重新校准来提高网络的表示能力。实验证明了SENets的有效性,它在多个数据集和任务之间实现了最先进的性能。此外,SE块揭示了以前的体系结构无法充分地对通道相关关系建模。并且SE块生成的特征重要度值可以用于其他任务,例如用于模型压缩的网络剪枝。
③ 全连接层,1*1卷积,GAP的关系
当前层每一个神经元和前一层所有的神经元都连接。最后一个神经元输出的是一个值。
对于CNN,如果前一层输出的是H W C的feature map,全连接层由N个维度为H W C的卷积核组成。输出N个值。
CNN提取的是局部特征,全连接层的作用就是整合这些局部特征,将feature map整合成一个值,提高位置不变性。
这里用一只小猫解释为什么需要全连接层,还蛮清楚的
参数量暴增,在网络中全连接层的参数是最多的。
由于训练过程中全连接层神经元尺寸确定,所以会限制输入图像的尺寸。
1 1卷积,顾名思义,卷积核的尺寸为1 1,通道数和输入特征通道数相同,但是卷积核的个数可以改变,实现升维和降维。
卷积核的通道数和输入特征通道数相同。
卷积核的个数决定输出特征的通道数。
全连接层会打破特征原有的空间信息,将特征打平用于下一步处理。
1*1卷积后,特征的分辨率没有发生变化,但是通道数改变了。
-不改变特征图尺寸,对输入尺寸无限制。
-参数量大大减少。可以先降维再升维,在减少计算量的同时实现和其他卷积操作相同的功能。
将Feature map的每一个通道内的像素值相加求平均,得到一个数值,用该值表示对应的特征图。
输出结果直接送入softmax。
-减少参数量,代替全连接层。
-减少过拟合。
-直接赋予每一个channel实际的类别意义。
参考1
参考2
NIN论文的总结
这个也还行
④ 注意力机制与外部记忆
根据通用近似定理,前馈网络和循环网络都有很强的能力。但由于优化算法和计算能力的限制,在实践中很难达到通用近似的能力。
神经网络中可以存储的信息量称为 网络容量(Network Capacity) 。一般来讲,利用一组神经元来存储信息时,其 存储容量和神经元的数量以及网络的复杂度成正比 。如果要存储越多的信息,神经元数量就要越多或者网络要越复杂,进而导致神经网络的参数成倍地增加。
大脑神经系统有两个重要机制可以解决信息过载问题: 注意力和记忆机制 。我们可以借鉴人脑解决信息过载的机制,从两方面来提高神经网络处理信息的能力。 一方面是注意力,通过自上而下的信息选择机制来过滤掉大量的无关信息;另一方面是引入额外的外部记忆,优化神经网络的记忆结构来提高神经网络存储信息的容量 。
在计算能力有限情况下,注意力机制(Attention Mechanism)作为一种资源分配方案,将计算资源分配给更重要的任务,是解决信息超载问题的主要手段。
注意力是一种人类不可或缺的复杂认知功能,指人可以在关注一些信息的同时忽略另一些信息的选择能力 。
注意力一般分为两种:一种是自上而下的有意识的注意力,称为 聚焦式(Focus)注意力 。聚焦式注意力是指有预定目的、依赖任务的、主动地有意识地聚焦于某一对象的注意力;另一种是自下而上的无意识的注意力,称为 基于显着性(Saliency-Based)的注意力 。基于显着性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关。
一个和注意力有关的例子是 鸡尾酒会效应 。当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音(聚焦式注意力)。同时,如果未注意到的背景声中有重要的词(比如他的名字),他会马上注意到(显着性注意力)。
在目前的神经网络中,我们 可以将最大汇聚(Max Pooling)、门控(Gating)机制来近似地看作是自下而上的基于显着性的注意力机制 。除此之外,自上而下的会聚式注意力也是一种有效的信息选择方式。
用 表示 组输入信息,其中每个向量 都表示一组输入信息。为了节省计算资源,不需要将所有信息都输入到神经网络,只需要从 中选择一些和任务相关的信息。 注意力机制的计算可以分为两步:一是在所有输入信息上计算注意力分布,二是根据注意力分布来计算输入信息的加权平均 。
给定一个和任务相关的查询向量 ,我们用注意力变量 来表示被选择信息的索引位置,即 表示选择了第 个输入向量。为了方便计算,我们采用一种“软性”的信息选择机制,首先计算在给定 和 下,选择第 个输入向量的概率 :
其中 称为注意力分布(Attention Distribution), 为 注意力打分函数 ,可以使用以下几种方式来计算:
其中 为可学习的网络参数, 为输入向量的维度。理论上,加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘积,从而计算效率更高。但当输入向量的维度 比较高,点积模型的值通常有比较大方差,从而导致 函数的梯度会比较小。因此,缩放点积模型可以较好地解决这个问题。
上式称为 软性注意力机制(Soft Attention Mechanism) 。下图给出了软性注意力机制的示例。
上面提到的注意力是 软性注意力,其选择的信息是所有输入向量在注意力分布下的期望。此外,还有一种注意力是只关注到某一个输入向量,叫做硬性注意力 。
硬性注意力有两种实现方式:
其中 为概率最大的输入向量的下标,即
硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布间的函数关系不可导,因此无法用反向传播算法进行训练(硬性注意力需要通过强化学习来进行训练) 。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。
更一般地,我们可以用 键值对(key-value pair) 格式来表示输入信息,其中“键”用来计算注意力分布 ,“值”用来计算聚合信息。
用 表示 组输入信息,给定任务相关的查询向量 时,注意力函数为:
下图给出键值对注意力机制的示例。当 时,键值对模式就等价于普通的注意力机制。
多头注意力(Multi-Head Attention)是利用多个查询 ,来平行地计算从输入信息中选取多组信息。每个注意力关注输入信息的不同部分 。
其中 表示向量拼接。
在之前介绍中,我们假设所有的输入信息是同等重要的,是一种扁平(Flat)结构,注意力分布实际上是在所有输入信息上的多项分布。但 如果输入信息本身具有层次结构,比如文本可以分为词、句子、段落、篇章等不同粒度的层次,我们可以使用层次化的注意力来进行更好的信息选择 。
注意力机制一般可以用作一个神经网络中的组件。
注意力机制可以分为两步:一是计算注意力分布 ,二是根据 来计算输入信息的加权平均。我们可以只利用注意力机制中的第一步,并 将注意力分布作为一个软性的指针(pointer)来指出相关信息的位置 。
指针网络(Pointer Network) 是一种序列到序列模型, 输入是长度为 的向量序列 , 输出是下标序列 。
和一般的序列到序列任务不同,这里的输出序列是输入序列的下标(索引) 。比如输入一组乱序的数字,输出为按大小排序的输入数字序列的下标。比如输入为20, 5, 10,输出为1, 3, 2。
条件概率 可以写为:
其中条件概率 可以通过注意力分布来计算。假设用一个循环神经网络对 进行编码得到向量 ,则:
其中 为在解码过程的第 步时,每个输入向量的未归一化的注意力分布:
其中 为可学习的参数。下图给出指针网络的示例。
当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。
基于卷积或循环网络的序列编码都是可以看做是一种局部的编码方式,只建模了输入信息的局部依赖关系。虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失问题,实际上也只能建立短距离依赖关系 。如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是 增加网络的层数 ,通过一个深层网络来获取远距离的信息交互;另一种方法是 使用全连接网络 。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们就可以 利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model) 。
假设输入序列为 ,输出序列为 ,首先我们可以通过线性变换得到三组向量序列:
其中 分别为查询向量序列,键向量序列和值向量序列, 分别为可学习的参数矩阵。
利用键值对的注意力函数,可以得到输出向量 :
其中 为输出和输入向量序列的位置, 连接权重 由注意力机制动态生成 。
下图给出全连接模型和自注意力模型的对比,其中实线表示为可学习的权重,虚线表示动态生成的权重。 由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列 。
自注意力模型可以作为神经网络中的一层来使用,既可以用来替换卷积层和循环层,也可以和它们一起交替使用。
为了增强网络容量,我们可以 引入辅助记忆单元,将一些信息保存辅助记忆中,在需要时再进行读取,这样可以有效地增加网络容量 。这个引入辅助记忆单元一般称为 外部记忆(External Memory) ,以区别与循环神经网络的内部记忆(即隐状态)。
生理学家发现信息是作为一种 整体效应(collective effect) 存储在大脑组织中。当大脑皮层的不同部位损伤时,其导致的不同行为表现似乎取决于损伤的程度而不是损伤的确切位置。 大脑组织的每个部分似乎都携带一些导致相似行为的信息。也就是说,记忆在大脑皮层是分布式存储的,而不是存储于某个局部区域 。
人脑中的记忆具有 周期性 和 联想性 。
长期记忆可以类比于人工神经网络中的权重参数,而短期记忆可以类比于人工神经网络中的隐状态 。
除了长期记忆和短期记忆,人脑中还会存在一个“缓存”,称为 工作记忆(Working Memory) 。在执行某个认知行为(比如记下电话号码,算术运算)时,工作记忆是一个记忆的临时存储和处理系统,维持时间通常为几秒钟。
和之前介绍的LSTM中的记忆单元相比,外部记忆可以存储更多的信息,并且不直接参与计算,通过读写接口来进行操作。而 LSTM模型中的记忆单元包含了信息存储和计算两种功能,不能存储太多的信息。因此,LSTM中的记忆单元可以类比于计算机中寄存器,而外部记忆可以类比于计算机中的存储器:内存、磁带或硬盘等 。
借鉴人脑中工作记忆,可以在神经网络中引入一个外部记忆单元来提高网络容量。 外部记忆的实现途径有两种:一种是结构化的记忆,这种记忆和计算机中的信息存储方法比较类似,可以分为多个记忆片段,并按照一定的结构来存储;另一种是基于神经动力学的联想记忆,这种记忆方式具有更好的生物学解释性 。
一个不太严格的类比表格如下:
为了增强网络容量,一种比较简单的方式是引入结构化的记忆模块, 将和任务相关的短期记忆保存在记忆中,需要时再进行读取 。这种装备外部记忆的神经网络也称为 记忆网络(Memory Network,MN) 或 记忆增强神经网络(Memory Augmented Neural Network,MANN) 。
记忆网络结构如图:
一般有以下几个模块构成:
这种结构化的外部记忆是带有地址的,即每个记忆片段都可以按地址读取和写入。要实现类似于人脑神经网络的联想记忆能力,就需要按内容寻址的方式进行定位,然后进行读取或写入操作。 按内容寻址通常使用注意力机制来进行。通过注意力机制可以实现一种“软性”的寻址方式,即计算一个在所有记忆片段上的分布,而不是一个单一的绝对地址 。比如读取模型 的实现方式可以为:
其中 是主网络生成的查询向量, 为打分函数。类比于计算机的存储器读取, 计算注意力分布的过程相当于是计算机的“寻址”过程,信息加权平均的过程相当于计算机的“内容读取”过程 。因此,结构化的外部记忆也是一种联想记忆,只是其结构以及读写的操作方式更像是受计算机架构的启发。
通过引入外部记忆,可以将神经网络的参数和记忆容量的“分离”,即在少量增加网络参数的条件下可以大幅增加网络容量。 注意力机制可以看做是一个接口,将信息的存储与计算分离 。
端到端记忆网络(End-To-End Memory Network,MemN2N) 采用一种可微的网络结构,可以多次从外部记忆中读取信息。 在端到端记忆网络中,外部记忆单元是只读的 。
给定一组需要存储的信息 ,首先将其转换成两组记忆片段 和 ,分别存放在两个外部记忆单元中,其中 用来进行寻址, 用来进行输出。
主网络根据输入 生成 ,并使用注意力机制来从外部记忆中读取相关信息 :
并产生输出:
其中 为预测函数。当应用到分类任务时, 可以设为softmax 函数。
为了实现更新复杂的计算,我们可以让主网络和外部记忆进行多轮交互。在第 轮交互中,主网络根据上次从外部记忆中读取的信息 ,产生新的查询向量:
其中 为初始的查询向量, 。
假设第 轮交互的外部记忆为 和 ,主网络从外部记忆读取信息为:
端到端记忆网络结构如图:
⑤ 全连接层
看了几天的CNN ,一直没太理解FC在网络中的作用。
全连接层(fully connected layers,FC)
在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。比如 mnist,前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。
一般使用ReLU激活函数
最后一层全连接层一般使用softmax进行分类
⑥ 理解神经网络卷积层、全连接层
https://zhuanlan.hu.com/p/32472241
卷积神经网络,这玩意儿乍一听像是生物和数学再带点计算机技术混合起来的奇怪东西。奇怪归奇怪,不得不说,卷积神经网络是计算机视觉领域最有影响力的创造之一。
2012年是卷积神经网络崛起之年。这一年,Alex Krizhevsky带着卷积神经网络参加了ImageNet竞赛(其重要程度相当于奥运会)并一鸣惊人,将识别错误率从26%降到了15%,。从那开始,很多公司开始使用深度学习作为他们服务的核心。比如,Facebook在他们的自动标记算法中使用了它,Google在照片搜索中使用了,Amazon在商品推荐中使用,Printerst应用于为他们的家庭饲养服务提供个性化定制,而Instagram应用于他们的搜索引擎。
然而,神经网络最开始也是最多的应用领域是图像处理。那我们就挑这块来聊聊,怎样使用卷积神经网络(下面简称CNN)来进行图像分类。
图像分类是指,向机器输入一张图片,然后机器告诉我们这张图片的类别(一只猫,一条狗等等),或者如果它不确定的话,它会告诉我们属于某个类别的可能性(很可能是条狗但是我不太确定)。对我们人类来说,这件事情简单的不能再简单了,从出生起,我们就可以很快地识别周围的物体是什么。当我们看到一个场景,我们总能快速地识别出所有物体,甚至是下意识的,没有经过有意的思考。但这种能力,机器并不具有。所以我们更加要好好珍惜自己的大脑呀! (:зゝ∠)
电脑和人看到的图片并不相同。当我们输入一张图片时,电脑得到的只是一个数组,记录着像素的信息。数组的大小由图像的清晰度和大小决定。假设我们有一张jpg格式的480 480大小的图片,那么表示它的数组便是480 480*3大小的。数组中所有数字都描述了在那个位置处的像素信息,大小在[0,255]之间。
这些数字对我们来说毫无意义,但这是电脑们可以得到的唯一的信息(也足够了)。抽象而简单的说,我们需要一个接受数组为输入,输出一个数组表示属于各个类别概率的模型。
既然问题我们已经搞明白了,现在我们得想想办法解决它。我们想让电脑做的事情是找出不同图片之间的差别,并可以识别狗狗(举个例子)的特征。
我们人类可以通过一些与众不同的特征来识别图片,比如狗狗的爪子和狗有四条腿。同样地,电脑也可以通过识别更低层次的特征(曲线,直线)来进行图像识别。电脑用卷积层识别这些特征,并通过更多层卷积层结合在一起,就可以像人类一样识别出爪子和腿之类的高层次特征,从而完成任务。这正是CNN所做的事情的大概脉络。下面,我们进行更具体的讨论。
在正式开始之前,我们先来聊聊CNN的背景故事。当你第一次听说卷积神经网络的时候,你可能就会联想到一些与神经学或者生物学有关的东西,不得不说,卷积神经网络还真的与他们有某种关系。
CNN的灵感的确来自大脑中的视觉皮层。视觉皮层某些区域中的神经元只对特定视野区域敏感。1962年,在一个Hubel与Wiesel进行的试验( 视频 )中,这一想法被证实并且拓展了。他们发现,一些独立的神经元只有在特定方向的边界在视野中出现时才会兴奋。比如,一些神经元在水平边出现时兴奋,而另一些只有垂直边出现时才会。并且所有这种类型的神经元都在一个柱状组织中,并且被认为有能力产生视觉。
在一个系统中,一些特定的组件发挥特定的作用(视觉皮层中的神经元寻找各自特定的特征)。这一想法应用于很多机器中,并且也是CNN背后的基本原理。 (译者注:作者没有说清楚。类比到CNN中,应是不同的卷积核寻找图像中不同的特征)
回到主题。
更详细的说,CNN的工作流程是这样的:你把一张图片传递给模型,经过一些卷积层,非线性化(激活函数),池化,以及全连层,最后得到结果。就像我们之前所说的那样,输出可以是单独的一个类型,也可以是一组属于不同类型的概率。现在,最不容易的部分来了:理解各个层的作用。
首先,你要搞清楚的是,什么样的数据输入了卷积层。就像我们之前提到的那样,输入是一个32 × 32 × 3(打个比方)的记录像素值的数组。现在,让我来解释卷积层是什么。解释卷积层最好的方法,是想象一个手电筒照在图片的左上角。让我们假设手电筒的光可以招到一个5 × 5的区域。现在,让我们想象这个手电筒照过了图片的所有区域。在机器学习术语中,这样一个手电筒被称为卷积核(或者说过滤器,神经元) (kernel, filter, neuron) 。而它照到的区域被称为感知域 (receptive field) 。卷积核同样也是一个数组(其中的数被称为权重或者参数)。很重要的一点就是卷积核的深度和输入图像的深度是一样的(这保证可它能正常工作),所以这里卷积核的大小是5 × 5 × 3。
现在,让我们拿卷积核的初始位置作为例子,它应该在图像的左上角。当卷积核扫描它的感知域(也就是这张图左上角5 × 5 × 3的区域)的时候,它会将自己保存的权重与图像中的像素值相乘(或者说,矩阵元素各自相乘,注意与矩阵乘法区分),所得的积会相加在一起(在这个位置,卷积核会得到5 × 5 × 3 = 75个积)。现在你得到了一个数字。然而,这个数字只表示了卷积核在图像左上角的情况。现在,我们重复这一过程,让卷积核扫描完整张图片,(下一步应该往右移动一格,再下一步就再往右一格,以此类推),每一个不同的位置都产生了一个数字。当扫描完整张图片以后,你会得到一组新的28 × 28 × 1的数。 (译者注:(32 - 5 + 1) × (32 - 5 + 1) × 1) 。这组数,我们称为激活图或者特征图 (activation map or feature map) 。
如果增加卷积核的数目,比如,我们现在有两个卷积核,那么我们就会得到一个28 × 28 × 2的数组。通过使用更多的卷积核,我们可以更好的保留数据的空间尺寸。
在数学层面上说,这就是卷积层所做的事情。
让我们来谈谈,从更高角度来说,卷积在做什么。每一个卷积核都可以被看做特征识别器。我所说的特征,是指直线、简单的颜色、曲线之类的东西。这些都是所有图片共有的特点。拿一个7 × 7 × 3的卷积核作为例子,它的作用是识别一种曲线。(在这一章节,简单起见,我们忽略卷积核的深度,只考虑第一层的情况)。作为一个曲线识别器,这个卷积核的结构中,曲线区域内的数字更大。(记住,卷积核是一个数组)
现在我们来直观的看看这个。举个例子,假设我们要把这张图片分类。让我们把我们手头的这个卷积核放在图片的左上角。
记住,我们要做的事情是把卷积核中的权重和输入图片中的像素值相乘。
(译者注:图中最下方应是由于很多都是0所以把0略过不写了。)
基本上,如果输入图像中有与卷积核代表的形状很相似的图形,那么所有乘积的和会很大。现在我们来看看,如果我们移动了卷积核呢?
可以看到,得到的值小多了!这是因为感知域中没有与卷积核表示的相一致的形状。还记得吗,卷积层的输出是一张激活图。所以,在单卷积核卷积的简单情况下,假设卷积核是一个曲线识别器,那么所得的激活图会显示出哪些地方最有可能有曲线。在这个例子中,我们所得激活图的左上角的值为6600。这样大的数字表明很有可能这片区域中有一些曲线,从而导致了卷积核的激活 (译者注:也就是产生了很大的数值。) 而激活图中右上角的数值是0,因为那里没有曲线来让卷积核激活(简单来说就是输入图像的那片区域没有曲线)。
但请记住,这只是一个卷积核的情况,只有一个找出向右弯曲的曲线的卷积核。我们可以添加其他卷积核,比如识别向左弯曲的曲线的。卷积核越多,激活图的深度就越深,我们得到的关于输入图像的信息就越多。
在传统的CNN结构中,还会有其他层穿插在卷积层之间。我强烈建议有兴趣的人去阅览并理解他们。但总的来说,他们提供了非线性化,保留了数据的维度,有助于提升网络的稳定度并且抑制过拟合。一个经典的CNN结构是这样的:
网络的最后一层很重要,我们稍后会讲到它。
现在,然我们回头看看我们已经学到了什么。
我们讲到了第一层卷积层的卷积核的目的是识别特征,他们识别像曲线和边这样的低层次特征。但可以想象,如果想预测一个图片的类别,必须让网络有能力识别高层次的特征,例如手、爪子或者耳朵。让我们想想网络第一层的输出是什么。假设我们有5个5 × 5 × 3的卷积核,输入图像是32 × 32 × 3的,那么我们会得到一个28 × 28 × 5的数组。来到第二层卷积层,第一层的输出便成了第二层的输入。这有些难以可视化。第一层的输入是原始图片,可第二层的输入只是第一层产生的激活图,激活图的每一层都表示了低层次特征的出现位置。如果用一些卷积核处理它,得到的会是表示高层次特征出现的激活图。这些特征的类型可能是半圆(曲线和边的组合)或者矩形(四条边的组合)。随着卷积层的增多,到最后,你可能会得到可以识别手写字迹、粉色物体等等的卷积核。
如果,你想知道更多关于可视化卷积核的信息,可以看这篇 研究报告 ,以及这个 视频 。
还有一件事情很有趣,当网络越来越深,卷积核会有越来越大的相对于输入图像的感知域。这意味着他们有能力考虑来自输入图像的更大范围的信息(或者说,他们对一片更大的像素区域负责)。
到目前为止,我们已经识别出了那些高层次的特征吧。网络最后的画龙点睛之笔是全连层。
简单地说,这一层接受输入(来自卷积层,池化层或者激活函数都可以),并输出一个N维向量,其中,N是所有有可能的类别的总数。例如,如果你想写一个识别数字的程序,那么N就是10,因为总共有10个数字。N维向量中的每一个数字都代表了属于某个类别的概率。打个比方,如果你得到了[0 0.1 0.1 0.75 0 0 0 0 0 0.05],这代表着这张图片是1的概率是10%,是2的概率是10%,是3的概率是75%,是9的概率5%(小贴士:你还有其他表示输出的方法,但现在我只拿softmax (译者注:一种常用于分类问题的激活函数) 来展示)。全连层的工作方式是根据上一层的输出(也就是之前提到的可以用来表示特征的激活图)来决定这张图片有可能属于哪个类别。例如,如果程序需要预测哪些图片是狗,那么全连层在接收到一个包含类似于一个爪子和四条腿的激活图时输出一个很大的值。同样的,如果要预测鸟,那么全连层会对含有翅膀和喙的激活图更感兴趣。
基本上,全连层寻找那些最符合特定类别的特征,并且具有相应的权重,来使你可以得到正确的概率。
现在让我们来说说我之前有意没有提到的神经网络的可能是最重要的一个方面。刚刚在你阅读的时候,可能会有一大堆问题想问。第一层卷积层的卷积核们是怎么知道自己该识别边还是曲线的?全连层怎么知道该找哪一种激活图?每一层中的参数是怎么确定的?机器确定参数(或者说权重)的方法叫做反向传播算法。
在讲反向传播之前,我们得回头看看一个神经网络需要什么才能工作。我们出生的时候并不知道一条狗或者一只鸟长什么样。同样的,在CNN开始之前,权重都是随机生成的。卷积核并不知道要找边还是曲线。更深的卷积层也不知道要找爪子还是喙。
等我们慢慢长大了,我们的老师和父母给我们看不同的图片,并且告诉我们那是什么(或者说,他们的类别)。这种输入一幅图像以及这幅图像所属的类别的想法,是CNN训练的基本思路。在细细讲反向传播之前,我们先假设我们有一个包含上千张不同种类的动物以及他们所属类别的训练集。
反向传播可以被分成四个不同的部分。前向传播、损失函数、反向传播和权重更新。
在前向传播的阶段,我们输入一张训练图片,并让它通过整个神经网络。对于第一个输入图像,由于所有权重都是随机生成的,网络的输出很有可能是类似于[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的东西,一般来说并不对任一类别有偏好。具有当前权重的网络并没有能力找出低层次的特征并且总结出可能的类别。
下一步,是损失函数部分。注意,我们现在使用的是训练数据。这些数据又有图片又有类别。打个比方,第一张输入的图片是数字“3”。那么它的标签应该是[0 0 0 1 0 0 0 0 0 0]。一个损失函数可以有很多定义的方法,但比较常见的是MSE(均方误差)。被定义为(实际−预测)22(实际−预测)22。
记变量L为损失函数的值。正如你想象的那样,在第一组训练图片输入的时候,损失函数的值可能非常非常高。来直观地看看这个问题。我们想到达CNN的预测与数据标签完全一样的点(这意味着我们的网络预测的很对)。为了到达那里,我们想要最小化误差。如果把这个看成一个微积分问题,那我们只要找到哪些权重与网络的误差关系最大。
这就相当于数学中的δLδWδLδW (译者注:对L关于W求导) ,其中,W是某个层的权重。现在,我们要对网络进行 反向传播 。这决定了哪些权重与误差的关系最大,并且决定了怎样调整他们来让误差减小。计算完这些导数以后,我们就来到了最后一步: 更新权重 。在这里,我们以与梯度相反的方向调整层中的权重。
学习率是一个有程序员决定的参数。一个很高的学习率意味着权重调整的幅度会很大,这可能会让模型更快的拥有一组优秀的权重。然而,一个太高的学习率可能会让调整的步伐过大,而不能精确地到达最佳点。
前向传播、损失函数、反向传播和更新权重,这四个过程是一次迭代。程序会对每一组训练图片重复这一过程(一组图片通常称为一个batch)。当对每一张图片都训练完之后,很有可能你的网络就已经训练好了,权重已经被调整的很好。
最后,为了验证CNN是否工作的很好,我们还有另一组特殊的数据。我们把这组数据中的图片输入到网络中,得到输出并和标签比较,这样就能看出网络的表现如何了。
⑦ 卷积神经网络卷积层算完数据超阈怎么办
、计算方法不同1、前馈神经网络:一种最简单的神经网络,各神经元分层排列AI爱发猫 www.aifamao.com。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。
2、BP神经网络:是一种按照误差逆向传播算法训练的多层前馈神经网络。3、卷积神经网络:包含卷积计算且具有深度结构的前馈神经网络。
二、用途不同1、前馈神经网络:主要应用包括感知器网络、BP网络和RBF网络。
2、BP神经网络:(1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数;(2)模式识别:用一个待定的输出向量将它与输入向量联系起来;(3)分类:把输入向量所定义的合适方式进行分类;(4)数据压缩:减少输出向量维数以便于传输或存储。
3、卷积神经网络:可应用于图像识别、物体识别等计算机视觉、自然语言处理、物理学和遥感科学等领域。联系:BP神经网络和卷积神经网络都属于前馈神经网络,三者都属于人工神经网络。因此,三者原理和结构相同。
三、作用不同1、前馈神经网络:结构简单,应用广泛,能够以任意精度逼近任意连续函数及平方可积函数.而且可以精确实现任意有限训练样本集。2、BP神经网络:具有很强的非线性映射能力和柔性的网络结构。
网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。3、卷积神经网络:具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类。
(7)全连接网络增加层数扩展阅读:1、BP神经网络优劣势BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。
网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。但是BP神经网络也存在以下的一些主要缺陷。
①学习速度慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才能收敛。②容易陷入局部极小值。③网络层数、神经元个数的选择没有相应的理论指导。④网络推广能力有限。
2、人工神经网络的特点和优越性,主要表现在以下三个方面①具有自学习功能。
例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。自学习功能对于预测有特别重要的意义。
预期未来的人工神经网络计算机将为人类提供经济预测、效益预测,其应用前途是很远大的。②具有联想存储功能。用人工神经网络的反馈网络就可以实现这种联想。③具有高速寻找优化解的能力。
寻找一个复杂问题的优化解,往往需要很大的计算量,利用一个针对某问题而设计的反馈型人工神经网络,发挥计算机的高速运算能力,可能很快找到优化解。
参考资料:网络—前馈神经网络网络—BP神经网络网络—卷积神经网络网络—人工神经网络。
卷积神经网络处理规格不同的图片
用卷积神经网络处理 “图” 结构数据应该怎么办
。
卷积神经网络有以下几种应用可供研究:1、基于卷积网络的形状识别物体的形状是人的视觉系统分析和识别物体的基础,几何形状是物体的本质特征的表现,并具有平移、缩放和旋转不变等特点,所以在模式识别领域,对于形状的分析和识别具有十分重要的意义,而二维图像作为三维图像的特例以及组成部分,因此二维图像的识别是三维图像识别的基础。
2、基于卷积网络的人脸检测卷积神经网络与传统的人脸检测方法不同,它是通过直接作用于输入样本,用样本来训练网络并最终实现检测任务的。
它是非参数型的人脸检测方法,可以省去传统方法中建模、参数估计以及参数检验、重建模型等的一系列复杂过程。本文针对图像中任意大小、位置、姿势、方向、肤色、面部表情和光照条件的人脸。
3、文字识别系统在经典的模式识别中,一般是事先提取特征。提取诸多特征后,要对这些特征进行相关性分析,找到最能代表字符的特征,去掉对分类无关和自相关的特征。
然而,这些特征的提取太过依赖人的经验和主观意识,提取到的特征的不同对分类性能影响很大,甚至提取的特征的顺序也会影响最后的分类性能。同时,图像预处理的好坏也会影响到提取的特征。
卷积神经网络为什么最后接一个全连接层
在常见的卷积神经网络的最后往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图(featuremap)转化成(N*1)一维的一个向量全连接的目的是什么呢?
因为传统的端到到的卷积神经网络的输出都是分类(一般都是一个概率值),也就是几个类别的概率甚至就是一个数--类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。
但是全连接的参数实在是太多了,你想这张图里就有20*12*12*100个参数,前面随便一层卷积,假设卷积核是7*7的,厚度是64,那也才7*7*64,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。
也就是最后那一层的featuremap(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。
卷积神经网络是如何反向调整参数的?
卷积神经网络的模型问题? 50
。
怎么又是你.....网络自然是搭建起来的啊,比如CNN,一层一层地建,如果你是用别人已经建好的网络,比如最简单的LeNet-5,那么Tensorflow中会直接提供你一个Net;但是如果你是自定义网络类型,那么需要继承nn.Noles,然后重新定义网络结构,封装成一个Net,总结起来,模型是很多数学公式搭在一起,然鹅,数学公式是封装好的,可以相互交流哈。
打开CSDN,阅读体验更佳
卷积神经网络的缺点是什么?_薯仔西瓜大芝麻的博客_卷积神经...
平移不变性 当我们说平移不变性时,我们意思是,稍微改变同一物体的朝向或位置,可能并不会激活那些识别该物体的神经元。 正如上图所示,假如一个神经元是用来识别一只猫的,其参数会随着猫的位置和转动的变化而变化。虽然数据扩增(data aug...
卷积神经网络存在的问题,卷积神经网络的卷积层_普通网友的博客-CSDN博 ...
对于无法完美解决的梯度消失问题,一个可能部分解决梯度消失问题的办法是使用ReLU(RectifiedLinearUnit)激活函数,ReLU在卷积神经网络CNN中得到了广泛的应用,在CNN中梯度消失似乎不再是问题。 那么它是什么样子呢?其实很简单,比我们前面提到的...
最新发布 影响深度卷积神经网络算法的关键参数是网络结构
局部连接的概念参考局部感受域,即某个视神经元仅考虑某一个小区域的视觉输入,因此相比普通神经网络的全连接层(下一层的某一个神经元需要与前一层的所有节点连接),卷积网络的某一个卷积层的所有节点只负责前层输入的某一个区域(比如某个3*3的方块)。卷积神经网络的连接性:卷积神经网络中卷积层间的连接被称为稀疏连接(sparse connection),即相比于前馈神经网络中的全连接,卷积层中的神经元仅与其相邻层的部分,而非全部神经元相连。权重共享和稀疏连接一样,减少了卷积神经网络的参数总量,并具有正则化的效果。
继续访问
卷积神经网络难点梳理
目录1 基本概念及原理1.1 基本概念1.2 基本原理2 卷积是怎么“卷”的2.1 数学中的卷积2.2 CNN中的卷积3 损失函数是怎样当好指挥官的4 梯度下降、反向传播和显卡参考内容 1 基本概念及原理 1.1 基本概念 概念名称 目的 操作 示意图 卷积(Convolution) 提取特征 将图像矩阵遍历乘以卷积核矩阵并输出 池化(Pooling) 降低数据量 对小块矩阵中的所有数取平均(平均池化)或者取最大(最大池化)并只输出一个值,再遍历 激活(Activation) 对
继续访问
卷积神经网络的缺点_辽宁大学的博客_卷积神经网络的优缺点
1.做卷积神经网络需要将数据集归一化。不同的尺寸混合在一起难以训练。2.卷积神经网络没有记忆功能。3.对图像处理很友善,对视频语音自然语言处理能力差...
关于CNN卷积神经网络的问题_麦格芬230的博客
将卷积神经网络CNN应用到文本分类任务,利用多个不同大小的卷积核来提取句子中的关键信息(类似于多窗口大小的N-gram),从而能够更好地捕捉局部相关性。 4.在情感分析任务中,TextCNN的卷积核,卷积的是哪些向量呢?卷积卷的是这些向量的什么...
深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题(二)
过拟合 梯度弥散 batchsize 不平衡数据集
继续访问
cnn卷积神经网络反向传播,卷积神经网络维度变化
深度学习框架,尤其是基于人工神经网络的框架可以追溯到1980年福岛邦彦提出的新认知机[2],而人工神经网络的历史更为久远。1989年,燕乐存(YannLeCun)等人开始将1974年提出的标准反向传播算法[3]应用于深度神经网络,这一网络被用于手写邮政编码识别。尽管算法可以成功执行,但计算代价非常巨大,神经网路的训练时间达到了3天,因而无法投入实际使用[4]。...
继续访问
卷积神经网络CNN特点功能及其缺陷_一只不出息的程序员的博客...
卷积:简单地说,图像经过平移,相应的特征图上的表达也是平移的。 下图只是一个为了说明这个问题的例子。输入图像的左下角有一个人脸,经过卷积,人脸的特征(眼睛,鼻子)也位于特征图的左下角。 在神经网络中,卷积被定义为不同位置的特征...
记录 训练卷积神经网络时遇到的问题_后知后觉w的博客
记录 训练卷积神经网络时遇到的问题 问题1、softmax分类的loss最后会停在0.6931这个值 原因分析:在分类层使用了keras.layers.Lambda,导致分类器没有可训练的参数,因此没有分类能力,即,无论是否为object,softmax的输出都是0.5,根据loss...
都说卷积神经网络是个好东西,但它有什么弊端呢?
图片来源:Mathworks翻译 | 王赫编辑 | Donna2012年,三位深度学习的“巨人”Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,联合发表了题为 “ImageNet Classification with Deep Convolutional Networks” 的论文。自此,卷积神经网络( CNNs )就成了一个万人追捧的工具,并
继续访问
卷积神经网络—全连接层
卷积神经网络—全连接层 全连接层 全连接层与卷积层 全连接层与GAP(全局平均池化层) [1] https://blog.csdn.net/Touch_Dream/article/details/79775786 [2] https://www.cnblogs.com/zongfa/p/9048680.html [3] https://www.hu.com/question/410379...
继续访问
五、卷积神经网络CNN5(卷积相关问题2)_满满myno的博客
输出深度(通道)与卷积核(过滤器)的个数相等。 激活函数通常放在卷积神经网络的那个操作之后 通常放在卷积层之后。 如何理解最大池化层有几分缩小 池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面 ...
卷积神经网络的缺点
(1)效果好是因为仿生学,缺点是无法扩展到平面视觉以外的地方吧。 (2)缺点一:实现比较复杂。缺点二:训练所需时间比较久。 (3)不是单一算法,不同的任务需要单独训练 (4)世界(物理空间、解空间等)是连续且局部平坦的+规律/特征具有时空局部平移不变性,即世界存在局部平移不变的统计规律 举个例子:在地球表面某局部画三角形,发现内角和总是等于180,并且随便跑到地球的哪里都是如此,但是如果你
继续访问
神经网络 卷积神经网络,卷积神经网络常见问题
卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。[1] 它包括卷积层(alternatingconvolutionallayer)和池层(poolinglayer)。卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。...
继续访问
卷积神经网络(CNN)入门常见问题解答
目录 什么是神经元? 激活函数的作用? 什么是神经网络? CNN怎么进行识别? 计算机如何识别图像? CNN如何更准确人性化的对比图像? 什么是卷积操作? 感谢作者: CNN笔记:通俗理解卷积神经网络_v_JULY_v的博客-CSDN博客_卷积神经网络通俗理解 什么是神经元? 神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称...
继续访问
卷积神经网络——解决参数太多问题
一、全连接网路的局限性 图像变大导致色彩书变多,不好解决 不便处理高维数据 对于比较复杂的高维数据,如果按照全连接的方法,则只能通过增加节点、增加层数的方式来解决。增加节点会引起参数过多的问题。由于隐藏层神经网络使用的是sigmod或tanh激活函数,其反向传播的有效成层数只能在4~6层左右。 二、理解卷积神经网络 三、网络结构 卷积神经网络的结构与全连接网络相比复杂很多。它的网络结构主要包括卷积层、池化层。细节又可以分为滤波器、步长、卷积操作、池化操作。 1.网络结构描述 对于一般的图片会使用多个卷积
继续访问
人工智能深度学习卷积神经网络入门
<span style="font-size:16px;">"java大数据人工智能培训学校全套教材"系列课程由1000集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学校一次,完全可以找个java工程师的工作了。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;"> 通过学习卷积神经网络概述,为什么引入神经网络来做识别,判断,预测,</span><strong><span style="font-size:16px;">训练模型</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">激活函数</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函数</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">导数和切线</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函数如何求导</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">链式法则</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度下降法与delta法则</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">BP(back propagation)误差逆传播神经网络</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">卷积到底有什么作用?如何做到特征提取</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">池化的名字由来</span></strong><span style="font-size:16px;">,</span><strong><strong><span style="font-size:16px;">dropout</span></strong></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Anaconda Prompt的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Jupyter notebook的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Spyder的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">建立安装Tensorflow所需的Anaconda虚拟环境</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">如何在Anaconda虚拟环境安装Tensorflow与Keras</span></strong><span style="font-size:16px;">概念等让大家对人工智能,卷积神经网络快速入门。</span></span><br /> <br /> <span style="font-size:16px;">课程特色:专业细致,偏案例,理论强。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">课程软件使用:</span><span style="font-size:14px;"><strong><span style="font-size:16px;">Anaconda,</span><span style="font-size:14px;"><strong><span><span style="font-size:16px;">Spyder,</span><span style="font-size:16px;"><strong><span style="font-size:16px;">Jupyter notebook</span></strong></span></span></strong></span></strong></span></span><br /> <br /> <span style="font-size:16px;">重要声明:</span><br /> <br /> <span style="font-size:16px;">1) 如果感觉噪音大,可以选择不用耳机,加音箱或用电脑原声 </span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">2) 既然我们的名字叫</span><span style="font-size:16px;">人工智能深度学习卷积神经网络入门</span><span style="font-size:16px;">,这个课程的特点就在于成本最低的, 让你最快速的,最容易的入门。</span><span style="font-size:16px;">人工智能深度学习卷积神经网络入门</span><span style="font-size:16px;">的最大的难点在于入门入不了,从而最终放弃。俗话说师傅领进门,修行在个人。只要入了门了,后面的事都好办。选课前,务必注意本章的学习目标和内容。想学更多,注意后边的课程。</span></span>
继续访问
python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做
在上一篇博客里我介绍了如何利用keras对一个给定的数据集来完成多分类任务。100%的分类准确度验证了分类模型的可行性和数据集的准确度。在这篇博客当中我将利用一个稍加修改的数据集来完成线性回归任务。相比较以往的线性回归处理方式,我认为使用神经网络实现线性回归要简单和准确得多。数据集大小仍然是247*900,不同的是数据集的第247位变成了湿度特征的真实湿度值。不同于分类算法得到的决策面,回归算法得...
继续访问
卷积神经网络之全连接层
大多数内容来源于 :卷积神经网络中的全连接层 全连接层的作用是: 连接所有的特征,将输出值送给分类器 (如softmax分类器),其将卷积输出的二维特征图转化成 (N * 1)一维的一个向量。 最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,又进行了一次池化操作,输出了20个 12*12 的图像(20指最后一层的厚度),然后通过了一个全连接层变成了 1*100 的向量(第一个全连接层神...
继续访问
人工神经网络的功能特点,神经网络的优缺点
此时,网络学习了过多的样本细节,而不能反映样本内含的规律由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;多层前向BP网络的问题:从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。第三,具有高速寻找优化解的能力。...
继续访问
【Keras】卷积神经网络数据回归预测实战
基于卷积神经网络的数据回归预测
继续访问
热门推荐 反向传播算法(过程及公式推导)
反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。
继续访问
深度学习---卷积神经网络解决分类与回归问题
一、CNN神经网络的发展史: Lenet,1986年 Alexnet,2012年 2012年,Imagenet比赛冠军的model——Alexnet [2](以第一作者alex命名),AlexNet 是一种典型的 convolutional neural network,它由5层 convolutional layer,2层 fully connected layer,和最后一层 label layer (1000个node, 每个node代表ImageNet中的一个类别) 组成 GoogleNet
继续访问
深度学习之卷积神经网络CNN详细
计算机视觉、自然语言处理等领域(图像分类、图像分割、图像检测、文本
继续访问
一文让你彻底了解卷积神经网络
目录 卷积层 直观理解卷积 卷积计算流程 计算过程: 思考: 池化层(PoolingLayer) 卷积神经网络的组成 前向传播与反向传播 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出
⑧ 卷积神经网络的 卷积层、激活层、池化层、全连接层
数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,POOL表示池化层,Fc表示全连接层
全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播,所以说全连接神经网络可以存储非常多的参数,如果你给它的样本如果没有达到它的量级的时候,它可以轻轻松松把你给他的样本全部都记下来,这会出现过拟合的情况。
所以我们应该把神经元和神经元之间的连接的权重个数降下来,但是降下来我们又不能保证它有较强的学习能力,所以这是一个纠结的地方,所以有一个方法就是 局部连接+权值共享 ,局部连接+权值共享不仅权重参数降下来了,而且学习能力并没有实质的降低,除此之外还有其它的好处,下来看一下,下面的这几张图片:
一个图像的不同表示方式
这几张图片描述的都是一个东西,但是有的大有的小,有的靠左边,有的靠右边,有的位置不同,但是我们构建的网络识别这些东西的时候应该是同一结果。为了能够达到这个目的,我们可以让图片的不同位置具有相同的权重(权值共享),也就是上面所有的图片,我们只需要在训练集中放一张,我们的神经网络就可以识别出上面所有的,这也是 权值共享 的好处。
而卷积神经网络就是局部连接+权值共享的神经网络。
现在我们对卷积神经网络有一个初步认识了,下面具体来讲解一下卷积神经网络,卷积神经网络依旧是层级结构,但层的功能和形式做了改变,卷积神经网络常用来处理图片数据,比如识别一辆汽车:
在图片输出到神经网络之前,常常先进行图像处理,有 三种 常见的图像的处理方式:
均值化和归一化
去相关和白化
图片有一个性质叫做局部关联性质,一个图片的像素点影响最大的是它周边的像素点,而距离这个像素点比较远的像素点二者之间关系不大。这个性质意味着每一个神经元我们不用处理全局的图片了(和上一层全连接),我们的每一个神经元只需要和上一层局部连接,相当于每一个神经元扫描一小区域,然后许多神经元(这些神经元权值共享)合起来就相当于扫描了全局,这样就构成一个特征图,n个特征图就提取了这个图片的n维特征,每个特征图是由很多神经元来完成的。
在卷积神经网络中,我们先选择一个局部区域(filter),用这个局部区域(filter)去扫描整张图片。 局部区域所圈起来的所有节点会被连接到下一层的 一个节点上 。我们拿灰度图(只有一维)来举例:
局部区域
图片是矩阵式的,将这些以矩阵排列的节点展成了向量。就能更好的看出来卷积层和输入层之间的连接,并不是全连接的,我们将上图中的红色方框称为filter,它是2*2的,这是它的尺寸,这不是固定的,我们可以指定它的尺寸。
我们可以看出来当前filter是2*2的小窗口,这个小窗口会将图片矩阵从左上角滑到右下角,每滑一次就会一下子圈起来四个,连接到下一层的一个神经元,然后产生四个权重,这四个权重(w1、w2、w3、w4)构成的矩阵就叫做卷积核。
卷积核是算法自己学习得到的,它会和上一层计算,比如,第二层的0节点的数值就是局部区域的线性组合(w1 0+w2 1+w3 4+w4 5),即被圈中节点的数值乘以对应的权重后相加。
卷积核计算
卷积操作
我们前面说过图片不用向量表示是为了保留图片平面结构的信息。 同样的,卷积后的输出若用上图的向量排列方式则丢失了平面结构信息。 所以我们依然用矩阵的方式排列它们,就得到了下图所展示的连接,每一个蓝色结点连接四个黄色的结点。
卷积层的连接方式
图片是一个矩阵然后卷积神经网络的下一层也是一个矩阵,我们用一个卷积核从图片矩阵左上角到右下角滑动,每滑动一次,当然被圈起来的神经元们就会连接下一层的一个神经元,形成参数矩阵这个就是卷积核,每次滑动虽然圈起来的神经元不同,连接下一层的神经元也不同,但是产生的参数矩阵确是一样的,这就是 权值共享 。
卷积核会和扫描的图片的那个局部矩阵作用产生一个值,比如第一次的时候,(w1 0+w2 1+w3 4+w4 5),所以,filter从左上到右下的这个过程中会得到一个矩阵(这就是下一层也是一个矩阵的原因),具体过程如下所示:
卷积计算过程
上图中左边是图矩阵,我们使用的filter的大小是3 3的,第一次滑动的时候,卷积核和图片矩阵作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,会产生一个值,这个值就是右边矩阵的第一个值,filter滑动9次之后,会产生9个值,也就是说下一层有9个神经元,这9个神经元产生的值就构成了一个矩阵,这矩阵叫做特征图,表示image的某一维度的特征,当然具体哪一维度可能并不知道,可能是这个图像的颜色,也有可能是这个图像的轮廓等等。
单通道图片总结 :以上就是单通道的图片的卷积处理,图片是一个矩阵,我们用指定大小的卷积核从左上角到右下角来滑动,每次滑动所圈起来的结点会和下一层的一个结点相连,连接之后就会形成局部连接,每一条连接都会产生权重,这些权重就是卷积核,所以每次滑动都会产生一个卷积核,因为权值共享,所以这些卷积核都是一样的。卷积核会不断和当时卷积核所圈起来的局部矩阵作用,每次产生的值就是下一层结点的值了,这样多次产生的值组合起来就是一个特征图,表示某一维度的特征。也就是从左上滑动到右下这一过程中会形成一个特征图矩阵(共享一个卷积核),再从左上滑动到右下又会形成另一个特征图矩阵(共享另一个卷积核),这些特征图都是表示特征的某一维度。
三个通道的图片如何进行卷积操作?
至此我们应该已经知道了单通道的灰度图是如何处理的,实际上我们的图片都是RGB的图像,有三个通道,那么此时图像是如何卷积的呢?
彩色图像
filter窗口滑的时候,我们只是从width和height的角度来滑动的,并没有考虑depth,所以每滑动一次实际上是产生一个卷积核,共享这一个卷积核,而现在depth=3了,所以每滑动一次实际上产生了具有三个通道的卷积核(它们分别作用于输入图片的蓝色、绿色、红色通道),卷积核的一个通道核蓝色的矩阵作用产生一个值,另一个和绿色的矩阵作用产生一个值,最后一个和红色的矩阵作用产生一个值,然后这些值加起来就是下一层结点的值,结果也是一个矩阵,也就是一张特征图。
三通道的计算过程
要想有多张特征图的话,我们可以再用新的卷积核来进行左上到右下的滑动,这样就会形成 新的特征图 。
三通道图片的卷积过程
也就是说增加一个卷积核,就会产生一个特征图,总的来说就是输入图片有多少通道,我们的卷积核就需要对应多少通道,而本层中卷积核有多少个,就会产生多少个特征图。这样卷积后输出可以作为新的输入送入另一个卷积层中处理,有几个特征图那么depth就是几,那么下一层的每一个特征图就得用相应的通道的卷积核来对应处理,这个逻辑要清楚,我们需要先了解一下 基本的概念:
卷积计算的公式
4x4的图片在边缘Zero padding一圈后,再用3x3的filter卷积后,得到的Feature Map尺寸依然是4x4不变。
填充
当然也可以使用5x5的filte和2的zero padding可以保持图片的原始尺寸,3x3的filter考虑到了像素与其距离为1以内的所有其他像素的关系,而5x5则是考虑像素与其距离为2以内的所有其他像素的关系。
规律: Feature Map的尺寸等于
(input_size + 2 * padding_size − filter_size)/stride+1
我们可以把卷积层的作用 总结一点: 卷积层其实就是在提取特征,卷积层中最重要的是卷积核(训练出来的),不同的卷积核可以探测特定的形状、颜色、对比度等,然后特征图保持了抓取后的空间结构,所以不同卷积核对应的特征图表示某一维度的特征,具体什么特征可能我们并不知道。特征图作为输入再被卷积的话,可以则可以由此探测到"更大"的形状概念,也就是说随着卷积神经网络层数的增加,特征提取的越来越具体化。
激励层的作用可以理解为把卷积层的结果做 非线性映射 。
激励层
上图中的f表示激励函数,常用的激励函数几下几种:
常用的激励函数
我们先来看一下激励函数Sigmoid导数最小为0,最大为1/4,
激励函数Sigmoid
Tanh激活函数:和sigmoid相似,它会关于x轴上下对应,不至于朝某一方面偏向
Tanh激活函数
ReLU激活函数(修正线性单元):收敛快,求梯度快,但较脆弱,左边的梯度为0
ReLU激活函数
Leaky ReLU激活函数:不会饱和或者挂掉,计算也很快,但是计算量比较大
Leaky ReLU激活函数
一些激励函数的使用技巧 :一般不要用sigmoid,首先试RELU,因为快,但要小心点,如果RELU失效,请用Leaky ReLU,某些情况下tanh倒是有不错的结果。
这就是卷积神经网络的激励层,它就是将卷积层的线性计算的结果进行了非线性映射。可以从下面的图中理解。它展示的是将非线性操作应用到一个特征图中。这里的输出特征图也可以看作是"修正"过的特征图。如下所示:
非线性操作
池化层:降低了各个特征图的维度,但可以保持大分重要的信息。池化层夹在连续的卷积层中间,压缩数据和参数的量,减小过拟合,池化层并没有参数,它只不过是把上层给它的结果做了一个下采样(数据压缩)。下采样有 两种 常用的方式:
Max pooling :选取最大的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图中取出最大的元素,最大池化被证明效果更好一些。
Average pooling :平均的,我们定义一个空间邻域(比如,2x2 的窗口),并从窗口内的修正特征图算出平均值
Max pooling
我们要注意一点的是:pooling在不同的depth上是分开执行的,也就是depth=5的话,pooling进行5次,产生5个池化后的矩阵,池化不需要参数控制。池化操作是分开应用到各个特征图的,我们可以从五个输入图中得到五个输出图。
池化操作
无论是max pool还是average pool都有分信息被舍弃,那么部分信息被舍弃后会损坏识别结果吗?
因为卷积后的Feature Map中有对于识别物体不必要的冗余信息,我们下采样就是为了去掉这些冗余信息,所以并不会损坏识别结果。
我们来看一下卷积之后的冗余信息是怎么产生的?
我们知道卷积核就是为了找到特定维度的信息,比如说某个形状,但是图像中并不会任何地方都出现这个形状,但卷积核在卷积过程中没有出现特定形状的图片位置卷积也会产生一个值,但是这个值的意义就不是很大了,所以我们使用池化层的作用,将这个值去掉的话,自然也不会损害识别结果了。
比如下图中,假如卷积核探测"横折"这个形状。 卷积后得到3x3的Feature Map中,真正有用的就是数字为3的那个节点,其余数值对于这个任务而言都是无关的。 所以用3x3的Max pooling后,并没有对"横折"的探测产生影响。 试想在这里例子中如果不使用Max pooling,而让网络自己去学习。 网络也会去学习与Max pooling近似效果的权重。因为是近似效果,增加了更多的参数的代价,却还不如直接进行最大池化处理。
最大池化处理
在全连接层中所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。当前面卷积层抓取到足以用来识别图片的特征后,接下来的就是如何进行分类。 通常卷积网络的最后会将末端得到的长方体平摊成一个长长的向量,并送入全连接层配合输出层进行分类。比如,在下面图中我们进行的图像分类为四分类问题,所以卷积神经网络的输出层就会有四个神经元。
四分类问题
我们从卷积神经网络的输入层、卷积层、激活层、池化层以及全连接层来讲解卷积神经网络,我们可以认为全连接层之间的在做特征提取,而全连接层在做分类,这就是卷积神经网络的核心。
⑨ 深度卷积网络
LeNet网络的结构如下图所示,可以看出,LeNet网络并没有使用padding,每进行一次卷积,图像的高度和宽度都会缩小,而通道数会一直增加。在全连接层中有400个节点,每个极点都有120个神经元,有时还会从这400个节点抽取一部分节点构建一个全连接层,即有两个全连接层。在该网络中,最后一步就是利用84个特征得到最后的输出,该网络刚开始使用的是 sigmoid 函数 tanh 函数,而现在常常倾向于使用 softmax 函数。需要注意的是,LeNet-5网络进行图像分类时,输入的图像是单通道的灰度图像。
AlexNet是以论文第一作者的名字命名的,该网络的结构,如下图所示,该网络的输出层使用了 softmax 函数。AlexNet网络比LeNet网络规模更大,大约有6000万个参数,用于训练图像和数据集时,能够处理非常相似的基本构造模块,这些模块中包含着大量的隐藏单元,并且与LeNet网络不同的是,该网络使用了ReLu的激活函数。
VGG-16网络没有太多的超参数,这是一种专注于构建卷积层的简单网络。如下图所示,该网络首先利用64个过滤器进行了两次卷积,接着在池化层将输入图像压缩,接着又是128个过滤器进行两次卷积,接着载池化。继续用256个过滤器进行3次卷积,再池化,接着再利用512个过滤器卷积3次,再池化,将稍后得到的特征图进行全连接操作,再进 softmax 激活。
由于存在梯度消失和梯度爆炸的原因,深层次的神经网络是很难训练的,如果采用一种跳跃连接的方式,即从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。这种利用跳跃连接构建的深度神经网络ResNets,深度能够超过100层
一个简单的两层神经网络示例,如下图所示:
常规的输出和输出之间的关系可以用如下的公式表示:
如上公式所述,这是一条神经网络的主路径。如果将 的输入直接到深层的激活函数之前,此时,神经网络有了一条副路径,其对应输出将有公式(5)变成如下所示的公式(6)
此时的输入除了原先的输入 外,多了一个 项,即由于 产生了一个残差块。
构建一个ResNet网络就是将很多这样的残差块堆积在一起,形成一个深度神经网络,如下所示:
使用传统的标准优化算法训练一个网络,随着网络深度的增加,训练误差会先减小再增加,随着网络层数的增加,优化算法会越难以训练,训练误差也会越来越多。但是,使用ResNet网络,能够有效地避免这种情况。
如上所述,加入残差网络之后,其输出计算公式如公式(6)所示,展开这个公式,则有:
如果使用L2正则化或者权重衰减,则会压缩权重参数 的值,如果参数 和参数 等于0,其输出将由公式(7)变成 ,假定使用ReLU激活函数,则有:
由于残差网络存在的这种跳跃连接,很容易得出以上等式,这意味着,即使给神经网络增加两层,但是其效率并不逊色与更简单的神经网络。并且由于存在以上恒等式,使得网络学习隐藏层的单元的信息更加容易。而普通网络,随着网络层数的增加,学习参数会变得很困难。
此外,关于残差网络,如公式(6)所示,假设 与 具有相同的维度,由于ResNets使用了许多same卷积, 的维度等于输出层的维度。如果输入和输出具有不同的维度,可以再增加一个矩阵 ,使得 和 具有相同的维度。而 的维度可以通过0值填充调节。
在卷积网络的架构设计中,一种有趣的想法是会使用到1×1的过滤矩阵,实际上,对于单通道的图像而言,1×1的过滤矩阵,意义不大,但是,对于多通道的图像而言,1×1的过滤矩阵能够有效减少图像卷积之后的通道数量。
根据卷积和池化的基本知识,随着神经网络层数的增加,图像的通道数量会逐渐增加,采用1×1的过滤矩阵卷积之后,可以有效减少图像的通道数量,一个简单的示例,如下所示:
假设有一个6×6×32的图片,使用1×1×32的过滤矩阵进行卷积运算,整个运算过程将会遍历36个单元格,并计算过滤矩阵所覆盖区域的元素积之和,将其应用到ReLu非线性函数,会得到一个输出值。此计算过程中,可能会用到多个1×1×32的过滤器,那么,通过以上计算会得到一个 6×6×过滤器数量 的矩阵。
构建卷积神经网络时,有时会很难决定过滤器的大小,而Inception网络的引入,却能很好的解决这个问题。
Inception网络的作用就是代替人工确定选择卷积层的过滤器类型。如下图所示,对于一个多通道图像,可以使用不同的过滤矩阵或者池化层,得到不同的输出,将这些输出堆积起来。
有了如上图所示的Inception块,最终输出为32+32+64+128=256,而Inception模块的输入为28×28×192,其整个计算成本,以5×5的过滤矩阵为例,其乘法的计算次数为:28×28×32×5×5×192,整个计算次数超过了1.2亿次。而如果使用如下所示的优化计算方法,则可以有效减少计算量。
如果利用1×1的过滤器,将输入矩阵的通道减少至16,则可以有效减少计算量,如下所示:
如上图所示的价格中,整个网络的运算次数为:28×28×192×16+28×28×32×5×5×16=1240万,整个计算成本降低至原来的十分之一。而,通过1×1×192过滤器卷积得到的这个网络层被称之为瓶颈层。
如上,所示,可以给每一个非1×1的卷积层之前,加入一个1×1的瓶颈层,就可以构建一个基本的inception模块了,如下图所示:
而一个inception网络就是多个Inception模块连接起来,如下图所示:
事实上,以上网络中,还存在一些分支,如编号1所示,这些分支就是全连接层,而全连接层之后就是一个softmax层用于预测。又如分支2所示,包含一些隐藏层(编号3),通过全连接层和softmax进行预测。这些分支结构能够确保,即使是隐藏层和中间层也参与了特征计算,并且也能够预测图片的分类。这种做法能够有效避免网络过拟合。
对于计算机视觉领域而言,神经网络的训练可能需要大量的数据,但是当数据量有限时,可以通过数据增强来实现数据量的扩充,以提高系统的鲁棒性,具体的数据增强方法如下所示:
除了以上三种数据增强的方法外,更多的数据增强方法和实现可以参考 图像数据增强
数据增强可以利用计算机多线程实现,一个线程用来实现加载数据,实现数据增强,其他线程可以训练这些数据以加快整体的运算速度。
⑩ 为什么当神经元结点和层数增加时,全连接深度神经网络训练权值很困难
层数多的时候,会造成梯度消失或梯度爆炸的问题