Transformer编码器结构及运算过程的符号表示

Transformer编码器结构及运算过程的符号表示

这篇文章主要是展示Transformer编码器的结构,同时尽量使用数学符号表达编码器的运算过程。

Transformer编码器的核心结构是多头注意力机制,本文从(单头)注意力机制开始描述,然后扩展到对编码器运算过程的描述。暂不涉及解码器的描述。

注意:此处介绍的注意力机制均为注意力机制。

一、(单头)自注意力机制

输入

X=[x1,x2,...,xm]X=[x_1, x_2, ..., x_m]X=[x1,x2,...,xm]mmm表示输入的token的数量(句子的长度)(在Transformer中是一个超参数,一般设置成128、256)。

xi∈Rd×1x_i \in \mathbb{R}^{d\times 1}xiRd×1ddd表示embedding向量的维度(在Transformer中是一个超参数,一般设置成64、128、256),i=1,...,mi=1,...,mi=1,...,m

X∈Rd×mX \in \mathbb{R}^{d \times m}XRd×m

查询(query)、键(key)、价值(value)

qi=WQxiq_i = \textcolor{red}{W_Q} x_iqi=WQxiWQ∈Rd×d\textcolor{red}{W_Q} \in \mathbb{R}^{d \times d}WQRd×dqi∈Rd×1q_i \in \mathbb{R}^{d \times 1}qiRd×1

Q=[q1,q2,...,qm]Q = [q_1, q_2, ..., q_m]Q=[q1,q2,...,qm]Q∈Rd×mQ \in \mathbb{R}^{d \times m}QRd×m

ki=WKxik_i = \textcolor{red}{W_K} x_iki=WKxiWK∈Rd×d\textcolor{red}{W_K} \in \mathbb{R}^{d \times d}WKRd×dki∈Rd×1k_i \in \mathbb{R}^{d \times 1}kiRd×1

K=[k1,k2,...,km]K = [k_1, k_2, ..., k_m]K=[k1,k2,...,km]K∈Rd×mK \in \mathbb{R}^{d \times m}KRd×m

vi=WVxiv_i = \textcolor{red}{W_V} x_ivi=WVxiWV∈Rd×d\textcolor{red}{W_V} \in \mathbb{R}^{d \times d}WVRd×dvi∈Rd×1v_i \in \mathbb{R}^{d \times 1}viRd×1

V=[v1,v2,...,vm]V = [v_1, v_2, ..., v_m]V=[v1,v2,...,vm]V∈Rd×mV \in \mathbb{R}^{d \times m}VRd×m

注意力(attention)

ai=σ(KTqiα)a_i = \sigma \left(\frac{K^{\mathrm{T}}q_i}{\alpha} \right)ai=σ(αKTqi)α\alphaα是标量,表示放缩因子。ai∈Rm×1a_i \in \mathbb{R}^{m \times 1}aiRm×1σ(⋅)\sigma(\cdot)σ()表示softmax函数。
在这里插入图片描述

A=[a1,a2,...,am]A = [a_1, a_2, ..., a_m]A=[a1,a2,...,am]A∈Rm×mA \in \mathbb{R}^{m \times m}ARm×m
在这里插入图片描述

上下文/输出

ci=Vai=a1iv1+a2iv2+...+amivm=V⋅σ(KTqiα)c_i = \textcolor{blue}{V} a_i = a_{1i}v_1 + a_{2i}v_2 + ... + a_{mi}v_m = \textcolor{blue}{V} \cdot \sigma \left( \frac{K^{\mathrm{T}}q_i}{\alpha} \right)ci=Vai=a1iv1+a2iv2+...+amivm=Vσ(αKTqi)ci∈Rd×1c_i \in \mathbb{R}^{d \times 1}ciRd×1
在这里插入图片描述

C=[c1,c2,...,cm]C = [c_1, c_2, ..., c_m]C=[c1,c2,...,cm]C∈Rd×mC \in \mathbb{R}^{d \times m}CRd×m

总结

C=Attn(X,X)C = \text{Attn}(X,X)C=Attn(X,X)Attn(⋅)\text{Attn}(\cdot)Attn()表示自注意力模块,包含了前述计算query、key、value、注意力、上下文的过程。

自注意力模块只包含三个参数矩阵:WQW_QWQWKW_KWKWVW_VWV
在这里插入图片描述

二、多头自注意力机制

与单头自注意力机制相比,多头(multi-head)自注意力机制会按照“头(head)”的数量对输入进行划分。假设有hhh个head,那么xi=[xi[1],xi[2],...,xi[h]]x_i = \left[ x_i^{[1]}, x_i^{[2]}, ..., x_i^{[h]} \right]xi=[xi[1],xi[2],...,xi[h]]xi[j]∈Rdh×1x_i^{[j]} \in \mathbb{R}^{\frac{d}{h} \times 1}xi[j]Rhd×1j=1,...,hj=1,...,hj=1,...,h

