Transformer简介

Transformer:

一、 总体架构

Transformer是“编码器—解码器”架构,由编码器(encoder)和解码器(decoder)组成,其都是多头自注意力模块的叠加。其中,input sequence分成两部分,分别为源(input)输入序列和目标(output)输出序列。前者输入编码器,后者输入解码器,两个序列均需进行embedding表示并加入位置信息。
0

二、 encoder

1. 总体架构:

Transformer编码器由多个相同的层叠加而成,每个层都有两个子层(sublayer),第一个是多头自注意力(multi-head self-attention)汇聚;第二个子层是基于位置的前馈神经网络。每个子层都采用了残差链接。
0

2. 架构设计:
  1. 首先对输入序列进行词嵌入表示并加入位置信息。
  2. 之后,将当前编码器层的输入序列放入多头自注意力层生成新的向量。具体来说,在计算编码器的自注意力时,查询、键和值都来自于前一个编码器层的输出。
  3. 将多头自注意力层的输出与当前编码器层的输入做残差连接并将结果做layer normalization。
  4. 将layer normalization后的结果放入全连接层(feed forward)层。该层的作用是对自注意力层中输出的所有位置表示进行变换,所以其被称为基于位置的前馈神经网络。
  5. 之后进行残差连接并进行layer normalization。
  6. 将结果送入下一个编码器层重复 N N N次。

三、 decoder

1.总体架构
0

如图,解码器接入编码器最后的输出向量。假设编码器学习的序列是“机器学习”。当解码器接收到[BEGIN]Token时会产生第一个字符“机”,之后由产生的第一个字符“机”产生第二个字符“器”,之后由前两个字符“机器”产生第三个字符“机器学”,之后由产生的前三个字符生成“习”,之后由产生的前四个字符产生[END]token,序列生成结束。

0

如图,序列在经过decoder后,会对生成向量做softmax分类,从词表中查表得到生成的字符。

2. 架构设计:

如图:

0

如图,解码器与编码器组成很相似,其中:

  1. 解码器的第一个multi-head attention变成了masked multi-head attention,该自注意力层只能”向前“看不能”向后看“,因为在解码器中,字符是一个一个产生的,不能”向后“看到当前生成序列的后面字符。
  2. 采用了cross attention层
  3. 在经过 N N N个解码器层后,将输出的向量输入到全连接层并进行softmax分类,得到最终输出字符,并将所有输出字符作为下次输入,直到输出[END]
3. cross attention

如图:
0

如图,cross attention的q来自decoder,kv来自encoder。该层可以很好的利用编码器学习的信息,也叫”编码器—解码器“注意力层。

4. 训练:
  1. teacher forcing

    图一:
    0

    图二:
    0

    如图一,训练与预测最大的不同是解码器的输入:

    1. 预测时,解码器的输入除了第一个[BEGIN]字符,其余字符都来自解码器的前一个预测字符。
    2. 训练时,解码器的所有输入都是真实的数据集输入,此时解码器的输出仅仅用来计算交叉熵来进行模型优化。这种方法被叫做teacher forcing

    如图二为Transformer的整体训练架构。

  2. Tips
    1. copy mechanism: 在对话和引用中,一些词汇不必由模型自己产生,而是直接复制输入即可。

      如:–我是小明

      ​ --你好小明

      其中,小明可直接复制由会话中,而不用模型自己生成。

    2. guide attention:

      在特定的问题情境中,强迫注意力层的处理方向。如在语音识别中,处理方向为只有从左到右。

    3. beam search:

      greedy decoding: 在最初的解码器中,进行softmax时只选择当前字符得分最高的字符。但是,单个字符得分最高不代表整个句子中该字符得分最高。

      beam search: 在每次进行字符选择时,选择得分排名前 n n n字符。最后得到的字符得分可能比每次只选择一个字符的得分要好。如图:
      0

      如图,若按照贪心策略,每次都选当前得分最高的字符,那就是红色路径,最后的得分只有0.6,但是若规定每次选择排名前2的字符,那按照绿色路径最后字符的得分为0.9优于红色路径。

      注意:beam search时每次总共选择 n n n个而不是每个分叉选 n n n个。

      当decoder的输出很确定时,使用beam search效果会变好。如:问答

      当decoder的输出带有创造性时,使用beam search效果会变差。如:写文章

  3. Optimizing Evaluation Metrics
    1. 训练时采用交叉熵
    2. 评估模型时采用 BULE score
### Swin Transformer 概述 Swin Transformer 是一种基于Transformer架构设计的模型,专为计算机视觉任务而优化。传统Transformer在处理图像数据时存在计算复杂度高、难以捕捉局部特征等问题。为此,Swin Transformer引入了分层结构和移位窗口机制来有效降低计算成本并增强局部表示能力[^1]。 具体来说,该网络采用了一种独特的窗口化多头自注意力(W-MSA)模块,在不同层次上逐步缩小感受野范围的同时保持较高的分辨率;并通过交替执行常规与移位版本的W-MSA操作实现跨窗信息交流。这种设计不仅使得模型能够高效地建模长程依赖关系,而且可以更好地适应各种尺度下的目标检测、分割等下游任务需求[^4]。 ### 应用场景 #### 图像修复 利用Swin Transformer强大的表征能力和灵活性,研究人员开发出了名为SwinIR的方法用于解决低质量图片恢复难题。实验表明,相较于其他先进方案,此方法能够在保留更多细节的前提下显著提升重建效果的质量。 #### 人脸识别及相关任务 对于人脸表情识别这一特定领域而言,Swin Transformer凭借其特有的混合注意力机制以及窗口划分策略展现出了卓越的表现力。这些特性有助于更精准地提取面部区域内的细微变化模式,从而提高分类准确性。尽管目前还存在着诸如实时性等方面的局限性有待克服,不过长远来看,这项技术极有可能会推动整个行业向前发展[^2]。 #### 物体检测与语义分割 当面对复杂的自然场景解析问题时——比如自动驾驶汽车所需的城市街景理解功能——Swin Transformer同样具备明显优势。它可以在不牺牲太多效率的情况下达到甚至超越现有最优ConvNet解决方案的速度-精度平衡状态,这主要得益于其灵活可调的设计理念及其潜在的巨大改进空间[^5]。 ```python import torch from swin_transformer import SwinTransformer model = SwinTransformer(img_size=224, patch_size=4, in_chans=3, embed_dim=96, depths=[2, 2, 6, 2], num_heads=[3, 6, 12, 24], window_size=7, mlp_ratio=4., qkv_bias=True, qk_scale=None, drop_rate=0.0, attn_drop_rate=0.0, drop_path_rate=0.2, norm_layer=torch.nn.LayerNorm) input_tensor = torch.rand((1, 3, 224, 224)) output = model(input_tensor) print(output.shape) # 输出张量形状应为(batch_size, num_classes),这里假设num_classes默认设置 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值