Encoder-Decoder -> Attention -> Transformer 逐步理解
本文内容是由个人见解和网上资料整理而来,仅为本人的学习过程,侵删
文章目录
-
- 一、Encoder-Decoder 编码-解码框架
- 二、 Attention 注意力机制
- 三、 Transformer

一、Encoder-Decoder 编码-解码框架
1.1 简介
Encoder-Decoder是一个模型框架,可以用不同的模型来实现,目前较多的应该就是seq2seq和transformer。其广泛应用于自然语言处理、图像处理、语音识别等领域
1.2 编码器
编码器的作用是接收输入序列(文字、图片、音频等),并将其转换成固定长度的上下文向量(context vector)。这个向量是输入序列的一种内部表示,捕获了输入信息的关键特征。在自然语言处理的应用中,输入序列通常是一系列词语或字符。
编码器可以根据不同类型的问题选择不同的深度学习模型,比如在处理序列数据方面,可以使用RNN、LSTM、GRU等

1.3 解码器
解码器的目标是将编码器产生的上下文向量转换为输出序列(文字、图片、音频等)。在开始解码过程时,它首先接收到编码器生成的上下文向量,然后基于这个向量生成输出序列的第一个元素。接下来,它将自己之前的输出作为下一步的输入,逐步生成整个输出序列。
解码器也可以是各种类型的深度学习模型,但通常与编码器使用相同类型的模型以保持一致性。

1.4 整体架构
简单架构如下

具体架构如下

特点:
- 无论输入输出的长度为多少,中间の共享向量C的长度都是固定的(缺点)
- 解码-编码类似于压缩-解压,中间会产生信息丢失(后续引入Attention)
- 本身是一个end-to-end(端到端)的学习算法
信息丢失:编码器要将整个序列的信息压缩进一个固定长度的向量中去
- 语义向量无法完全表示整个序列的信息。
- 先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了,输入序列越长,这个现象就越严重。
1.5 应用
自然语言处理领域NLP
- 机器翻译
- 文本摘要
- 聊天与问答系统
图像处理领域CV
- 图像去噪(以AE为例)
- 编码器:接收含噪声的图像,通过逐层压缩数据,学习到一个潜在的、更紧凑的表示形式。这一过程中,网络被迫学习忽略噪声,只保留最重要的图像特征。
- 解码器:接收潜在空间中的紧凑表示,通过逐层扩展数据,重构去噪后的图像。理想情况下,重构的图像应该接近原始图像,而不包含噪声。
- 特征提取和降维(以AE为例)
- 编码器:将高维输入数据(如图像)映射到一个低维表示。这个低维表示是输入数据的一个压缩形式,包含了最重要的特征。
- 解码器:尝试从这个低维表示重构原始输入。如果重构质量高,这表明低维表示成功捕获了输入数据的关键信息。
- 图像生成(以VAE为例)
- 编码器:不仅学习将输入映射到潜在空间的表示,还学习输入数据在潜在空间的分布参数。这允许模型捕获输入数据的概率特性。
- 解码器:从潜在空间的分布中随机采样点,然后将这些点映射回数据空间,生成新的数据实例。
二、 Attention 注意力机制
2.1 注意力机制(Attention Mechanism)
引起方式

当大家第一次看到这幅图时,是更愿意把注意力集中在可爱的大熊猫幼崽身上还是关心它周边的环境呢?
非自主提示:是由于物体本身的特征十分突出引起的注意力倾向。(比如上图中大家第一眼可能关注的都是大熊猫)
自主提示:是经过先验知识的介入下,对具有先验权重的物体引起的注意力倾向。(这种就源自于一种主观倾向,在看到大熊猫之后,从而关注它的行为,此时将便会不由自主地将注意力集中在它周边的事物上)
基础概念
注意力机制其实是源自于人对外部信息的处理能力。由于人每一时刻接受的信息都是无比的庞大且复杂,远远超过人脑的处理能力,因此人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。
在处理大量输入数据时,注意力机制允许模型关注于最关键的部分。
Query、Key、Value
- 查询(Query):指的是查询的范围,自主提示,主观意识的特征向量,代表需要获取信息的请求,即输入信息
- 键(Key):指的是被对比的项,非自主提示,物体的突出特征信息向量,与Query相关性的衡量标准
- 值(Value):物体本身的特征向量,通常和Key成对出现
- 权重(Attention Weights):用来缩放注意力权重分布的一个系数,为了稳定梯度
Query, Key 和 Value 的每个属性在不同的空间
简单理解
以上面的熊猫图为例,Q是我们想知道图中大熊猫在干嘛(问题,自主提示),KV对则是有大熊猫的那张图(原始数据)
数学定义
在数学上,注意力函数可以被定义为一个映射,该映射接受一个查询(Query)和一组键值对(Key-Value pairs),然后输出一个聚合后的信息,通常称为注意力输出(也叫注意力分数)
注意力(Q, K, V) = 聚合(权重 * V)
注意力机制是通过Query与Key的注意力汇聚(给定一个 Query,计算Query与 Key的相关性,然后根据Query与Key的相关性去找到最合适的 Value)实现对Value的注意力权重分配,生成最终的输出结果。计算过程如下:
-
首先,根据Query和Key计算两者之间的相关性或相似性计算注意力得分,常见方法如下:
- 点积: S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ⋅ K e y i Similarity(Query,Key_i) = Query\cdot Key_i Similarity(Query,Keyi)=Query⋅Keyi
- 余弦相似度: S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ⋅ K e y i ∣ ∣ Q u e r y ∣ ∣ ⋅ ∣ ∣ K e y i ∣ ∣ Similarity(Query,Key_i) = \frac{Query · Key_i}{||Query ||\cdot || Key_i||} Similarity(Query,Keyi)=∣∣Query∣∣⋅∣∣Keyi∣∣Query⋅Keyi
- MLP网络: S i m i l a r i t y ( Q u e r y , K e y i ) = M L P ( Q u e r y , K e y i ) Similarity(Query,Key_i) = MLP(Query , Key_i) Similarity(Query,Keyi)=MLP(Query,Keyi)
-
其次,对注意力得分进行缩放scale(除以维度的根号),再softmax函数,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softmax的内在机制更加突出重要元素的权重。一般采用如下公式计算:
- a i = S o f t m a x ( S i m i ) = e S i m i ∑ j = 1 L x e S i m j a_i = Softmax(Sim_i) = \frac{e^{Sim_i}}{\sum_{j=1}^{L_x}e^{Sim_j}} ai=Softmax(Simi)=∑j=1LxeSimjeSimi
-
最后,根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了)
- A t t e n t t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x a i ⋅ V a l u e i Attenttion(Query,Source) = \sum_{i=1}^{L_x}a_i \cdot Value_i Attenttion(Query,