CNN和Transformer相结合的模型

CNN和Transformer相结合的模型,第1张

©作者 | 小欣

CNN广泛应用于计算机视觉的各种任务中,比如分类,检测,分割,CNN通过共享卷积核提取特征,减少网络参数数量,提高模型效率,另一方面CNN具有平移不变性,即无论特征被移动到图像的哪个位置,网络都能检测到这些特征。

尽管CNN存在很多优势,但是其感受野通常很小,不利于捕获全局特征。

视觉Transformer由于能够捕获一张的全局信息,因此在许多视觉任务中超越许多CNN结构。

ViT是第一个替代CNN,使用纯Transformer的结构,输入一张224×224×3的,ViT将其分成14×14=196个非重叠的patches,每个patch的大小是16×16×3,然后将这些patch输入到堆叠的多个transformer编码器中。

CNN的成功依赖于其两个固有的归纳偏置,即平移不变性和局部相关性,而视觉Transformer结构通常缺少这种特性,导致通常需要大量数据才能超越CNN的表现,CNN在小数据集上的表现通常比纯Transformer结构要好。

CNN感受野有限导致很难捕获全局信息,而Transformer可以捕获长距离依赖关系,因此ViT出现之后有许多工作尝试将CNN和Transformer结合,使得网络结构能够继承CNN和Transformer的优点,并且最大程度保留全局和局部特征。

Transformer是一种基于注意力的编码器-解码器结构,最初应用于自然语言处理领域,一些研究最近尝试将Transformer应用到计算机视觉领域。

在Transformer应用到视觉之前,卷积神经网络是主要研究内容。受到自注意力在NLP领域的影响,一些基于CNN的结构尝试通过加入自注意力层捕获长距离依赖关系,也有另外一些工作直接尝试用自注意力模块替代卷积,但是纯注意力模块结构仍然没有最先进的CNN结构表现好。

Transformer中有两个主要部分,多头自注意力层和全连接层,最近,Cordonnier et al在研究中表明卷积可以通过使用多头自注意力层达到同样的效果。

Transformer 理论上比CNN能得到更好的模型表现,但是因为计算全局注意力导致巨大的计算损失,特别是在浅层网络中,特征图越大,计算复杂度越高,因此一些方法提出将Transformer插入到CNN主干网络中,或者使用一个Transformer模块替代某一个卷积模块。

BoTNet[1] 通过使用Multi-Head Self-Attention(MHSA)替代ResNet Bottleneck中的3×3卷积,其他没有任何改变,形成新的网络结构,称为Bottleneck Transformer,相比于ResNet等网络提高了在分类,目标检测等任务中的表现,在ImageNet分类任务中达到847%的准确率,并且比EfficientNet快164倍。

BoTNet中使用的MHSA和Transformer中的MHSA有一定的区别,首先,BoTNet中使用Batch Normalization,而Transformer中使用Layer Normalization,其次,Transformer中使用一个在全连接层中使用一个非线性激活,BoT(Bottleneck Transformer)模块中使用三个非线性激活,最后Transformer中的MHSA模块包含一个输出映射,而BoT中的MHSA没有。

CNN有局部性和平移不变性,局部性关注特征图中相邻的点,平移不变性就是对于不同区域使用相同的匹配规则,虽然CNN的归纳偏差使得网络在少量数据上表现较好,但是这也限制了在充分数据上的表现,因此有一些工作尝试将CNN的归纳偏差引入Transformer加速网络收敛。

DeiT[2] 为了减小ViT对于大量数据的依赖,Touvron et al提出了Data-efficient image Transformer(Deit),提高网络在小量数据上的表现,通过使用数据增强和正则化技术,与此同时还引入了蒸馏策略,即使用一个教师网络去指导学生网络,通常来说使用CNN要比Transformer作为教师模型效果要好,CNN模型可以将其归纳偏置引入到Transformer。

作者使用两种蒸馏方式,一种是硬蒸馏,一种是软蒸馏 ,软蒸馏通过计算学生模型和教师模型分别经过softmax之后的KL散度,硬蒸馏通过使用教师模型的预测作为真实标签。

