seq2seq 和 attention 机制

153 阅读3分钟

seq2seq

知识点一: Seq2Seq模型,全称Sequence to Sequence模型,输入一个序列,输出另一个序列。

知识点二:输入和输出的长度可以不同

知识点三:使用 BOS 和 EOS 可以减少对 填充padding)的依赖

知识点四:Seq2Seq的工作流程

动图链接:seq2seq工作流程的搜索结果_百度图片搜索

知识点五:

image.png

知识点六:输入文本(例如一个句子)通过一个嵌入层(embedding layer)进行转换。这一层将每个词汇映射到一个高维空间中的稠密向量,这些向量携带了词汇的语义信息。这个过程称为词嵌入word embedding

知识点七: 基于循环神经网络(RNN)的结构中,该结构可能由普通的RNN单元、长短期记忆网络(LSTM)单元或门控循环单元(GRU)组成。

知识点八: RNN的最后一个隐藏层输出被用作整个输入序列的表示,这个输出被称为“上下文向量context vector)”。上下文向量是一个固定长度的向量,

知识点九:初始化参数:包括权重和偏置,通常随机初始化,常用的策略有Xavier和He初始化,确保训练稳定性。

知识点十:Xavier初始化(适用于Sigmoid或Tanh激活函数)和He初始化(通常用于ReLU激活函数)

知识点十一: 解码器工作流程

  • 初始隐藏状态:由编码器生成的上下文向量。
  • 开始符号:用于启动目标序列的生成。
  • 输入序列:后续时间步的输入是前一个时间步的输出(训练时为真实词,预测时为模型预测)。
  • 上下文向量:包含源序列信息,可能由注意力机制动态计算。
  • 注意力权重:在使用注意力机制时,解码器根据当前解码位置的需要,获取不同源序列部分的权重。

知识点十二: 编码器工作流程

  • 输入序列处理:编码器针对每个输入元素更新其隐藏状态,该状态累积了直至当前元素的序列信息。
  • 隐藏状态更新:对于每个输入元素,编码器更新其隐藏状态,这个隐藏状态捕获了到当前元素为止的序列信息
  • 上下文向量生成:上下文向量是一个固定长度的向量,它通过汇总和压缩整个序列的信息,有效地编码了输入文本的整体语义内容。这个向量随后将作为Decoder端的重要输入

知识点十三:seq2seq的训练过程

  • 准备数据 1.数据预处理:分词(为每个分成的词添加一个编号)和编码(在每个词的开端和末尾加上一个编号)

2.批量处理:把这些词分成几部分

  • 初始化模型参数 1.解码器RNN(初始化解码器的权重和偏置)

2.输出层(初始化输出层的权重和偏置,通常是一个全连接层,用于将解码器的隐藏状态映射到目标词汇表的概率分布)

  • 编码器处理 通过编码器RNN处理原系列,得到最后一个隐藏状态或使用注意力机制来生成上下文向量

解码器训练过程

1.初始化隐藏状态(使用编码器的最后一个隐藏状态或者上下文向量来初始化解码器的隐藏状态)

2.输入数据

3.解码器RNN

4.输出层

5.损失计算

反向传播和参数更新

1.计算梯度

2.参数更新

  • seq2seq的缺点

当数据信息过长时会丢失一部分的信息

attention机制

Attention 模型的特点是 Encoder 不再将整个输入序列编码为固定长度的“向量C” ,而是编码成一个向量(Context vector)的序列(“C1”、“C2”、“C3”),解决“信息过长,信息丢失”的问题。

image.png