目录
1. 生成查询(Query)、键(Key)和值(Value)向量
RNN的原理以及弊端
S表示隐藏层的值
U表示输入层到隐藏层的权重矩阵
X表示输入向量
W表示隐藏层上一次的值作为这一次的输入的权重矩阵
St-1表示上一时刻隐藏层的值
V表示隐藏层到输出层的权重矩阵
O表示输出向量
传统RNN模型的弊端:
- 长期依赖问题:RNN通过递归的方式将前一个时间步的输出传递给下一个时间步,因此当序列较长时,RNN难以捕捉到长期依赖关系,模型在训练时容易忽视较远时间步的信息,导致模型性能不佳。
- 计算效率低下:由于递归结构,每个时间步的计算必须在前一个时间步计算完成后才能进行,这种串行的处理方式严重限制了计算效率。
后续RNN地改良版本:长短期记忆网络LSTM 也无法解决RNN无法并行计算的问题。
Transformer
先大致了解一下:
- Transformer 是一种用于处理序列数据的深度学习模型,首次在自然语言处理(NLP)任务中取得显著成功。
- 与传统的循环神经网络(RNN)不同,Transformer 基于自注意力机制(Self-Attention)来处理输入数据中的不同部分之间的关系,能够并行处理整个序列,从而大大提高了计算效率。
- Transformer 的核心组件包括编码器(Encoder)和解码器(Decoder),每个组件都由多个相同的层叠加而成。自注意力机制使得模型能够根据上下文动态地为序列中的每个词分配不同的权重,捕捉长程依赖关系。
- Transformer 的结构为许多现代的NLP模型,如BERT、GPT等奠定了基础。
Transformer的结构
推理工作流程:
- 编码器接收完整的源序列(包含位置编码和填充掩码),生成源序列的上下文表示。
- 解码器首先接收特殊起始符号
<start>
,然后在每一步动态加入之前生成的词元,同时利用编码器提供的源序列信息,逐步生成目标序列中的每个词元,直到遇到结束符<end>
或达到最大长度。
使用位置编码表示序列的顺序
位置编码的作用:用于将输入序列中各个位置的信息显式地编码进模型中,从而保留序列数据的顺序。
计算方法:
这个编码方式的独特之处在于:不同位置的编码具有唯一的模式,而相邻位置之间的编码值具有连续性。这样使得模型可以“感觉到”不同词的位置以及它们之间的相对距离。
最终将词嵌入与位置编码相加以表示输入元素:
自注意力机制
作用:用于计算一个序列中每个元素对于其他元素的重要性的机制,在序列的不同位置上自适应地分配“注意力”权重,使模型能够灵活地捕捉序列中各元素之间的相互关系。
工作流程:
- 生成查询(Query)、键(Key)和值(Value)向量
- 计算注意力权重
- 输出加权和
输出加权和(自注意力的输出向量)可以理解为该元素在当前上下文中的“综合信息”或“加权上下文表示”。
1. 生成查询(Query)、键(Key)和值(Value)向量
查询(Query)、键(Key)和值(Value)向量源自信息检索领域的“查询-键-值”思想。
- 查询向量 Q:用于表示当前元素的需求,即“当前元素希望从其他元素中获取哪些信息”。
- 键向量 K:用于描述每个元素的特征,用于与查询向量进行相似度匹配,进而生成注意力权重。
- 值向量 V:表示元素的实际信息内容,在加权求和时起决定作用。最终的注意力表示是不同元素信息的加权和。
生成查询、键和值向量的具体过程:
1. 输入序列长度为n,每个元素的嵌入向量维度为d,输入序列可以表示为矩阵X∈R^(n×d)
2. 定义线性映射矩阵:三个独立的线性映射矩阵,用于生成查询、键和值向量:
3. 生成查询、键和值向量矩阵:
2. 计算注意力权重
注意力分数:查询向量和键向量的点积反映了每个元素与其他元素的相关性
避免向量点积过大导致梯度消失或爆炸问题:通常会用向量维度dk 的平方根对结果进行缩放
转换为概率分布:通过Softmax将注意力分数转换为概率分布,从而得到一个元素对应的其他所有元素的重要性权重
3. 加权求和值
最后,将注意力权重应用到值向量上,计算加权和作为最终的自注意力表示:
对于整个序列而言,自注意力的计算公式可表示为:
整个流程:(Thingking、Machines为两个元素)
图片参考 优快云@告白气球~ 的文章
Add&Normalize
Add&Normalize在Transformer的中的位置:编码或解码层包括若干个子层,每个子层都由两个主要部分组成:多头自注意力机制或前馈神经网络,以及紧随其后的"Add & Normalize"操作。
残差连接(Add)
残差连接:一种跳跃连接,将子层的输入直接与子层的输出相加,形成一种“旁路”,从而允许信息更顺畅地流过深层模型。
优势:可以保留输入的信息流,帮助模型更好地传递浅层特征,从而有助于模型的梯度稳定,并加速训练。
层归一化(Normalize)
层归一化:使得每个神经元的输出都标准化至相同的均值和方差。
优势:让模型更稳定,有助于减小不同特征值的分布差异带来的训练困难。
全连接层Feed Forward
全连接层的组成:两个全连接层(也称为线性层)组成,中间夹着一个非线性激活函数ReLU。
原理:两层网络就是为了将输入的Z映射到更加高维的空间中然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度。
作用:对每个词元位置的特征进一步提取并增强。
Decoder整体结构
解码器块(Decoder Blocker)与编码器块(Encoder Block)相比:
- 相同点:都是由6个编码器(解码器)所组成。
- 不同点:解码器块包含两个 Multi-Head Attention 层,一个采用了 Masked 操作,另外一个的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。
解码器的两个注意力层:
1.带掩码的多头注意力机制:该自注意力层只允许关注已输出位置的信息。避免了在训练或推理过程中出现“作弊”的情况,即预测时提前看到未生成的未来词元,提升训练效果。
-
结构位置:解码器的第一层注意力机制
-
实现方式:在自注意力层的softmax之前进行mask,将未输出位置的权重设置为一个非常大的负数(进一步softmax之后基本变为0,相当于直接屏蔽了未输出位置的信息)。
2. 不带掩码的多头注意力机制:在解码过程中将解码器的当前状态与编码器的输出进行关联,使解码器能够充分利用源序列的信息,为生成的目标序列提供语义支持和上下文信息。
-
结构位置:解码器的第二层注意力机制,与编码器相连
-
实现方式:
-
与Encoder中的Q、K、V全部来自于上一层单元的输出不同。
-
Decoder是要通过当前状态Q与Encoder的输出K算出权重后(计算query与各个key的相似度),最后与Encoder的V加权得到下一层的状态。(Encoder的输出V结合源序列(编码器输出的隐藏状态)的各位置的注意力权重)
-
输出
步骤:
- 线性层:线性变换(线性变换层是一个简单的全连接神经网络,把解码组件产生的向量投射到一个词汇表大小维度的向量里)
- Softmax层:得到词汇表中每个词元的分数后,Softmax输出概率分布
- 最终输出:通过词典,输出概率最大的对应的单词作为我们的预测输出
如果您觉得对您有帮助,请留下宝贵的赞赞吧🥺,我真的很需要。