深度学习self-attention流程详解(qkv)

本文深入解析Transformer模型,涵盖InputEmbedding、PositionalEncoding、Multi-headAttention、Add&Norm、FeedForward等核心组件,阐述Encoder与Decoder工作原理及应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

attention-is-all-you-need流程总图

一.从InputEmbedding和PositionalEnocding说起
1.将原文的所有单词汇总统计频率,删除低频词汇(比如出现次数小于20次的统一
定义为’<UNK>’);此时总共选出了假设10000个单词,则用数字编号为0~9999,一一对应,定义该对应表为word2num;然后用xaviers方法生成随机矩阵Matrix :10000行N列(10000行是确定的,对应10000个单词,N列自定义,常用N= 512,但训练会非常耗资源,亲测128足够了),我们定义为矩阵matX
EncoderEmbedding详解
2.这样,我们针对InputEmbedding,每句话就是一个对应的矩阵,该矩阵指定长度,例如‘中国人有中国梦’,对应矩阵!(这里定义矩阵行数为10,100可以理解为结束符,不足的在后面补0)图片描述
3.PositionEncoding
这里的PositionEncoding主要是为了保留句子的位置信息。其矩阵shape和Inputembedding一样。对于矩阵matPosition的每一行,第0,2,4,6,...等偶数列上的值用sin()函数激 活,第1,3,5,。。。等奇数列的值用cos()函数激活,将此矩阵定义为mapX。
图片描述
4.这里,将两个矩阵相加,得到matEnc=matP+matX。然后matEnc进入模型编码部分的循环,即Figure1中左边红色框内部分,每个循环单元又分为4个小部分:multi-head attention, add&norm, feedForward, add&norm;
二.Encoder
图片描述

1.Multi-head attention
(1)由三个输入,分别为V,K,Q,此处V=K=Q=matEnc(后面会经过变化变的不一样)
(2)首先分别对V,K,Q三者分别进行线性变换,即将三者分别输入到三个单层神经网络层,激活函数选择relu,输出新的V,K,Q(三者shape都和原来shape相同,即经过线性变换时输出维度和输入维度相同);
(3)然后将Q在最后一维上进行切分为num_heads(假设为8,必须可以被matENC整除)段,然后对切分完的矩阵在axis=0维上进行concat链接起来;对V和K都进行和Q一样的操作;操作后的矩阵记为Q_,K_,V_;如图图片描述
(4)之后将Q_,K_.T进行想乘和Scale,得到的output为[8.10,10],执行output = softmax(output),然后将更新后的output想乘V_,得到再次更新后的output矩阵[8,10,64],然后将得到的output在0维上切分为8段,在2维上合并为[10,512]原始shape样式。
2.add&norm
add实际上是为了避免梯度消失,也就是曾经的残差网络解决办法:output=output+Q;
norm是标准化矫正一次,在output对最后一维计算均值和方差,用output减去均值除以方差+spsilon得值更新为output,然后变量gamma*output+变量beta

3.feed forward
(1)对output进行两次卷积,第一次卷积荷11,数目为词对应向量的维度。第二次卷积也是11,数目为N。
(2)两次卷积后得到的output和matEnc 的shape相同,更新matEnc = output,进行上述循环,循环自定义次数,进入解码部分。
三.decoder
1.InputEmbedding和Positionembedding相同。
2.进入解码循环,这里的Masked multi-head attention: 和编码部分的multi-head attention类似,但是多了一 次masked,因为在解码部分,解码的时候时从左到右依次解码的,当解出第一个字的时候,第一个字只能与第一个字计算相关性,当解出第二个字的时候,只能计算出第二个字与第一个字和第二个字的相关性,。。。;所以需要linalg.LinearOperatorLowerTriangular进行一次mask。
图片描述
3.在解码中,add&norm,Feed forward和编码相同,其中multi-head attention:同编码部分,但是Q和K,V不再相同,Q=outputs,K=V=matEnc。
4.多次更新
5.Linear: 将最新的outputs,输入到单层神经网络中,输出层维度为“译文”有效单词总数;更新outputs

备注:借鉴出处https://zhuanlan.zhihu.com/p/...

