transformer 线性变阵矩阵 wq(Transformer 模型相关疑问以及解答)
本文目录
- Transformer 模型相关疑问以及解答
- 为何说Transformer是目前人工智能领域工程落地实践Bayesian理论的典型
- Transformer模型解析记录
- transformer的权重矩阵是对称的吗
- 图解什么是 Transformer
- Transformer最全解析(attention is all you need)
- transformer 计算量 参数量分析
Transformer 模型相关疑问以及解答
1、Decoder 部分中的 decoder 的输入是如何的?是一次性给多个输入节点进行输入数据,还是每步只给一个输入节点输入数据呢?2、X、 、Q、K、V 的维度是怎么样的?中间产物的维度又是怎么样的? 注:此处不考虑位置编码 注:此处的 X 表示的是一个批次的样本,而 表示第 i 个样本 注: 指的是 Encoder 中 encoder 层的所有输出节点的输出值 设: batch_size:一个批次里的样本数 sequence_length:句子序列中的元素个数 embedding_size:词向量的大小 hidden_size:Encoder 中 encoder 的节点数 维度表示格式如下: 张量名: 或 1 注:1 表示常量 则: X: : : : Q = : K = : V = : = : = : = : : : 或 : 注: 表示的是某个 encoder 层的第 i 个输出节点的输出值3、Transformer 为什么需要多头机制? 个人理解是 Transformer 的多头机制是为了让不同的头关注句子的不同地方,从而能够学习到不同的模式。 但有论文表明,Transformer 的多头结构里,存在大量模式相同的头,仅有少数的几个头跟其它的头的模式不同,故而不同的头是否能够学习到不同的模式,还是头的数量过多,造成了冗余 可参考该文章: 为什么Transformer 需要进行 Multi-head Attention? 4、为什么 需要除以 呢? 假设 Q、K 都是 n 维向量(即 ),则展开相乘可得: ,而 被归一化到 ,因此 的最大值为 1,故 的最大值相当于 n 个 1 相加,即等于 n。也就是说 的最大值等于 Q、K 的维度,最小值则 等于 0 。显然要进行归一化的话,则需要除以 n,这样才能将 。 该文章( transformer中的attention为什么scaled? )则是从两个变量的均值和方差出发,进行推导。但是最后还是要通过计算向量的点积 来求得其最大值 n,然后再除以 n 来进行归一化。 另外该文章还解释了另一个问题,即为什么要进行归一化,因为如果不需要进行归一化的话,自然也就不需要除以 n 了。所以该文章将该问题 分解为了两个子问题: 1、为什么需要进行归一化 2、为什么进行归一化需要除以 n,而不是其他数 子问题 2 在上面已经解释得很好了,因此在此继续解释子问题 1. 首先是因为 要使用 softmax 进行归一化(注意此处的归一化跟子问题 2 中的归一化是两个操作),故而需要写成 ,由于 softmax 函数的特性,即将大的数进行放大(最大为 1),将小的数进行缩小(最小为 0)。故如果 的值过大的话,那么经过 softmax 函数的操作后,很有可能变成 1.特别是 的最大值等于 n,也就是说 Q、K 的维度越大,则 经过 softmax 操作之后就越有可能接近于 1. 那么为何 softmax 的输出值接近于 1 是不好的呢? 假设 s_output 为 softmax 的输出值,那么 s_output = 当 s_output 接近于 1 的时候 s_output ( 为一个极小的数),那么此时对 s_output 进行求导,s_output 的导数结果为: s’ = 0 ,即此时的导数等于 0 了。那就是说,当 softmax 的输出值等于 1 的时候,softmax 的梯度为 0 向量,此时无法再使用反向传播,即无法继续训练神经网络了。 注:矩阵形式的 softmax 求导可以参考 邱锡鹏 的 《神经网络与深度学习》 的附录 B 2.4
为何说Transformer是目前人工智能领域工程落地实践Bayesian理论的典型
贝叶斯神经网络(Bayesian Neural Network)通过提供不确定来回答“Why Should I Trust You?”这个问题。实现上讲,贝叶斯通过集成深度学习参数矩阵中参数的Uncertainty来驾驭数据的不确定性,提供给具体Task具有置信空间Confidence的推理结构。一般的神经网络我们称为Point estimation neural networks,通过MLE最大似然估计的方式建立训练的目标函数,为神经网络中的每个参数寻找一个optimal最优值;而贝叶斯深度学习一种把概率分布作为权重的神经网络,通过真实数据来优化参数的概率分布,在训练的过程中会使用MAP最大后验概率集成众多的模型参数的概率分布来拟合各种不确定的情况,提供处理数据不确定性的信息表达框架。Transformer是一个符合Bayesian深度学习网络的AI架构,尤其是其经典的multi-head self-attention机制,该机制其实采用模型集成的思想来从工程角度落地贝叶斯深度学习网络;基于Prior先验信息的正则化效果,multi-head机制所表达的信息多元化及不确定性能够提供具有高置信度区间的回答 “Why Should I Trust You?”贝叶斯Bayesian Transformer课程片段1:线性回归及神经网络AI技术底层通用的贝叶斯数学原理及其有效性证明贝叶斯Bayesian Transformer课程片段2:人工智能算法底层真相之MLE和MAP完整的数学推导过程概率、对数、求导等以及MLE和MAP关系详解贝叶斯Bayesian Transformer课程片段3:语言模型Language Model原理机制、数学推导及神经网络实现贝叶斯Bayesian Transformer课程片段4:图解Transformer精髓之架构设计、数据在训练、推理过程中的全生命周期、矩阵运算、多头注意力机制可视化等贝叶斯Bayesian Transformer课程片段5:什么叫Bayesian Transformer,Bayesian Transformer和传统的Transformer的核心区别是什么?贝叶斯Bayesian Transformer课程片段6:Bayesian Transformer这种新型思考模型在学术和工业界的意义是什么,为什么说Transformer中到处都是Bayesian的实现?贝叶斯Bayesian Transformer课程片段7:贝叶斯Bayesian Transformer数学推导论证过程全生命周期详解及底层神经网络物理机制剖析
Transformer模型解析记录
整个Transformer模型由Encoder和Decoder两部分组成。Encoder负责对输入数据的编码,而Decoder负责对编码后的数据进行解码。
Encoder由N个结构相同,参数不共享的模块组成,每个模块又由多头自注意力层和全连接层组成,其中多头自注意力层和全连接层都加上了残差连接和layer normalization。
Decoder与Encoder结构类似,相比于Encoder,Decoder部分多了一个 Multi-Head Attention ,第一个 Multi-Head Attention 采用Masked操作,第二个 Multi-Head Attention 的 K 和 V 使用Encoder的输出,而Q使用上一个Decoder block的输出。 Decoder的输出通过一个线性层和softmax输出下一个翻译单词的概率。
Encoder由N个结构相同,参数不共享的的Layer组成(论文中N=6),也即图1左侧的单元,最左边有个“Nx”。 每个Layer由 Multi-Head Attention 和 Feed-Forward 两个sub_layer组成。其中每个sub_layer都加了残差连接(Residual Connect)和归一化(Normalization)操作。则每个sub_layer的输出可表示为:
Muti-Head Attention从结构上来看就是通过h个不同的线性变换将输入 投影到h个不同的 组合,最后将h个不同的Attention结果拼接起来,最后经过一个Liner层得到Muti-Head Attention的输出。
其中, 、
Muti-Head Attention输出的维度是
关于Attention的详细介绍,可以参考之前文档:
Feed Forward也称Position-wise feed-forward networks,该层主要提供非线性变换。之所以是position-wise是因为过线性层时每个位置i的变换参数是一样的。
该层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应公式为:
问 :Attention输出之后的结果会和 相乘来进行维度变换,那这里为什么又要增加一个2层的FFN网络呢? 答 :FFN网络的加入给模型增加了非线性(Relu激活函数),增加了模型的表现能力。当然去掉FFN层也是可以的,只不过效果上会差些。
Decoder是图1的右半部分,与左半部分的Encoder类似,但又存在一些区别。
Decoder比Encoder多了一个Multi-Head Attention,第一个Multi-Head Attention采用Masked操作,因为在生成任务中,前面的词语是看不到后面词语的信息的,因此需要加入Masked来避免信息泄露。第二个Multi-Head Attention输入的 是根据Encoder的输出编码矩阵映射而来,而 是根据上一个Decoder的输出映射而来。
最后有一个 Softmax 层计算下一个翻译单词的概率。
模型在解码的过程中需要注意的是训练和预测不一样。 在训练时,解码是一次全部decode出来,用上一步的ground truth来预测(mask矩阵也会改动,让解码时看不到未来的token); 而预测时,因为没有ground truth了,需要一个个预测。
上面简单介绍了 Encoder 和 Decoder 模块,下面简单介绍一下Transformer的Position Embedding。
引入Position Embedding主要是为了弥补Transformer模型对位置信息的不足,将Position Embedding与token Embedding相加后,即可保留各个token的位置信息。
论文作者提出了两种添加位置信息的的方法: 一种方法是直接用不同频率的正余弦函数直接计算各个token的位置id,公式如下:
另一种方法是直接学习出一个Position Embedding。
通过实验发现,两种方法结果差不多,最后作者选择了第一种方法。
Transformer 与 RNN 不同,可以比较好地并行训练。
Transformer 本身是不能利用单词的顺序信息的,因此需要在输入中添加位置 Embedding,否则 Transformer 就是一个词袋模型了。
Transformer 的重点是 Self-Attention 结构,其中用到的 Q, K, V矩阵通过输出进行线性变换得到。
Transformer 中 Multi-Head Attention 中有多个 Self-Attention,可以捕获单词之间多种维度上的相关系数 attention score。
Transformer 模型详解 (推荐) 【NLP】Transformer模型原理详解 【经典精读】Transformer模型深度解读
transformer的权重矩阵是对称的吗
原始的transformer是全对称的,也就是改变两个字符的位置,预测结果可能是相同的,这点与不同的权重矩阵无关。Transformer算法由Alex Graves提出,旨在解决序列转换问题(The problem of sequence transduction),输入已知序列,输出目标序列,用于语音识别、文本翻译、人机对话等。算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。
图解什么是 Transformer
Transformer 是 Google 团队在 17 年 6 月提出的 NLP 经典之作, 由 Ashish Vaswani 等人在 2017 年发表的论文 Attention Is All You Need 中提出。
Transformer 在机器翻译任务上的表现超过了 RNN,CNN,只用 encoder-decoder 和 attention 机制就能达到很好的效果,最大的优点是可以高效地并行化。
Transformer 是一种基于 encoder-decoder 结构的模型,
在 Encoder 中,
在 Decoder 中,
下面我们具体看一下其中这几个概念,这里主要参考 Jay Alammar,他在 The Illustrated Transformer 中给出了很形象的讲解。
例如我们要进行机器翻译任务,输入一种语言,经过 Transformer,会输出另一种语言。
Transformer 的 encoder 由 6 个编码器叠加组成, decoder 也由 6 个解码器组成, 在结构上都是相同的,但它们不共享权重。
每一个 encoder 都分为两个子层:
每一个 decoder 也具有这两个层,但还有一个注意力层,用来帮助解码器关注输入句子的相关部分
首先使用嵌入算法将输入的 word 转换为 vector, 最下面的 encoder ,它的输入就是 embedding 向量, 在每个 encoder 内部, 输入向量经过 self-attention,再经过 feed-forward 层, 每个 encoder 的输出向量是它正上方 encoder 的输入, 向量的大小是一个超参数,通常设置为训练集中最长句子的长度。
在这里,我们开始看到 Transformer 的一个关键性质, 即每个位置的单词在 encoder 中都有自己的路径, self-attention 层中的这些路径之间存在依赖关系, 然而在 feed-forward 层不具有那些依赖关系, 这样各种路径在流过 feed-forward 层时可以并行执行。
Positional Encoding 是一种考虑输入序列中单词顺序的方法。
encoder 为每个输入 embedding 添加了一个向量,这些向量符合一种特定模式,可以确定每个单词的位置,或者序列中不同单词之间的距离。
例如,input embedding 的维度为4,那么实际的positional encodings如下所示:
在下图中,是20个单词的 positional encoding,每行代表一个单词的位置编码,即第一行是加在输入序列中第一个词嵌入的,每行包含 512 个值, 每个值介于 -1 和 1 之间,用颜色表示出来。
可以看到在中心位置分成了两半,因为左半部分的值由一个正弦函数生成,右半部分由余弦函数生成,然后将它们连接起来形成了每个位置的编码向量。
当然这并不是位置编码的唯一方法,只是这个方法能够扩展到看不见的序列长度处,例如当我们要翻译一个句子,这个句子的长度比我们训练集中的任何一个句子都长时。
例如我们要翻译:”The animal didn’t cross the street because it was too tired” 这句话 这句话中的“it”是指什么?它指的是 street 还是 animal? 这对人类来说是一个简单的问题,但对算法来说并不简单。
而 Self-Attention 让算法知道这里的 it 指的是 animal
当模型在处理每个单词时,self-attention 可以帮助模型查看 input 序列中的其他位置,寻找相关的线索,来达到更好的编码效果。它的作用就是将对其他相关单词的“understanding”融入我们当前正在处理的单词中。
例如上图中,在第5层时,我们就知道 it 大概指的是 animal 了。
第一步,为编码器的每个输入单词创建三个向量, 即 Query vector, Key vector, Value vector 这些向量通过 embedding 和三个矩阵相乘得到, 请注意,这些新向量的尺寸小于嵌入向量。它们的维数为64,而嵌入和编码器输入/输出向量的维数为512.它们不一定要小,这是一种架构选择,可以使多头注意力计算(大多数)不变。 将x1乘以WQ得到Query向量 q1,同理得到Key 向量 和, Value 向量 这三个向量对 attention 的计算有很重要的作用
第二步,是计算一个得分 假设我们要计算一个例子中第一个单词 “Thinking” 的 self-attention,就需要根据这个单词,对输入句子的每个单词进行评分,这个分数决定了对其他单词放置多少关注度。 分数的计算方法是, 例如我们正在考虑 Thinking 这个词,就用它的 q1 去乘以每个位置的 ki
第三步和第四步,是将得分加以处理再传递给 softmax 将得分除以 8(因为论文中使用的 key 向量的维数是 64,8 是它的平方根) 这样可以有更稳定的梯度, 然后传递给 softmax,Softmax 就将分数标准化,这样加起来保证为 1。 这个 softmax 分数决定了每个单词在该位置bbei表达的程度。 很明显,这个位置上的单词将具有最高的softmax分数,但有时候注意与当前单词相关的另一个单词是有用的。
第五步,用这个得分乘以每个 value 向量 目的让我们想要关注单词的值保持不变,并通过乘以 0.001 这样小的数字,来淹没不相关的单词
第六步,加权求和这些 value 向量
这就是第一个单词的 self-attention 的输出 得到的向量接下来要输入到前馈神经网络,在实际实现中用矩阵乘法的形式完成
论文中还增加一种称为 multi-headed 注意力机制,可以提升注意力层的性能
它使得模型可以关注不同位置
虽然在上面的例子中,z1 包含了一点其他位置的编码,但当前位置的单词还是占主要作用, 当我们想知道“The animal didn’t cross the street because it was too tired” 中 it 的含义时,这时就需要关注到其他位置
这个机制为注意层提供了多个“表示子空间”。下面我们将具体介绍,
1. 经过 multi-headed , 我们会得到和 heads 数目一样多的 Query / Key / Value 权重矩阵组 论文中用了8个,那么每个encoder/decoder我们都会得到 8 个集合。 这些集合都是随机初始化的,经过训练之后,每个集合会将input embeddings 投影到不同的表示子空间中。
2. 简单来说,就是定义 8 组权重矩阵,每个单词会做 8 次上面的 self-attention 的计算 这样每个单词会得到 8 个不同的加权求和 z
3. 但在 feed-forward 处只能接收一个矩阵,所以需要将这八个压缩成一个矩阵 方法就是先将8个z矩阵连接起来,然后乘一个额外的权重矩阵WO
下图显示了在例句中,it 的不同的注意力 heads 所关注的位置,一个注意力的焦点主要集中在“animal”上,而另一个注意力集中在“tired”,换句话说,it 是 “animal”和“tired”的一种表现形式。 当然如果选了8个层,将所有注意力 heads 都添加到图片中,就有点难以解释了。
这里有一个细节,
即在每个 encoders 和 decoders 里面的 self-attention, ffnn,encoders-decoders attention 层,都有 residual 连接,还有一步 layer-normalization
下面我们看一下 Decoder 部分
1. 输入序列经过编码器部分,然后将最上面的 encoder 的输出变换成一组 attention 向量 K和V 这些向量会用于每个 decoder 的 encoder-decoder attention 层,有助于解码器聚焦在输入序列中的合适位置
重复上面的过程,直到 decoder 完成了输出,每个时间步的输出都在下一个时间步时喂入给最底部的 decoder,同样,在这些 decoder 的输入中也加入了位置编码,来表示每个字的位置。
2. 解码器中的 self attention 层与编码器中的略有不同 在解码器中,在 self attention 的 softmax 步骤之前,将未来的位置设置为 -inf 来屏蔽这些位置,这样做是为了 self attention 层只能关注输出序列中靠前的一些位置。
Encoder-Decoder Attention 层的工作方式与 multiheaded self-attention 类似,只是它用下面的层创建其 Queries 矩阵,从编码器栈的输出中获取 Keys 和 Values 矩阵。
3. 解码器最后输出的是一个向量,如何把它变成一个单词,这就要靠它后面的线性层和 softmax 层 线性层就是一个很简单的全连接神经网络,将解码器输出的向量映射成一个更长的向量。 例如我们有 10,000 个无重复的单词,那么最后输出的向量就有一万维。 每个位置上的值代表了相应单词的分数。
softmax 层将这个分数转换为了概率。
我们选择概率最大的所对应的单词,就是当前时间步的输出。
学习资源: ***隐藏网址******隐藏网址******隐藏网址***
Transformer最全解析(attention is all you need)
Transformer出自google,被广泛应用于NLP的各项任务中,在transformer基础上改进优化的BERT模型在2019年11项NLP任务中表现SOTA。***隐藏网址***
在处理变长的序列问题时,一般的做法是利用卷积神经网络或循环神经网络。
无论卷积还是循环神经网络其实都是对变长序列的一种“局部编码”:卷积神经网络显然是基于N-gram的局部编码;而对于循环神经网络,由于梯度消失等问题也只能建立短距离依赖。
Attention可以理解为一种序列聚焦方法,基本思想是对序列分配注意力权重,把注意力集中在最相关的序列上。 Attention 机制实质上就是一个寻址过程,通过给定一个任务相关的查询 Query 向量 Q,通过计算与 Key 的注意力分布并附加在 Value 上,从而计算 Attention Value,这个过程实际上是 Attention 缓解神经网络复杂度的体现,不需要将所有的 N 个输入都输入到神经网络进行计算,而是选择一些与任务相关的信息输入神经网络,与 RNN 中的门控机制思想类似。
用X = 表示N 个输入样本;通过线性变换得到为查询向量序列,键向量序列和值向量序列:
所谓self-attention自注意力机制,即其注意力概率分布来自网络自身的输入的变换,而传统attention的注意力概率分布来自外部。
Transformer模型中采用了 encoer-decoder 架构,论文中encoder层由6个encoder堆叠在一起,decoder层也一样。
每一层的encoder和decoder的结构如下图所示:
transformer模型中缺少一种解释输入序列中单词顺序的方法,它跟序列模型还不不一样。为了处理这个问题,transformer给encoder层和decoder层的输入添加了一个额外的向量Positional Encoding,维度和embedding的维度一样,这个向量采用了一种很独特的方法来让模型学习到这个值,这个向量能决定当前词的位置,或者说在一个句子中不同的词之间的距离。这个位置向量的具体计算方法有很多种,论文中的计算方法如下:
其中pos是指当前词在句子中的位置,i是指向量中每个值的index,可以看出,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码。最后把这个Positional Encoding与embedding的值相加,作为输入送到下一层。
在每个编码器中的每个子层(自注意力、前馈网络)的周围都有一个残差连接,并且都跟随着一个“层-归一化”步骤。
Normalization有很多种,但是它们都有一个共同的目的,那就是把输入转化成均值为0方差为1的数据。我们在把数据送入激活函数之前进行normalization(归一化),因为我们不希望输入数据落在激活函数的饱和区。
mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。其中,padding mask 在所有的 scaled dot-product attention 里面都需要用到,而 sequence mask 只有在 decoder 的 self-attention 里面用到。
原论文中说到进行Multi-head Attention的原因是将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,最后再将各个方面的信息综合起来。其实直观上也可以想到,如果自己设计这样的一个模型,必然也不会只做一次attention,多次attention综合的结果至少能够起到增强模型的作用,也可以类比CNN中同时使用 多个卷积核 的作用,直观上讲,多头的注意力 有助于网络捕捉到更丰富的特征/信息 。
seq2seq缺点 :这里用代替这个词略显不妥当,seq2seq虽已老,但始终还是有其用武之地,seq2seq最大的问题在于 将Encoder端的所有信息压缩到一个固定长度的向量中 ,并将其作为Decoder端首个隐藏状态的输入,来预测Decoder端第一个单词(token)的隐藏状态。在输入序列比较长的时候,这样做显然会损失Encoder端的很多信息,而且这样一股脑的把该固定向量送入Decoder端,Decoder端不能够关注到其想要关注的信息。
Transformer优点 :transformer不但对seq2seq模型这两点缺点有了实质性的改进(多头交互式attention模块),而且还引入了self-attention模块,让源序列和目标序列首先“自关联”起来,这样的话,源序列和目标序列自身的embedding表示所蕴含的信息更加丰富,而且后续的FFN层也增强了模型的表达能力,并且Transformer并行计算的能力是远远超过seq2seq系列的模型,因此我认为这是transformer优于seq2seq模型的地方
transformer 计算量 参数量分析
transformer最近非常火,同时也在各个任务上基本上都达到了state of art,swin transformer更是降维打击,在各个任务上点数大幅碾压。之前transformer最被人诟病的是从NLP迁到cv领域的计算量和参数量大大增加,导致图片级别的transformer成了有钱人的游戏,本文我们就来一步一步分析一下transformer每一步的计算量和参数量,为什么会计算量参数量大大增加。 首先来看一下transformer的结构,结构第一次是论文: Attention is all you need 提出的,包含encoder和decoder两个部分,encoder把输入的信息进行注意力学习之后作为query和key传到decoder中,整个encoder和decoder的模块,包含的结构有multi-head-attention和feed-forword是之前卷积神经网络中没有接触过的,其中multi-head-attention是transformer的核心,接下来我们先详细解释一下multi-head-attention的具体结构以及在detr里面的实现过程。 multi-head-attention的输入是query,key,value;其中query,key首先通过矩阵相成得到一个attention矩阵,然后attention矩阵value再矩阵相乘得到加了attention信息的feature。在detr中,query,key,value都是来源于backbone提取出的特征,唯一不同的是query,key在特征的基础上加上了位置编码信息(之后详细介绍),这样得到的attention信息就是和位置有关的; backbone输出的feature纬度是NxCxHxW,通过reshape以及transpose得到HWxNxC的纬度,然后再各自通过一个CxC的全连接层,此处他们三个的权值不共享,所以参数量是3xCxC,计算量是3xHWxCxC。 接下来是multi-head的过程,multihead的原理是把C维的channel分成多个head,每个head学习不同方面的attention信息,同时参数量和计算量也不会额外增加;在detr中,C=256,head的数量是8,所以每个head是32维度。接下来,query,key,value都经过reshape,以及transpose之后变成了NhxHWxD,然后key再transpose一次,变成NhxDxHW,query和key通过torch.bmm(batch matrix-matrix)的操作,得到NhxHWxHW的tensor,这个bmm的计算量是CxHWxHW,而得到的这个tensor包含了每个feature和其他feature的attention关系(HWxHW);接下来经过scale(1/ )的计算,原因: transformer为什么要经过scale ,乘以mask,再过一下softmax,就得到了feature的attention关系图,然后把这个attention矩阵和value再进行torch.bmm的操作,得到经过attention的feature map,再过一次全连接,得到transformer的输出。可以看到整个过程包含两次bmm的计算,四次全连接的计算,总体的计算量: 参数量是4xCxC。 可以看到最大的计算量在和HW有平方关系的矩阵计算bmm,而这两次计算主要是对每个feature计算和其他HW个feature的关系,所以swin transformer为了解决这个问题,提出了只计算local window里面WxW个feature,每个feature和其他WxW个feature的关系,因此计算的复杂度是HWxWxW,在swin transformer里面,W设置为7,具体的可以等swin transformer code release之后具体讲述。 swin transformer
更多文章:
windowsdefender关闭(win10如何关闭windows defender)
2024年7月1日 12:16
奇迹餐厅2里,自由模式里的特殊设备供应商里的东西怎样拿出来用阿?奇迹餐厅2顾客抱怨上菜慢怎么办
2024年6月9日 15:11
玩魔兽,采虚空龙蛋,就那个用来换灵翼之龙声望的,用了蘑菇插件,想改成光柱效果?罪恶都市秘籍
2024年5月16日 23:46
u盘启动盘制作工具哪个最好(谁有U盘启动盘制作工具完整的十大排行榜)
2024年7月28日 16:26
iphone激活时间查询(如何查看iPhone手机的初始激活时间)
2024年7月2日 20:52
午夜dj在线视频观看在线下载(想下载点DJ嗨曲不知道去那网站不要收费的网站啊)
2024年5月13日 02:03
popstar电脑版(有一个单机游戏,点同一种颜色的方块就会消除,里面的方块就分别会说Red together)
2023年9月20日 17:00
《传奇永恒》公会任务攻略 公会任务怎么做?天天传奇巅峰大乱斗玩法规则介绍
2024年6月30日 23:52