根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。如下图,
- one to one 结构,仅仅只是简单的给一个输入得到一个输出,此处并未体现序列的特征,例如图像分类场景。
- one to many 结构,给一个输入得到一系列输出,这种结构可用于生产图片描述的场景。
- many to one 结构,给一系列输入得到一个输出,这种结构可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感。
- many to many 结构,给一些列输入得到一系列输出,这种结构可用于翻译或聊天对话场景,对输入的文本转换成另外一些列文本。
- 同步 many to many 结构,它是经典的rnn结构,前一输入的状态会带到下一个状态中,而且每个输入都会对应一个输出,我们最熟悉的就是用于字符预测了,同样也可以用于视频分类,对视频的帧打标签。
传统的RNN模型要求输入输出序列是等长的,而第四中输入输出序列不等长,因此第四的模型即为Sequence to Sequence,它实现了一个序列到另一个序列的转换。
资料来源:https://blog.csdn.net/starzhou/article/details/78171936
- SeqtoSeq :RNN-RNN其框架结构如图:
- 相对于Encoder:
- 1.将整个source序列编码成一个固定维度的向量C;
- 2.Encoder 将输入序列
输入到隐藏层,利用
生成隐藏层状态,其中f是一种非线性激活函数
- 3.对所有状态h(t)求和,生成输入序列编码C;
- 相对于Decoder:通过t时刻的隐藏层的状态,预测其输出;
- 1.根据序列编码C、上一时刻隐藏层状态、上一时刻输出,计算其隐藏层的状态,计算公式;
-
2.根据条件概率分布,计算输出结果为yt的概率分布,计算公式为 ; -
3.利用最大化条件对数似然参数估计计算模型参数w;(w为输入序列与输出序列的参数) - 4.最终模型可1.生成目标序列;2.生成输入序列与输出序列的概率;
Seq-to-Seq模型来自“Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation”这篇论文
注:模型可使用LSTM替换RNN,以解决RNN的长期依赖问题;
- 注意力机制:通过target中的query和key,与source中的所有value求得的,学习的是target中的每个元素和source中的所有元素的相关度;
- 自注意力机制:学习source本身的每个单词和其他单词的相似度,Self Attention可以捕获同一个句子中单词之间的一些句法特征或语义特征;
- 多头注意力机制:计算句子中所有单词的注意力,然后将其值连接起来。
- 注:本质上注意力机制是计算权重的过程;
- 注意力机制
以下计算过程以点乘为例;
2.多头部注意力机制:
以上内容来自于:
https://www.bilibili.com/video/BV1v3411r78R?p=2&spm_id_from=pageDriver
- Transformer:一种SeqtoSeq模型结构,由encoder和decoder组成;
- Encoder:
在tansformer中包括多个block,不同的block包括不同的组件,encoder 的block包括自注意力机制和全连接层如下图;
Encoder过程:
在Encoder中,①自注意力机制生成向量后,对其进行残差连接,(所谓残差连接即f(x)+x,就是生成的向量与未处理的向量进行拼接);②然后进行layer正则化,将正则化后的向量输入全连接层;③对输出向量进行残差连接后进行layer正则化,输出本模块Encoder结果;
- Encoder&Decoder
- 在encoder&decoder中,①利用encoder生成的向量,计算出其k,v值;②然后利用Encoder中产生的k值与decoder产生的q值进行点乘计算生成a,同时a与encoder中生成的v值进行乘积后求和生成v’;③然后进行残差连接并正则化,同时将其输出到全连接层(Feed Forward).
- Decoder
- 在decoder中,相比encoder多添加了第一层的Masked multi-head Attention;其他的不同在于多头部注意力机制的输入包括encoder的输出和Masked multi-head Attention的输出;如图所示,其他层的计算不变。
- Masked multi-head Attention计算过程中由于其序列输出是串行的,这一时刻的输出会作为下一时刻的输入。因此,其计算相关程度a的过程中仅计算左边已经生成时刻的k值,在最终生成向量b也只使用左边的v值,点乘后求和得b值。
4.model--train
以上内容来自于:https://www.bilibili.com/video/BV1v3411r78R?p=4
- Bert(Bidirectional Encoder Representations from Transformers):
- Bert 利用了transformer的编码器,其输入为输入数据,例如词。其输出是一个embedding向量。
- Bert 训练:词预测(Masked LM)、上下文预测;
- 1)Bert 训练1:Masked LM---->通过mask学习词嵌入;
2)Bert 训练2:Next Sentence Prediction
- ELMO(Embedding from Language Model ):在多层RNN的嵌入向量中,一般使用最后一层生成的嵌入向量进行输入全连接层或输出,而在ELMO中,其采用每一层生成的嵌入向量,并加以权重系数a进行求和,运算后生成最终的嵌入向量进行任务学习。
- 应用:词性标注、语义分析、文本分类等
- GPT(Generative Pre-Training):transformer模型中的Decoder。通过计算上一时刻的Masked Multi-head attention计算预测下一时刻的结果。
- 应用:阅读理解、摘要抽取、翻译;
以上内容来自于:
https://www.bilibili.com/video/BV1JA411t7m6?from=search&seid=8958036506133967786