transformer原理总结

简介: transformer原理总结

Transformer是一个 Sequence to Sequence model,应用了 self-attention它兼具RNN和卷积网络的优点:并行化和关注全局信息

结构图如下:

01b6d1934d6d47aea00e2ff8c8967472.png左侧框是Encoder结构,右侧框是Decoder,上侧是分类网络结构。

1 Encoder

单个Encoder单元流程如下:

  1. 1. 我们可以看到输入.shape=(B, L, D),其中B是batch_size, L是sequence length,D是dim_in。
  2. 2. 之后进入Multi-Head Attention(多头注意力模型)中,输出的维度仍然是(B, L, D)
  3. 3. 再将结果与原输入进行相加(借鉴残差结构),用于防止网络退化,输出维度是(B, L, D)
  4. 4. 再通过Layer normalization,用于对每一层的激活值进行归一化,输出维度是(B, L, D)
  5. 5. 接着进入前馈神经网络Feed Forword Network,并进行Add和Layer Normalization

其中有几个步骤进行详细的总结一下,包括:

  1. 1. Layer Normalization
  2. 2. Feed Forword Network

1.1 Layer Normalization

我们比较熟悉的是批量归一化(Batch Normalization),那么其与Layer Normalization的区别是什么呢?为什么我们这里用Layer…而不用Batch…呢?

Batch Normalization作用与一个batch中的某一个channel,而Layer Normalization作用于batch中的一条样本。


d6c419aac3034cebbe0e889b658c4200.png

比如我们有一个维度为(batch_size, c, wxh)的输入:

[
  [  # batch_size=0
        [x11, x12, x13, x14],
      [x21, x22, x23, x24],
      [x31, x32, x33, x34],
    ],
    [  # batch_size=1
        [y11, y12, y13, y14],
      [y21, y22, y23, y24],
      [y31, y32, y33, y34],  
    ]
].shape = (2, 3, 4)

如果我们进行Batch Normalization,我们将把x11-x31,y11-y31放在一起进行归一化,而Layer Normalization会把X11-X34即batch_size=0的整个矩阵进行归一化。其中

1.2 Feed Forword Network

Feed Forword Network是一个两层的全连接层,第一层以ReLU作为激活函数,第二层不适用激活函数,其计算公式如下:

ba978ce36255463498d2f5ab726cac5b.png

其中X是Feed Forword Network的输入,最终的输出与输入X一致。

1.3 xN

上面介绍了一个Encoder单元的工作,其实整个Encoder是多个这种单元嵌套组成的,计算公式如下图

1cd10badd9f04c00bbe7dcb775461f47.png

2 Decoder

输出:位置i的输出词的概率分布

输入:Encoder的输出和第i-1位置Decoder的输出。

编码可以并行计算,一次性全部Encoding出来。但解码不是一次把所有序列解出来的,而是像 一样一个一个解出来的,因为要用上一个位置的输入当作attention的query 。

还是从下往上了解Decoder的结构:

  1. 1. 第i-1个Decoder的输出输入Mask Multi-Head Attention
  2. 2. 将第一步中的输出输入到第二个Multi-Head Attention生成矩阵Q,将Encoder的输出输入到第二个Multi-Head Attention生成矩阵K个V,这样每一个单词都可以利用到Encoder的所有单词信息
  3. 3. 将结果输入到Feed Forward Network网络中,这与Encoder一致

2.1 Masked Multi-Head Attention

相比Multi-Head Attention,这里主要是在Scale之后,Softmax之前进行了一次Mask操作。

8f49cacd533e4a00a743e2e3a480793e.png

主要的作用是使attention只会attend on已经产生的sequence

那么为什么使用mask操作呢?

Decoder 可以在训练的过程中使用Teacher Forcing并且并行化训练,即将正确的单词序列 ( I have a cat) 和对应输出 (I have a cat ) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住。

具体如何做的呢,举例子进行说明?

假设我们有一个输入矩阵X=“ I have a cat”,映射为(0, 1, 2, 3, 4),通过Embedding后维度为(5, N)

按照self-attention的操作生成矩阵A(未进行softmax),维度为(5, 5),如下图所示