DeiT中引入了一个新的distillation token,和class token的作用类似,和其他token之间通过自注意力交互,作者发现class token和distillation token会收敛于不同的向量,余弦距离为006,说明这两个token希望得到相似但不相同的目标,为了证明distillation token的有效性是由于知识蒸馏的作用,通过对比实验将distillation token换成class token,就是使用两个class token,最终效果不如加入distillation token。

对比卷积神经网络和Transformer在Imagenet上的分类表现:

ConViT[3] 通过引入gated positional self-attention(GPSA)层模仿卷积层带来的局部性,将GPSA替代一部分 self-attention层,然后每一个注意力头通过调整可学习的门控参数来调整对于位置信息和上下文信息的关注程度。GPSA层的输出可以表示为:

其中,

是一个可学习的向量去模仿卷积,

是一个固定的相对位置编码,

是一个可学习门控参数去调整对上下文和位置信息的关注程度。

Cordonnier et al[4] 在论文中证明多头自注意机制可通过调整头的数量和可学习的位置编码来近似达到卷积层的效果。

对比ConViT和DeiT在Imagenet-1k上的表现,以及不同大小训练集对结果的影响

CeiT[5] 改变了patch到token的方式,先将通过卷积和最大池化再切分成patch,最开始对使用卷积 *** 作可以捕获的低级特征,即I2

并且使用了Layer-wise class token Attention(LCA)去结合多层特征,提出了Locally-Enhanced Feed-Forward Netword(LeFF),将最开始的全连接层(Feed-forward network)替换成了LeFF层,MSA(Multi-head self-attention)层保持不变,用于捕获全局信息,LeFF层用于捕获局部信息,最终的效果要比DeiT好。

Early Conv[6] Xiao et al通过使用多个步长为2的3×3卷积核替代ViT中最初的stem(步长为16的16×16卷积),使得网络在ImageNet-1k上取得1-2%的提高,并且稳定性和泛化能力在下游任务中都有所提高,对于学习率的选择和优化器的选择没有那么敏感,并且收敛速度也更快。

这篇文章表面在ViT模型中使用一个小的卷积核相比于最初的ViT使得模型有更好的泛化能力。

CoAtNet[7] Dai et al 提出a Convolution and Attention NetWord(CoAtNet),通过引入深度卷积到注意力模块中,深度卷积中一个卷积核负责一个通道,一个通道只被一个卷积核计算,相比于正常卷积,其参数和运算成本相对比较低,在浅层网络中堆叠卷积层,比较了不同的堆叠方式,比如C-C-C-T,C-T-T-T,C-C-C-T,其中C代表卷积模块,T代表Transformer模块。

通过综合考虑模型泛化能力,迁移能力,模型在训练集上的表现,最后使用C-C-T-T 这种堆叠方式。在没有额外训练数据的情况下,CoAtNet达到了86%的准确率,在ImageNet-21K上预训练时,达到了8856%的准确率。

参考文献

[1] A Srinivas, T-Y Lin, N Parmar, J Shlens, P Abbeel, and A Vaswani, “Bottleneck transformers for visual recognition” in Proc CVPR, 2021

[2] H Touvron, M Cord, D Matthijs, F Massa, A Sablayrolles, and H Jegou, “Training data-effificient image transformers & distillation through attention,” in Proc ICLR, 2021

[3] S d’Ascoli, H Touvron, M Leavitt, A Morcos, G Biroli, and L Sa gun, “Convit: Improving vision transformers with soft convolutional inductive biases,” in Proc ICLR, 2021

[4] Cordonnier, J-B, Loukas, A, and Jaggi, M On the relationship between self-attention and convolutional layers arXiv preprint arXiv:191103584, 2019

[5] K Yuan, S Guo, Z Liu, A Zhou, F Yu, and W Wu, “Incorporating convolution designs into visual transformers,” in Proc ICCV, 2021

[6] T Xiao, M Singh, E Mintun, T Darrell, P Dollar, and R B Girshick, “Early convolutions help transformers see better,” ArXiv, vol abs/210614881, 2021

