Attention And Transformer

Transformer

本文记录自己初学Transformer的笔记,内容大部分参考这篇Blog

Overview

将Prompt输入到大模型后,大模型以Token为单位一个个输出,如下图所示:

image-20250318170854094

每一个输出的Token,都会被添加到Prompt中指导下一个输出,这样的模型也被称为Autoregressive models。与之相反,Bert不是自回归模型。

image-20250318171119453

在这个过程中,Transformer是其中的关键组件,而transformer的技术要点则是self-attention机制。

Self-Attention

Attention计算的总结:

image-20250318175529857

单个input的计算

假设进行一个翻译任务,以下是翻译的句子:

The animal didn't cross the street because it was too tired

it究竟指代什么?Self-Attention帮助神经网络理解这个问题,它将通过一系列计算建立it和其余token的关联程度。

首先,有 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 矩阵,去得到query、key、value,对于一个input的计算过程如下:

  • input被tokenizer和embedding的方法转化为embedding x 1 x_1 x1,假设其维度为512维。
  • W Q x 1 , W K x 1 , W V x 1 W^Qx_1,W^Kx_1,W^Vx_1 WQx1WKx1,WVx1得到 x 1 x_1 x1对应的 q 1 、 k 1 、 v 1 q_1、k_1、v_1 q1k1v1 q 1 q_1 q1 k 1 k_1 k1的维度应该相同,因为要用它们的内积代表注意力分数, v 1 v_1 v1的维度可以按需要而定。
  • $q_1\cdot k_1 $得到注意力分数,假设为112。
  • 然后,注意力分数除以 d k \sqrt d_k d k,这样就得到了第一个input和自己的注意力分数。效仿这个做法,将 q 1 ⋅ k 2 q_1\cdot k_2 q1k2得出第一个input和第二个input之间的注意力分数。
  • 当得出了第一个input和所有input之间的注意力分数,例如下图中,得到了 α 1 , α 2 \alpha_1,\alpha_2 α1α2,用它们将values线性组合得出第一个input经过一层self-attention的输出 z 1 = α 1 v 1 + α 2 v 2 z_1=\alpha_1v_1+\alpha_2v_2 z1=α1v1+α2v2,直观上,这种组合结合了input序列的所有信息,并且利用attention分数对信息的重要程度进行了加权
image-20250318172202333

矩阵计算

使用矩阵计算增加了计算的并行度,提高了计算效率。

所有input组成矩阵 X X X, 和 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV矩阵相乘,得到 Q 、 K 、 V Q、K、V QKV

image-20250318174504983

然后,按照以下公式得出这一层的输出 Z Z Z,下图中,Z的每一行都是对应input的输出。

image-20250318174518910

Muti-heads Attention

每个 Attention head都有自己的 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV,每个注意力头都会产生一个 Z Z Z作为输出,将每个注意力头产生的 Z Z Z按照一定方法结合起来,比如相加、连接等。

image-20250318175119658

多头的好处在于能增加表示空间,不同的 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV能分别表示不同的语义信息,关注不同的状态。

Transformer

Enocder

位置编码

以上所提到的Self-Attention机制不包含位置编码,对于这样的Attention而言token的输入顺序是无关紧要的,cat bites mousemouse bites cat对以上的Attention并无区别,例如最后的输出是矩阵 Z Z Z,cat bites mousemouse bites cat这两个输入序列的不同仅仅在于cat和mouse对应的输出行互换了,模型看来都是一样的结果。

但是对于各种text-generation、分类的任务而言,位置信息是很有必要的,所以Transformer的encoder要通过嵌入位置向量表示信息。位置信息的嵌入有很多方法,此处不赘述。

image-20250318180311568
残差连接

Encoder中的Add&Normalize是一个残差块,将 Z Z Z X X X相加,然后归一化,现在,有些模型把layerNorm放在self-Attention之前。

image-20250318182143909

Decoder

Decoder的架构和Encoder非常相似,不同之处在于Encoder-Decoder Attention(Cross-Attention),这是为了Encoder和 Decoder的交互设计的。

image-20250318182718549

而且,Decoder中的Self-Attention加入了mask,只会看见输出之前的token。Encoder最终的输出被作为K、V在 Encoder-Decoder Attention中起作用。Decoder产生的输出将继续作为整个Decoder的输入。

transformer_decoding_2

这样的解码过程由输入Begin token开始,直到 END结束。

image-20250318183931081

2294565927)]

这样的解码过程由输入Begin token开始,直到 END结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值