每个head的自注意力处理一个xi[j]x_i^{[j]}xi[j],处理流程与单头自注意力机制相同,得到的输出是ci[j]∈Rdh×1c_i^{[j]} \in \mathbb{R}^{\frac{d}{h} \times 1}ci[j]Rhd×1。将每个head的输出进行拼接,才得到与输入xix_ixi对应的cic_ici

多头自注意力模块包含3h3h3h个参数矩阵。
在这里插入图片描述

三、Transformer编码器结构

如下图所示,Transformer编码器主要由一层多头自注意力和一层前馈网络组成。

多头自注意力

多头自注意力的过程如前文所述。此处有3h3h3h个参数矩阵:WQ[1],...,WQ[h],WK[1],...,WK[h],WV[1],...,WV[h]W_Q^{[1]},...,W_Q^{[h]}, W_K^{[1]},...,W_K^{[h]}, W_V^{[1]},...,W_V^{[h]}WQ[1],...,WQ[h],WK[1],...,WK[h],WV[1],...,WV[h]

前馈网络

前馈网络一般使用一层线性层实现,不改变输入的维度:X′=WuXX^{\prime} = \textcolor{red}{W_u} XX=WuXX←C+XX \leftarrow C + XXC+XX′∈Rd×mX^{\prime} \in \mathbb{R}^{d \times m}XRd×m

此处有1个参数矩阵Wu∈Rd×dW_u \in \mathbb{R}^{d \times d}WuRd×d

在这里插入图片描述

四、token编码(词表映射)与位置编码

输入XXX在进入Transformer编码块之前还要经过token编码和位置编码。在经过token编码和位置编码之前,输入还只是一个个token(每个token都是一个整数,表示在词表中的索引)。

token编码

token编码就是将token转换成embedding,也即让输入经过一个embedding映射层EEE。这个embedding映射层既可以是现成的,也可以是跟随模型一起训练得到的。

embedding映射层并不是一个线性层,更像是一个词表。假设模型能处理vocab_size\text{vocab\_size}vocab_size个词,每个词的embedding向量长度是ddd,那么embedding映射层的这个词表大小就是vocab_size×d\text{vocab\_size} \times dvocab_size×d

token转换成embedding的过程:xi←E[xi,:]x_i \leftarrow E[x_i, :]xiE[xi,:]

位置编码

最初的Transformer模型使用正弦和余弦函数来生成固定的位置编码,这些编码与模型的其他参数是分开的,不是通过学习得到的。
PE(pos,2i)=sin(pos/100002i/d)PE(pos,2i+1)=cos(pos/100002i/d) PE_{(pos,2i)}=sin(pos/10000^{2i/d})\\PE_{(pos,2i+1)}=cos(pos/10000^{2i/d}) PE(pos,2i)=sin(pos/100002i/d)PE(pos,2i+1)=cos(pos/100002i/d)
其中,pospospos表示token的序号,iii表示embedding的维度。

### Transformer 编码器架构图 在探讨 Transformer编码器部分时,其核心组件包括多头自注意力机制(Multi-Head Self-Attention)、前馈神经网络(Feed Forward Neural Networks),以及残差连接(Residual Connections)和层归一化(Layer Normalization)。这些组成部分共同作用以处理输入序列并提取特征。 #### 多头自注意力机制 此模块允许模型关注不同位置的信息,从而捕捉到更复杂的模式。通过多个平行的注意头来实现这一点,每个注意头可以专注于不同的子空间特性[^1]。 ```python import torch.nn as nn class MultiHeadAttention(nn.Module): def __init__(self, d_model, num_heads): super(MultiHeadAttention, self).__init__() assert d_model % num_heads == 0 self.d_k = d_model // num_heads self.num_heads = num_heads self.linears = clones(nn.Linear(d_model, d_model), 4) def forward(self, query, key, value, mask=None): ... ``` #### 前馈神经网络 紧接着是全连接的前馈网络,它由两个线性变换组成,中间夹着一个ReLU激活函数。这一过程对于引入非线性至关重要,有助于增强表达能力[^2]。 ```python def feed_forward(size, d_ff): return nn.Sequential( Linear(size, d_ff), nn.ReLU(), Linear(d_ff, size) ) ``` #### 残差连接与层归一化 为了缓解深层网络中的梯度消失问题,在上述各子层之后应用了跳跃连接(Skip Connection),随后进行了标准化操作。这不仅促进了训练稳定性还提升了性能表现[^3]。 ![Transformer Encoder Architecture](https://miro.medium.com/max/700/1*mk16jJZz9fUOwK8cLlQYXg.png)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值