[7] Z Dai, H Liu, Q V Le, and M Tan, “Coatnet: Marrying convolution and attention for all data sizes,” arXiv preprint arXiv:210604803, 2021
私信我领取 目标检测与R-CNN/数据分析的应用/电商数据分析/数据分析在医疗领域的应用/NLP学员项目展示/中文NLP的介绍与实际应用/NLP系列直播课/NLP前沿模型训练营等 干货学习资源。

CNN家族算法和Transformer家族的算法在架构上有很大的区别。CNN家族算法通常是用于处理像图像和语音这样的数据,它们通常使用卷积层来提取数据的本地特征。相比之下,Transformer家族的算法主要用于处理文本和语音数据,它们通常使用多头注意力机制来提取数据的全局特征。总的来说,CNN家族的算法更适合处理有局限性的数据,而Transformer家族的算法更适合处理更加复杂的数据。

title: 自然语言处理综述
date: 2021-11-18 11:03:11

自然语言是指人类日常使用的语言,比如:中文、英语、日语等。自然语言灵活多变,是人类社会的重要组成部分,但它却不能被计算机很好地理解。为了实现用自然语言在人与计算机之间进行沟通,自然语言处理诞生了。自然语言处理(Natural Language Processing, NLP)是一个融合了语言学、计算机科学、数学等学科的领域,它不仅研究语言学,更研究如何让计算机处理这些语言。它主要分为两大方向:自然语言理解(Natural language Understanding, NLU)和自然语言生成(Natural language Generation, NLG),前者是听读,后者是说写。

本文将从自然语言处理的历史与发展讲起,进而分析目前深度学习在自然语言处理领域的研究进展,最后讨论自然语言处理的未来发展方向。

1950年,计算机科学之父图灵提出了“图灵测试”,标志着人工智能领域的开端。而此时,正值苏美冷战,美国政府为了更方便地破译苏联相关文件,大力投入机器翻译的研究,自然语言处理从此兴起。从这之后的一段时期内,自然语言处理主要采用基于规则的方法,这种方法依赖于语言学,它通过分析词法、语法等信息,总结这些信息之间的规则,从而达到翻译的效果。这种类似于专家系统的方法,泛化性差、不便于优化,最终进展缓慢,未能达到预期效果。

到了20世纪80、90年代,互联网飞速发展,计算机硬件也有了显著提升。同时,自然语言处理引入了统计机器学习算法,基于规则的方法逐渐被基于统计的方法所取代。在这一阶段,自然语言处理取得了实质性突破,并走向了实际应用。

而从2008年左右开始,随着深度学习神经网络在图像处理、语音识别等领域取得了显著的成果,它也开始被应用到自然语言处理领域。从最开始的词嵌入、word2vec,到RNN、GRU、LSTM等神经网络模型,再到最近的注意力机制、预训练语言模型等等。伴随着深度学习的加持,自然语言处理也迎来了突飞猛进。

接下来,我将介绍自然语言处理与深度学习结合后的相关进展。

在自然语言中,词是最基本的单元。为了让计算机理解并处理自然语言,我们首先就要对词进行编码。由于自然语言中词的数量是有限的,那就可以对每个词指定一个唯一序号,比如:英文单词word的序号可以是1156。而为了方便计算,通常会将序号转换成统一的向量。简单做法是对单词序号进行one-hot编码,每个单词都对应一个长度为N(单词总数)的向量(一维数组),向量中只有该单词序号对应位置的元素值为1,其它都为0。

虽然使用one-hot编码构造词向量十分容易,但并不是一个较好的方法。主要原因是无法很好地表示词的语义,比如苹果和橘子是相似单词(都是水果),但one-hot向量就无法体现这种相似关系。

为了解决上述问题,Google的Mikolov等人于2013年发表了两篇与word2vec相关的原始论文[1][2]。word2vec将词表示成一个定长的向量,并通过上下文学习词的语义信息,使得这些向量能表达词特征、词之间关系等语义信息。word2vec包含两个模型:跳字模型(Skip-gram)[1] 和连续词袋模型(continuous bag of words,CBOW)[2],它们的作用分别是:通过某个中心词预测上下文、通过上下文预测某个中心词。比如,有一句话"I drink apple juice",Skip-gram模型是用apple预测其它词,CBOW模型则是用其它词预测出apple。

