a survey of transformer 学习笔记

1、引言

一些 X-formers 从以下几个方面提升了vanilla Transformer 的性能:模型的效率、模型泛化、模型适应性

2、背景

2.1 vanilla Transformer

The vanilla Transformer 是一种sequence-to-sequence 的模型。由 一个encoder和 一个decoder组成, (encoder和decoder都是由L个相同的块堆叠而成)。

encoder块是由多头自注意力模块和 position-wise FFN组成。为了构建更深层次的网络,层归一化后使用残差网络。

decoder块在多头自注意力模块和 position-wise FFN中加了一个交叉注意力模块。

2.1.1注意力模块


the scaled dot-product attention used by Transformer is given by

(式1)

 Query-Key-Value (QKV)

 Q ∈R^{N\times Dk}; K ∈ R^{M\times Dk};V ∈ R^{M\times Dv}

 N,M :queries and keys (or values)长度; Dkand Dv:  keys (or queries) and values的维度;

 A:注意力矩阵

式中的\sqrt{Dk}是为了减轻softmax函数的梯度消失问题 


multi-head attention

式2将queries, keys and values由Dm维投射到DkDkDv维;式3又将其还原为Dm


 分类:

   依据q、k、v的来源分为三种:

  • Self-attention :式1 Q = K = V = X 
  • Masked Self-attention:parallel training:
  • Cross-attention:The queries are projected from the outputs of the previous (decoder) layer, whereas the keys and values are projected using the outputs of the encoder


2.1.2 Position-wise FFN.

实质是全连接前馈模块

 H′ is the outputs of previous layer


2.1.3 Residual Connection and Normalization.

每个模块都加了一个残差网络

### Transformer 架构综述 #### 2.1 Transformer架构的核心组成 Transformer是一种基于自注意力机制的模型,摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),从而能够并行处理数据[^1]。该架构由编码器(encoder)和解码器(decoder)两部分构成。 - **编码器**:负责接收输入序列,并通过多层堆叠的方式提取特征。每一层都包含了两个子层——一个多头自注意力机制(multi-head self-attention mechanism) 和一个前馈神经网络(feed-forward neural network)。 - **解码器**:用于生成目标序列,在每一步都会考虑之前位置的信息以及来自编码器端的内容表示。同样地,它也是由多个相同的层组成的,其中除了上述提到的两种子层外还增加了一个额外的“encoder-decoder attention”层来关注源侧信息。 #### 应用场景 ##### 自然语言处理(NLP) 在自然语言处理方面,Transformers已经被证明非常有效,尤其是在机器翻译、文本摘要等任务上取得了显著成果。这些进步得益于其强大的建模能力可以捕捉到远距离依赖关系而无需像LSTM那样逐词顺序扫描整个句子。 ##### 计算机视觉(CV) 对于计算机视觉领域而言,尽管最初设计是为了应对NLP问题,但现在也被广泛应用于图像分类、物体检测等领域。例如,Dosovitskiy等人研究发现当把图片分割成patch后再送入transformer进行训练时可以获得很好的效果[^2]。 ##### 音频处理 此外,在语音识别和其他涉及时间序列数据分析的任务中也有着不错的表现。这是因为音频信号本质上也是一种连续的时间序列数据形式,所以采用类似的策略即能取得良好成效。 ##### 跨模态学习 最后值得一提的是跨模态学习的应用案例,比如BART(Bidirectional and AutoRegressive Transformers)就是一个典型的例子,它可以实现双向编码的同时具备一定的预测功能,适用于多种下游任务如问答系统构建等[^3]。 ```python import torch.nn as nn class Transformer(nn.Module): def __init__(self, d_model=512, nhead=8, num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=2048, dropout=0.1): super().__init__() # 定义编码器和解码器 encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout) decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout) self.transformer = nn.Transformer(d_model=d_model, nhead=nhead, num_encoder_layers=num_encoder_layers, num_decoder_layers=num_decoder_layers).cuda() def forward(self, src, tgt): output = self.transformer(src.cuda(), tgt.cuda()) return output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值