Transformer模型

Transformer模型

Transformer模型及其实现
历史:谷歌团队在2017年提出的经典NLP模型(目前很火的chatgpt模型就是基于此模型)。
特点:Transformer 模型使用了 Self-Attention 机制,不采用 RNN 的顺序结构,使得模型可以并行化训练,而且能够拥有全局信息
image.png
所有的大语言模型都是基于transformer结构,区别在于:

  1. mask策略不同。比如bert除了mask的字符,其他所有的相互可见;gpt则是只能看到mask前面的字符;清华的glm则是综合两者。
  2. 训练任务目标不同。比如bert是预测mask的词,而gpt目标是预测下一个会出现的词(生成式)。清华glm则是用gpt的方式来做bert的任务。

参考:
Transformer模型详解(图解最完整版)
李宏毅老师讲解的Transformer视频:here(youtube视频,2019,需梯子)
视频笔记:

Transformer—seq2seq model with "self-attention"

seq2seq model——自编码模型,包括编码器和解码器
image.png

自注意力机制

1 出现原因:

最开始处理seq2seq的RNN(如下图)很难做到并行(Parallel),比如想预测b4就得先看a1a2a3计算出b1b2b3,后来有人提出利用卷积网络来进行并行处理sequence,但是CNN每个卷积单元能处理的长度有限,当遇到较长的sequence时就不得不加深网络深度。
image.png
于是就有人提出自注意力机制self-Attention,它是一种新的layer,其输入输出跟RNN是一样的,其特别之处在于它跟双向LSTM类似,每个输出都看过整个输入的sequence,并且并行计算出b1b4,RNN能做的它都能做,可以说取代RNN了。

2 原理:

image.png

  1. 每个输入的x都先乘一个矩阵W得到a1到a4,再各自分别乘以三个矩阵得到三个向量:query(q)、key(k)和value(v),q用来对每个k做attention操作,v是被抽取出来的信息
  2. attention的输出α1,1α1,2α1,2α1,4是一个分数,表示q和对应的k有多匹配,attention操作有多种做法。下面以原paper中的Dot-Product Attention方法为例:

image.png
ps.除以根号d的原因是:直观看q*k的值会随着dim变大而变大,所以除一下用来平衡,至于为什么是根号,待考究。

  1. 做soft-max操作

image.png

  1. 最后一步,把softmax的结果跟原来对应的value(vi)相乘再累加就得到输出b1,可以看出其跟输入的a1a2a3a4都有关系,而且如果不想考虑所有sequence,只想考虑局部的sequence,只需将后面其他的项化成零即可,所以可以“attention”选择任意部分的输入来生成当前某个b字符,这就是attention机制的根本所在。并行则体现在b1到b4可以同时生成。

image.png
从矩阵运算角度看一下整个过程:
image.png
其中最后O矩阵里面就是最后的b1b2b3b4

3 其他

从上面详细生成bi过程可以发现,它对任意输入的ai都是一视同仁的,也就没有位置关系信息的加入,这显然不是我们想要的。原始paper中提出通过人工定义(不是从数据中学习的)ei在计算q、k、v之前加到ai里面来表示位置信息。
image.png

seq2seq里面的注意力机制

seq2seq模型:
image.png
输入输出都是RNN,一个编码器Encoder,一个解码器Decoder,其中编码器部分的双向RNN和解码器的RNN(蓝框部分)已经可以直接用attention层取代。

Transformer整体模型

image.png

1 Endoder层

image.png
先看左边的encoder部分,输入字符会通过Input Embedding(嵌入技术,将数据转换为向量vector,可参考:
嵌入学习embedding
转换为向量,然后跟positional encoding相加输入到灰色区块,灰色区块会重复n次(N*),其中第一个Muti-Head Attention层就是一个self-attention层,然后它的输出会经过一个add & Norm层,这一层是把Muti-Head Attention层的输入a和输出b加起来得到b'(如下图),再做layer 标准化(Normalization,参考原论文Layer Normalization
image.png
之后进入前馈层,前馈层比较简单,是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数。这一层也会加一个Add & Norm层。
image.png

2 Decoder层(右边)

image.png
Decoder block 结构,与 Encoder block 相似,所以具体流程不再赘述,但是存在一些区别:

  • 包含两个 Multi-Head Attention 层。
  • 第一个 Multi-Head Attention 层采用了 Masked 操作,简单来说通过防止某个位置的词看到他后边的信息来解决标签泄露的问题,以实现并行训练。mask机制可参考:here
  • 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。
  • 最后有一个 Softmax 层计算下一个翻译单词的概率。

以上就是整个Transformer模型。

posted @   骑猪码代码  阅读(184)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示