以下部分内容会用自己的语言概括,同时太技术性的内容会摘抄fun-transformer的内容
1.Encoder-Decoder模型
我认为在学习其他内容前,需要先了解Encoder-Decoder模型是什么?
我个人理解的Encoder-Decoder模型更像是一种处理问题的方法,可以普遍的一些现实问题、文字以数学的方法去表示:
Encoder(编码器):
通过一个RNN网络,使用各种各样的单元(LSTM/GRU)进行堆叠,将输入的内容进行拆分成更小的一个个元素,进行一些数学公式的运算和推导,生成一个与上下文联系的向量。这个抽象出来的向量包含着输入序列的全部内容,它通过在单元间传递当前元素的信息,逐步构建对整个序列的理解。
工作流程:
1.词序列转换
在Seq2Seq模型的初始阶段,输入文本(例如一个句子)通过一个嵌入层(embedding layer)进行转换。这一层将每个词汇映射到一个高维空间中的稠密向量,这些向量携带了词汇的语义信息。这个过程称为词嵌入(word embedding),它使得模型能够捕捉到词汇之间的内在联系和相似性。
2.序列处理
随后,这些经过嵌入的向量序列被送入一个基于循环神经网络(RNN)的结构中,该结构可能由普通的RNN单元、长短期记忆网络(LSTM)单元或门控循环单元(GRU)组成。RNN的递归性质允许它处理时序数据,从而捕捉输入序列中的顺序信息和上下文关系。在每个时间步,RNN单元不仅处理当前词汇的向量,还结合了来自前一个时间步的隐藏状态信息。
3.生成上下文向量
经过一系列时间步的计算,RNN的最后一个隐藏层输出被用作整个输入序列的表示,这个输出被称为“上下文向量(context vector)”。上下文向量是一个固定长度的向量,它通过汇总和压缩整个序列的信息,有效地编码了输入文本的整体语义内容。这个向量随后将作为Decoder端的重要输入,用于生成目标序列。
Decoder(解码器):
同样采用RNN递归神经网络,将前面Encoder(编码器)输出的内容做为输入,依次合成为目标序列的各元素
工作流程:
1.初始化参数
在开始训练之前,解码器RNN及其相关输出层的参数需要被初始化。这些参数包括:
-
权重(Weights):连接不同神经网络层的参数,它们决定了层与层之间信息的传递方式。
-
偏置(Biases):在神经网络层中加入的固定值,用于调节激活函数的输出。
参数的初始化通常涉及对它们赋予随机的小数值,以防止网络在训练初期对特定输出产生偏好。常用的初始化策略包括Xavier初始化(适用于Sigmoid或Tanh激活函数)和He初始化(通常用于ReLU激活函数),这两种方法旨在维持各层激活值和梯度的大致稳定性,从而优化训练过程。
2.编码器输出
在Seq2Seq框架中,编码器负责对源序列(如一个句子)进行初步处理。编码器RNN可以是基本RNN、长短期记忆网络(LSTM)或门控循环单元(GRU)。编码器的工作流程如下:
- 输入序列处理:当接收到源序列(例如一个句子)时,编码器将序列中的元素按顺序依次进行处理。
- 隐藏状态更新:根据输入元素和当前状态,通过不同 RNN 机制(如基本 RNN、LSTM 或 GRU)动态更新隐藏状态,累积序列信息,将源序列转化为语义信息表示,为解码器提供关键信息源。
- 上下文向量生成:编码器的最后一个隐藏状态(或在注意力机制中,所有隐藏状态的加权平均)被用作上下文向量。这个向量是源序列的压缩表示,包含了序列的全部或关键信息。
3.解码器输入
编码器完成上下文向量的生成后,解码器便开始目标序列的合成过程。以下是解码器输入的详细说明:
-
(1)初始隐藏状态
编码器生成的上下文向量通常被设定为解码器的初始隐藏状态。在某些实现中,上下文向量可能会与解码器的第一个隐藏状态合并或拼接。
-
(2)开始符号(bos:Begin Of Sequence)
解码器需要一个触发信号来启动序列的生成。这一信号通常由特定的开始符号(Start-of-Sequence, )表示,它告诉解码器开始构建目标序列。
-
(3)输入序列(Input Sequence)
在第一个时间步之后,解码器的输入将是前一个时间步的输出。在训练过程中,这可能是真实的目标序列中的下一个词,或者是在预测过程中模型自己的预测。
-
(4)上下文向量(Context Vector)
在每个时间步,解码器可能会接收到一个上下文向量,这个向量是编码器输出的一个函数,它总结了整个源序列的信息。在带有注意力机制的模型中,上下文向量是动态计算的,它反映了当前解码位置对源序列不同部分的关注程度。
-
(5)注意力权重(Attention Weights)
如果模型采用了注意力机制,那么每个时间步解码器还会接收一组注意力权重。这些权重决定了编码器输出中哪些部分对于当前时间步的解码最为重要。
2.“Seq2Seq”和“Encoder-Decoder”是什么关系
我概括的这一张图应该很好的体现的其关系,Encoder-Decoder更像是一种数学/编程上的方法定义,只要满足使用了编码器(Encoder)和解码器(Decoder)类似的方法,都可以归类到Encoder-Decoder框架下。
而例如Seq2Seq之类的模型,是在数据应用上,将Encoder-Decoder框架进行不同方法的实现,每种方法特性各不相同,因此适用范围也不同
3.序列到序列(Seq2Seq)模型
3.1.Seq2Seq模型是什么?
Seq2Seq模型,全称Sequence to Sequence模型,就如字面意思,输入一个序列,输出另一个序列。这种结构最重要的地方在于输入序列和输出序列的长度是可变的。
<bos>:Begin Of Sequence(BOS)
<eos>:End Of Sequence(EOS)
“BOS I have a pen EOS”,在这里,BOS 和 EOS 分别标记句子的开始和结束。
例如上面,我们输入的是“我有一只笔”,这5个字,但输出却只有4个英语单词。输入和输出长度并不相同,为什么?
答:在处理可变长度的序列时,使用 BOS 和 EOS 可以减少对 填充(padding)的依赖,因为模型可以根据这些标记来识别序列的边界。
Seq2Seq模型在概念上还与通信原理有一定的相似性,特别是在信息编码、传输和解码的过程中。
3.2.Seq2Seq 的由来
在 Seq2Seq 框架提出之前,深度神经网络在图像分类等问题上取得了非常好的效果。在其擅长解决的问题中,输入和输出通常都可以表示为固定长度的向量,如果长度稍有变化,会使用填充(Padding)等操作,其目的是将序列数据转换成固定长度的格式,以便于输入到需要固定长度输入的神经网络中。
举个例子
假设我们有一个包含单词索引的句子序列,目标长度为5:
原始序列:[1, 2, 3](长度为3)
Padding后的序列:[1, 2, 3, 0, 0](长度为5,其中0是Padding的元素)
Padding可能引入的问题
例如在计算损失时可能需要特殊的处理来忽略这些补零的元素,以免它们影响模型的训练效果。这通常通过使用掩码(Mask)来实现,掩码可以指示哪些位置是补零的,以便在计算过程中忽略这些位置。
然而许多重要的问题,例如机器翻译、语音识别、对话系统等,表示成序列后,其长度事先并不知道。因此如何突破先前深度神经网络的局限,使其可以适应这些场景,成为了2013年以来的研究热点,Seq2Seq框架应运而生。
3.3.Seq2Seq 模型的优缺点
3.3.1 优点:
-
端到端学习
Seq2Seq模型实现了从原始输入数据(如文本、语音等)到期望输出序列的直接映射,无需进行显式的特征提取或工程化步骤。
-
处理可变长度序列
模型具备处理输入和输出序列的能力,能够适应不同长度的序列数据。
-
信息压缩与表示
编码器通过编码过程将输入序列压缩为一个固定维度的上下文向量,该向量作为输入序列的抽象表示,解码器基于此上下文向量进行解码操作以生成目标输出序列。
-
可扩展性
Seq2Seq模型具有良好的模块化特性,能够与卷积神经网络(CNNs)、循环神经网络(RNNs)等神经网络架构无缝集成,以应对更加复杂的数据处理任务和场景。
3.3.2 缺点:
-
上下文向量信息压缩
输入序列的全部信息需要被编码成一个固定维度的上下文向量,这导致了信息压缩和信息损失的问题,尤其是细粒度细节的丢失
-
短期记忆限制
由于循环神经网络(RNN)的固有特性,Seq2Seq模型在处理长序列时存在短期记忆限制,难以有效捕获和传递长期依赖性。这限制了模型在处理具有长距离时间步依赖的序列时的性能。
-
暴露偏差(Exposure Bias)
在Seq2Seq模型的训练过程中,经常采用“teacher forcing”策略,即在每个时间步提供真实的输出作为解码器的输入。然而,这种训练模式与模型在推理时的自回归生成模式存在不一致性,导致模型在测试时可能无法很好地适应其自身的错误输出,这种现象被称为暴露偏差。
4.总结Attention 的提出与影响
4.1.Attention的发展历程
时间 | 发展 | 描述 |
---|---|---|
早期 | 循环神经网络(RNNs)长短期记忆网络(LSTMs) | RNNs能够处理变长的序列数据,但由于梯度消失和梯度爆炸问题,它们在长序列上的表现并不理想。LSTMs是对RNNs的改进,通过引入门控机制来解决长序列学习中的梯度消失问题。 |
2014年 | Seq2Seq模型的提出 | Seq2Seq模型由一个编码器和一个解码器组成,两者都是基于LSTM。该模型在机器翻译任务上取得了显著的成功。历史地位:- 首次引入了编码器-解码器框架;- 端到端的学习成为可能;- 中间产生了上下文向量,把编码过程和解码过程进行了解耦。 |
2015年 | 注意力机制的引入 | 在Seq2Seq模型的基础上,Bahdanau等人提出了带注意力机制的Seq2Seq模型。 |
2017年 | 自注意力与Transformer模型 | Transformer模型完全基于自注意力机制,摒弃了传统的循环网络结构,在处理长距离依赖方面表现卓越。 |
2018年 | 多头注意力与BERT | Transformer模型进一步发展为多头注意力机制,并在BERT模型中得到应用,BERT在多项NLP任务上取得了突破性的成果。 |
这里我们可以发现,最开始使用的都是比较简单的模型,但随着后续要解决的问题不断复杂、周期长,注意力机制的重要性不断体现!
4.2Attention的N种类型
从计算区域、所用信息、使用模型、权值计算方式和模型结构方面对Attention的形式进行归类,如下表所示:
计算区域 | 所用信息 | 使用模型 | 权值计算方式 | 模型结构 |
---|---|---|---|---|
1. Soft Attention(Global Attention) | 1.General Attention | 1. CNN + Attention | 1.点乘算法 | 1. One-Head Attention |
2. Local Attention | 2. Self Attention | 2. RNN + Attention | 2. 矩阵相乘 | 2. Mutil-layer Attention |
3. Hard Attention | 3. LSTM + Attention | 3.Cos相似度 | 3.Mutil-head Attention | |
4. pure-Attention | 4. 串联方式 | |||
5. 多层感知 |
类型还是蛮多的
4.3.Attention 能解决什么问题?
Attention 可以解决信息丢失问题,Attention 模型的特点是 Encoder 不再将整个输入序列编码为固定长度的“向量C” ,而是编码成一个向量(Context vector)的序列(“C1”、“C2”、“C3”),解决“信息过长,信息丢失”的问题。
引入了 Attention 的 Encoder-Decoder 模型如下图:
这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。
4.4.Attention 的核心工作是什么?
Attention 的核心工作就是“关注重点”。在特定场景下,解决特定问题。
- 场景:信息量大,包含有效信息和噪声。
- 问题:大脑算力和资源有限,无法同时处理所有信息。
- 应对:快速从繁杂信息中检索出对解决问题最重要的信息。
这很像人类看图片的逻辑,当我们看下面这张熊猫图片的时候,我们将注意力集中在了图片的焦点上(熊猫)。
- 信息:整个画面
- 有效信息:画面中心位置
- 无效信息:画面的边边角角、底色、花纹等等
将有限的注意力集中在重点信息上,从而节省资源,快速获得最有效的信息。
4.5.Attention 的3大优点
之所以要引入 Attention 机制,主要是3个原因:
- 参数少:模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。
- 速度快:Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。
- 效果好:在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。
Comments NOTHING