细嗦Transformer(二): Attention及FFN等细节部分解读和代码实现

欢迎查看我的公众号原文

细嗦Transformer(二): Attention及FFN等细节部分解读和代码实现
也欢迎关注我的公众号:
在这里插入图片描述


Q1: **Transformer为何使用多头注意力机制?**

使用Multi-Head,主要是为了:

捕捉不同的特征,每个头可以学习到输入序列不同方面的特征或模式。

**增强模型的表达能力,**多个头的并行计算可以丰富模型的表达能力,使其能够关注到输入的不同方面。

多头注意力机制计算过程中,每个头都有自己的权重矩阵,最后再将每个头的输出拼接起来,进行线性变换,从而使模型能够综合利用多个头的信息。

Attention注意力机制

对注意力机制的理解,简单来讲就是,一句话中的一个词,只与句中的部分词有关系,而不是与每个词都有关系,attention就是衡量这种关系程度的一种方式。如下图所示:

图片

Attention函数是将一个query和一组键值对(key-value)映射到输出output,这里的都是向量。Output输出是值Values的加权和。

Scaled Dot-Product Attention

论文中将注意力称为Scaled Dot-Product Attention,也就是缩放的点积注意力。这个注意力的计算方式为:公式的输入包含维度为的和,以及维度为的,然后将一个与其他全部进行点积运算,每次的计算结果除于,经过一次运算后再与进行点积运算。对每一个都需要进行同样的操作。

计算公式为: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q, K, V) = softmax(\frac {QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
熟记这个公式
Softmax计算公式为: s o f t m a x ( x ) = e x i ∑ i e x i softmax(x)=\frac{e^{x_i}}{\sum_ie^{x_i}} softmax(x)=iexiexi,将值压缩到 [ 0 , 1 ] [0,1] [0,1]之间。

Q2: 为什么要除以 ?

  1. 论文中有说,当较大时,可能会变得非常大,导致函数的梯度变得非常小,进而导致梯度消失。
  2. 计算结果是一个一维向量,每个元素表示单个token的值,当过大时,可能导致某一个元素的非常大,进而在经过计算后,部分值趋近于0,部分值趋近于1,导致模型难以学习到有效注意力。

接下来对这个过程进行图解,主要参考:The Illustrated Transformer

QKV计算方式

上文所说的和和的计算方式如下图所示。这里以输入“Thinking Machines”为例

注意:

在Embedding的时候,一个token是embbeding成维的向量,如果输入的token长度为4096,一个token embedding成,那么输入层Embedding之后的维度为维,是一个矩阵。如果batch为4,那么输入层的Embedding结果就为。还需要注意图中的"Thinking Machines"是为了简单起见,当成一个token来处理,实际上这里还有一步tokenize的过程。

如上图所示,输入向量,经过与矩阵相乘,得到,,的计算过程一样,这里的是模型通过训练学习到的矩阵参数。

有了之后,其中的计算过程如下图所示。
在这里插入图片描述

q 1 q_1 q1 k 1 , k 2 k_1,k_2 k1,k2分别进行点击运算,然后除于 ( d k ) \sqrt{(d_k)} (dk) ,这里 d k d_k dk就是 k e y key key的维度,论文中的维度为64, ( d k ) = 8 \sqrt{(d_k)}=8 (dk) =8,所以图中除的是8。除以 ( d k ) \sqrt{(d_k)} (dk) 可以使梯度更加稳定。然后再经过一个 S o f t m a x Softmax Softmax得到向量[0.88,0.12],最后于 v a l u e ( v 1 ) value(v_1) value(v1)进行点积运算,得到 q 1 q_1 q1的输出 z 1 z_1 z1

因此,Self-Attention层的公式就表示为:

Attention代码实现


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值