<think>好的,我现在需要详细解释Self-Attention和Multi-Head Attention的工作原理,并配上图解。首先,我应该从基本概念入手,明确两者的定义和区别。根据用户提供的引用资料,Self-Attention是自注意力机制,而Multi-Head Attention则是多个Self-Attention的组合。接下来,我需要分步骤解析Self-Attention的计算过程,比如如何生成Q、K、V矩阵,以及缩放点积注意力。然后,再扩展到Multi-Head的结构,说明每个头的作用和最终的拼接过程。 需要注意的是,用户提到了图解,所以可能需要在文字描述中插入LaTeX公式,并确保独立公式用$$...$$格式。同时,要引用提供的参考文献中的要点,例如参数少、并行计算能力、处理长距离依赖等优点。此外,还要注意Multi-Head中不同线性变换的作用,以及如何整合多个头的输出。 可能还需要比较Self-Attention与传统RNN、CNN的区别,强调其优势,如并行处理、减少远距离信息衰减等。最后,生成相关问题时要涵盖原理、应用、优化等方面,确保问题具有针对性和深度。需要检查所有LaTeX语法是否正确,避免格式错误。整个过程要保持结构清晰,逐步引导用户理解,并正确标注引用来源。</think>### Self-Attention与Multi-Head Attention工作原理及图解 #### 一、Self-Attention(自注意力机制) **1. 核心思想** Self-Attention通过计算输入序列中每个元素与其他元素的关系权重,动态分配注意力,从而捕捉全局依赖关系[^3][^4]。其灵感来源于人类视觉系统的注意力机制,能够聚焦于关键信息并抑制无关部分[^1]。 **2. 计算步骤** 假设输入序列为矩阵$X \in \mathbb{R}^{n \times d}$($n$为序列长度,$d$为特征维度): 1. **生成Q、K、V矩阵**: 通过线性变换得到查询(Query)、键(Key)、值(Value)矩阵: $$ Q = X W^Q, \quad K = X W^K, \quad V = X W^V $$ 其中,$W^Q, W^K, W^V \in \mathbb{R}^{d \times d_k}$为可学习参数。 2. **计算注意力分数**: 使用点积计算相似度,并进行缩放(避免梯度消失): $$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V $$ 这里,$\sqrt{d_k}$用于调节点积结果的尺度[^2]。 3. **输出加权值**: 通过softmax归一化后的权重矩阵与$V$相乘,得到输出矩阵$Z$,其形状与输入$X$一致。 **图解** ``` 输入序列 X → Q, K, V → QK^T → 缩放 → softmax → 权重矩阵 → 与V相乘 → 输出Z ``` **3. 优点** - **并行计算**:无需依赖时序,计算效率高[^4] - **长距离依赖**:直接建模任意两位置关系,减少信息衰减 - **参数少**:复杂度为$O(n^2 d)$,优于RNN的$O(n d^2)$[^4] --- #### 二、Multi-Head Attention(多头注意力) **1. 核心思想** 将Self-Attention扩展到多个“头”,每个头独立学习不同子空间的注意力模式,最后拼接结果以增强表达能力[^5]。 **2. 计算步骤** 1. **多头拆分**: 对$Q, K, V$分别进行$h$次线性变换($h$为头数),生成多组$Q_i, K_i, V_i$($i=1,...,h$)。 2. **独立计算注意力**: 每组头独立计算Self-Attention: $$ \text{head}_i = \text{Attention}(Q_i, K_i, V_i) $$ 3. **拼接与融合**: 拼接所有头的输出,并通过线性层整合: $$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h) W^O $$ 其中,$W^O \in \mathbb{R}^{h d_v \times d}$为输出权重矩阵。 **图解** ``` 输入X → 线性变换为h组Q,K,V → 并行计算h个Self-Attention → 拼接结果 → 线性融合 → 输出 ``` **3. 优点** - **多视角建模**:不同头关注不同特征(如局部/全局、语法/语义)[^5] - **鲁棒性增强**:避免单一注意力模式导致的偏差 --- #### 三、关键对比 | 特性 | Self-Attention | Multi-Head Attention | |---------------------|-----------------------------|----------------------------| | **参数复杂度** | $O(d^2)$ | $O(h d^2)$ | | **表达能力** | 单一注意力模式 | 多子空间联合建模 | | **典型应用** | Transformer编码器单头部分 | Transformer完整注意力层 | --- ### 相关问题 1. **Self-Attention中为什么要使用缩放因子$\sqrt{d_k}$?**[^2] 2. **Multi-Head Attention如何平衡计算效率与模型性能?** 3. **Self-Attention在长文本任务中可能遇到什么问题?**[^3] 4. **Transformer中如何结合Self-Attention与位置编码?** 5. **Multi-Head Attention的头数选择对模型有何影响?** --- **引用标识说明** : 浅谈AttentionSelf-Attention的前世今生 : Multi-Head self-Attention 机制详解 : 一文搞定自注意力机制(Self-Attention) : Self-attention的优点分析 [^5]: Multi-Head self-Attention结构细节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值