首先介绍CBOW模型,它是一个三层神经网络,通过上下文预测中心词。以某个训练数据"I drink apple juice"为例,可以把apple作为标签值先剔除,将"I drink juice"作为输入,apple作为待预测的中心词。

Skip-gram模型与CBOW类似,也是一个三层神经网络模型。不同在于,它是通过中心词预测上下文,即通过"apple"预测出"I drink juice"。接下来简单介绍Skip-gram模型中各层:

两种模型训练结束后,会取 作为词向量矩阵,第i行就代表词库中第i个词的词向量。词向量可用来计算词之间的相似度(词向量点乘)。比如,输入 I drink _ juice 上下文,预测出中心词为apple、orange的概率可能都很高,原因就是在 中apple和orange对应的词向量十分相似,即相似度高。词向量还可以用于机器翻译、命名实体识别、关系抽取等等。

其实这两种模型的原型在2003年就已出现[3],而Mikolov在13年的论文中主要是简化了模型,且提出了负采样与层序softmax方法,使得训练更加高效。

词向量提出的同时,深度学习RNN框架也被应用到NLP中,并结合词向量取得了巨大成效。但是,RNN网络也存在一些问题,比如:难以并行化、难以建立长距离和层级化的依赖关系。而这些问题都在2017年发表的论文《Attention Is All You Need》[4]中得到有效解决。正是在这篇论文中,提出了Transformer模型。Transformer中抛弃了传统的复杂的CNN和RNN,整个网络结构完全由注意力机制组成。

Transformer最核心的内容是自注意力机制(Self-Attention),它是注意力机制(Attention)的变体。注意力的作用是从大量信息中筛选出少量重要信息,并聚焦在这些信息上,比如:人在看一幅图像时,会重点关注较为吸引的部分,而忽略其它信息,这就是注意力的体现。但注意力机制会关注全局信息,即关注输入数据与输出数据以及中间产物的相关性。而自注意力机制则减少了对外部其它数据的关注,只关注输入数据本身,更擅长捕捉数据内部的相关性。

自注意力机制的算法过程如下:

自注意力机制不仅建立了输入数据中词与词之间的关系,还能并行地高效地计算出每个词的输出。

Transformer的总体架构如下:

它分为两部分:编码器(Encoder)和解码器(Decoder)。

编码器的输入是词向量加上位置编码(表明这个词是在哪个位置),再通过多头自注意力 *** 作(Multi-Head Attention)、全连接网络(Feed Forward)两部分得到输出。其中,多头自注意力就是输入的每个词对应多组q、k、v,每组之间互不影响,最终每个词产生多个输出b值,组成一个向量。编码器是transformer的核心,它通常会有多层,前一层的输出会作为下一层的输入,最后一层的输出会作为解码器的一部分输入。

解码器包含两个不同的多头自注意力 *** 作(Masked Multi-Head Attention和Multi-Head Attention)、全连接网络(Feed Forward)三部分。解码器会运行多次,每次只输出一个单词,直到输出完整的目标文本。已输出的部分会组合起来,作为下一次解码器的输入。其中,Masked Multi-Head Attention是将输入中未得到的部分遮掩起来,再进行多头自注意力 *** 作。比如原有5个输入,但某次只有2个输入,那么q1和q2只会与k1、k2相乘,。

如果深度学习的应用,让NLP有了第一次飞跃。那预训练模型的出现,让NLP有了第二次的飞跃。预训练通过自监督学习(不需要标注)从大规模语料数据中学习出一个强大的语言模型,再通过微调迁移到具体任务,最终达成显著效果。

预训练模型的优势如下:

预训练模型的关键技术有三个:

关于预训练模型的架构,以Bert为例:输入是词的one-hot编码向量,乘上词向量矩阵后,再经过多层transformer中的Encoder模块,最终得到输出。

本文介绍了NLP领域的流行研究进展,其中transformer和预训练模型的出现,具有划时代的意义。但随着预训练模型越来越庞大,也将触及硬件瓶颈。另外,NLP在一些阅读理解、文本推理等任务上的表示,也差强人意。总而言之,NLP领域依旧存在着巨大的前景与挑战,仍然需要大家的长期努力。