b300a5d1a545450693ea4f2e3c2c4bd0.png

我们假设有一个Mask矩阵,其大小为(5, 5),如下图所示。

c4280e6f947f4248953af864fb202e29.png

我们将生成的A矩阵按位与Mask相乘,得到遮掩后的矩阵A’。其中单词0只能使用单词0,单词1只能使用单词0和单词1…

36b875bf988f42e282b2effdfc0b181f.png

将生成的 Mask QK^T与矩阵V相乘,得到只与前i-1个单词相关的矩阵信息

045c56fdb23541ca8063b75cd0a908e2.png

  1. 接下来的操作与Multi-Head Attention一致

3 Softmax输出预测

通过Feed Forward Network的结果通过一个全连接层得到结果如下:

ff811868d55e4f70ba4cb3923ce35d9f.png

我们进行softmax预测下一个单词

26f91686bc0b433fa3dd530f6a352a5c.png

至此,transformer的网络总结结束,还需要对代码进行总结。

4 参考文章

https://blog.csdn.net/qq_37541097/article/details/117691873?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168241225816800182716096%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168241225816800182716096&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-3-117691873-null-null.blog_rank_default&utm_term=transformer&spm=1018.2226.3001.4450

https://zhuanlan.zhihu.com/p/340149804


相关文章
|
Android开发 Kotlin JavaScript
Compose 为什么可以跨平台?
Compose 为什么可以跨平台?
1021 0
Compose 为什么可以跨平台?
|
1月前
|
人工智能 弹性计算 机器人
飞书接入OpenClaw(Clawdbot)图文教程,基于飞书的AI员工
本教程详解如何在阿里云轻量应用服务器上一键部署Moltbot(即OpenClaw/Clawdbot),仅需3步:选Moltbot镜像创建服务器、开通百炼平台获取API-Key、放行18789端口并配置Key。成本低至38元/年,支持飞书、钉钉等多平台快速接入,附图文指引,新手友好。
2485 8
|
5月前
|
并行计算 PyTorch 算法框架/工具
vLLM 架构学习指南
本指南深入解析vLLM高性能推理引擎架构,涵盖核心创新PagedAttention与连续批处理技术,结合代码结构、学习路径与实践建议,系统指导用户从入门到贡献源码的全过程。
2607 3
vLLM 架构学习指南
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
635 9
|
9月前
|
安全 API Android开发
Android开发问题排查:CLEARTEXT communication错误的处理和避免
综上,我们可以说要避免CLEARTEXT通信错误的最佳办法是使用HTTPS,但在实践中遇到某些无法支持HTTPS的API,我们也可以通过配置Network security configuration文件来跳过系统的安全检查。安全和实用性需两者都顾及,明智地选择你的道路,战胜那些阻挡你的小怪兽吧!"
365 14
|
PyTorch 算法框架/工具
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
2835 0
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
|
编解码 JSON 物联网
腾讯开源HunyuanVideo-I2V图生视频模型+LoRA训练脚本,社区部署、推理实战教程来啦!
继阿里的通义万相wan2.1模型之后,腾讯混元又出大招,重磅发布HunyuanVideo-I2V图生视频模型。
1610 9
|
机器学习/深度学习 数据库 索引
Transformer 学习笔记 | Encoder
本文记录了学习Transformer模型过程中对Encoder部分的理解,包括多头自注意力机制(Multi-Head Self-Attention)和前馈网络(Feed-Forward Network)的工作原理。每个Encoder Layer包含残差连接(Residual Connection)和层归一化(Layer Normalization),以缓解梯度消失问题并稳定训练过程。文中详细解释了Q、K、V的含义及缩放点积注意力机制(Scaled Dot-Product Attention),并通过图解展示了各组件的工作流程。欢迎指正。
|
机器学习/深度学习 人工智能 API
上新!支持100万Tokens上下文的Qwen2.5-1M 开源模型来了
上新!支持100万Tokens上下文的Qwen2.5-1M 开源模型来了
|
机器学习/深度学习 人工智能
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)

热门文章

最新文章