[1]Mikolov, T, Sutskever, I, Chen, K, Corrado, G S, & Dean, J (2013) Distributed representations of words and phrases and their compositionality In Advances in neural information processing systems (pp 3111-3119)

[2]Mikolov, T, Chen, K, Corrado, G, & Dean, J (2013) Efficient estimation of word representations in vector space arXiv preprint arXiv:13013781

[3]Yoshua Bengio, R´ejean Ducharme, Pascal Vincent, and Christian Janvin A neural probabilistic language model The Journal of Machine Learning Research, 3:1137–1155, 2003

[4]Vaswani A, Shazeer N, Parmar N, et al Attention is all you need[C]//Advances in neural information processing systems 2017: 5998-6008

[5]Peters M E, Neumann M, Iyyer M, et al Deep contextualized word representations[J] arXiv preprint arXiv:180205365, 2018

[6]Radford A, Narasimhan K, Salimans T, et al Improving language understanding by generative pre-training[J] 2018

[7]Devlin J, Chang M W, Lee K, et al Bert: Pre-training of deep bidirectional transformers for language understanding[J] arXiv preprint arXiv:181004805, 2018

[8]Houlsby N, Giurgiu A, Jastrzebski S, et al Parameter-efficient transfer learning for NLP[C]//International Conference on Machine Learning PMLR, 2019: 2790-2799

OpenAPI为一个开放API平台,它可以实现什么功能

OpenAPI为一个开放API平台,主要实现以下功能:
1) 动态对消费方(Consumer)进行管理
2) 动态对API方法及其引数进行管理
3) 动态生成API方法使用说明
4) 构建线上Test环境
5) 线上API呼叫文件向导
6) 统一的REST呼叫路径及API实现策略,方便编写API实现逻辑

QoS是什么,我怎么配置它?它可以实现什么功能??

QoS的英文全称为"Quality of Service",中文名为"服务质量"。QoS是网路的一种安全机制, 是用来解决网路延迟和阻塞等问题的一种技术。
在正常情况下,如果网路只用于特定的无时间限制的应用系统,并不需要QoS,比如Web应用,或E-mail设定等。但是对关键应用和多媒体应用就十分必要。当网路过载或拥塞时,QoS 能确保重要业务量不受延迟或丢弃,同时保证网路的高效执行。 配置的时候要看什么网路交换机,不同的品牌的交换机,配置也不同,不过他们有一个共同点就是一定要设定优先顺序。

什么是网路版广告机?它可以实现哪些功能?

网路版广告机的价格相对单机版要高些,但是广告更新快,而且可以远端控制,可以节省人工。 ◎可随时随地更换播放内容(带后台作业系统)实行统一发布和定时释出。 ◎支援插播功能,可对最新讯息、紧急通知及时插播 ◎支援播放天气预报、时期/时间、可播放PPT文件。 ◎版式个性化:可自已设计页面版式 ◎ 自动设定开/关机 ◎ 全屏分屏轮播播放,支援音画同时播放、多种播放模式,可设定留时间 ◎ 断电记忆。 ◎ 全功能遥控器 *** 作 ◎ 拥有防盗锁功能,防止机器或储存装置被盗。496

wifi模组有哪些功能,它可以实现手机APP控制吗?

wifi模组的功能根据介面不同,可以实现不同的功能,比如有USB介面的wifi模组,一般运用于无线网络卡;还有SPI介面的wifi模组,一般用来传输稍微大一点的资料;还有SDIOwifi模组,这种模组一般应用在手机wifi模组里面;还有一种串列埠wifi模组,这种模组应用比较比较广泛,可以让一些串列埠装置实现联网化,也是未来物联网技术重点应用;我们说手机APP控制,一般是串列埠wifi模组和SPIwifi模组,我朋友最近就在搞这些wifi的东西,看到他在应用一块STM32微控制器wifi开发板在学习:hx-wl/stm32-wifi/他们有提供微控制器原始码和APP原始码,是物联网技术爱好者必备的利器,希望对你有帮助。

打算买一个投影仪,最近关注了小帅UFO,它可以实现3D功能吗?

很多投影装置都可以实现的!南京汉恩的全息投影就不错啊!有3D功能的!

ucenter api 哪个介面可以实现注册功能

下面使用MySql Connector/提供的专用物件
MySqlConnection mycon = new MySqlConnection(constr);
myconOpen();
MySqlCommandmycmd = new MySqlCommand("select from users", mycon);
MySqlDataReader myreader = mycmdExecuteReader();
while (myreaderRead())

VPDN可以实现什么功能

答案:思想是生命的奴隶,生命是时间的弄人。

WPF可以实现什么功能?

微软的Visual Studio都是WPF开发的 你就想想吧
你说的这些需求对他来说都是小意思

lifecycle可以实现什么功能

接着上一篇文章的内容,这篇文章一边分析RxLifecycle的实现原理,一边学习RxJava *** 作符。
首先RxLifecycle在基础类里定义BehaviorSubject并系结Activity或Fragment的生命周期,生命周期被呼叫时BehaviorSubject就发射相应周期的资料。 并且BehaviorSubject同时作为一个被观察者,随时被自定义的 *** 作符观察著。
```java private final BehaviorSubject lifecycleSubject = BehaviorSubjectcreate(); @Override @CallSuper protected void onStart() { superonStart(); lifecycleSubjectonNext(ActivityEventSTART); } @Override @CallSuper protected void onResume() { superonResume(); lifecycleSubjectonNext(ActivityEventRESUME); } @Override @CallSuper protected void onPause() { lifecycleSubjectonNext(ActivityEventPAUSE); superonPause(); } @Override @CallSuper protected void onS() { lifecycleSubjectonNext(ActivityEventSTOP); superonS(); } ```
再来看看基础类里如何提供定义的变换符,RxLifecycle提供的bindActivity方法将BehaviorSubjec传入,定义的 *** 作符根据生命周期资料进行变换。 ```java @Override @NonNull @CheckResult public finalObservableTransformer bindToLifecycle() { return RxLifecyclebindActivity(lifecycleSubject); } ``` 把核心变换 *** 作的程式码贴上,边分析思路边熟悉了解几个陌生的 *** 作符。这里几个关键的 *** 作应用实现了,系结生命周期的变化。 ###takeUntil TakeUntil 订阅并开始反射原始Observable,它还监视你提供的第二个Observable。
如果第二个Observable发射了一项资料或者发射了一个终止通知,TakeUtil返回的Observable会停止反射原始Observable并终止。原始码使用这个 *** 作判断是否执行发射原始Observable。 程式码理解一下takeUntil的作用 ```Java Observablejust(1)takeUntil(Observablecreate(new ObservableOnSubscribe() { @Override public void call(Subscriber subscriber) { subscriberonNext("abc"); 如果不发射"abc",Log资讯回接收到onNext=1; } }))subscribe(UtilsgetSubscriber()); ``` ```java 04-26 18:19:59886 15714-15714/quleirxjavademo D/RxJava: onNext : 1 04-26 18:19:59886 15714-15714/quleirxjavademo D/RxJava: onCompleted ``` ###bineLatest 当两个Observables中的任何一个发射了资料时,使用一个函式结合每个Observable发射的最近资料项,并且基于这个函式的结果发射资料。这里根据BehaviorSubject生命周期的变化作为判断是否发射资料终止原始它还监视你提供的第二个Observable。 ```java ObservablebineLatest( sharedLifecycletake(1)map(correspondingEvents),sharedLifecycleskip(1), new Func2() { @Override public Boolean call(R bindUntilEvent, R lifecycleEvent) { return lifecycleEventequals(bindUntilEvent); } }) ``` ###takeFirst   如果原始Observable没有发射任何满足条件的资料,takeFist 会返回一个空的Observable(不呼叫 onNext() 但是会呼叫 onCompleted )。如果生命周期不是系结的周期,将继续匹配下一个周期时间,如果相同就传送空的Observable,停止原始的Observable执行发射资料。         原理分析到这里希望能够带来帮助。

进行计算。 由于transformer的并行性,所以会把一组句子以src_token和tgt_ 这里也把这组数据称作一个batch,句子个数即batch_size。 在整个模型训练好 这是在 Transformer架构上改进的稳定GAN训练的结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/13134446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-10
下一篇 2023-06-10

发表评论

登录后才能评论

评论列表(0条)

保存