图解seq2seq

一、seq2seq是一中端对端。序列到序列的模型,常用于机器翻译、自动问答等领域,接下来我们来分析下该算法的逻辑原理

二、图解

在这里插入图片描述
我们从零到无来理解下:(encoder和decoder这里我们都用lstm)
首先这里我先盘点下算是已知的信息(以翻译场景为例:A语言-B语言):
1、待翻译的句子对应的词向量:A语言句子中各个词的词向量
2、翻译结果句子对应的词向量: B语言句子中各词的词向量
已知的以上两点:

算法流程:
1、对待翻译的句子中的词转化成向量之后,输入LSTM中, 获取到每个时间点的hidden states vecter

2、对翻译结果的句子也转化成词向量,

3、将待翻译句子经过lstm的最后时间点的hidden states vecter作为翻译结果的初始的转态向量和翻译结果的第一个词的词向量输入到LSTM中,

4、将翻译结果的第一个时间点的hidden states和待翻译句子所有时段的hidden states vecter进行点乘,并将结果进行softmax归一, 得到的向量分别代表翻译结果的第一个词和待翻译句子的各个词的相关性大小,

5、使用得到的相关性向量和待翻译句子的hidden states进行相乘并求和,得到Attention之后的hidden states,

开始进入decode部分,(这里需要注意的一点是: 我们在训练词向量的时候会在句首和句尾添加标识符,并且要对着标识符也进行向量化)

6、进入decode部分, 将Attention之后的hidden states和我们训练好的句首向量进行拼接, 之后经过全连接层之后进行softmax多分类, 计算词典中所以词的概率, 加入词典中有10000个词, softmax之后的结果就会有10000个对应每个词的概率值,因为我们目标词是已知的,所以就可以和第一次计算出的概率求损失,并反向迭代优化

相信大家在看过算法流程之后再次看算法框架图相必就很清楚了


3、以上是训练部分, 这里我们要说下一个容易忽略的点, 那就是使用训练好的模型的时候,我们仍然要盘点下已知的信息,然后通过已知的信息怎么得到结果
已知的信息:
(1)、待翻译的句子中所有词的词向量
(2)、翻译结果的句子所有词向量包含句首尾标识符的向量
(3)、训练好的decoder模型的参数

应用的时候的图解
在这里插入图片描述

使用的过程中和训练的过程(1-5)都是相同的,不同的地方在第六步操作

应用的第6步、在encode编码完成之后就代表着decode的开始, 此时我们会将句首标识符的向量作为decode的context的第一个词向量输入,和encode的最后时间点的hidden encoder进行拼接,经过全连接之后进行softmax多分类, 此时的decode模型参数是训练好的,直接就可以取出概率最大的词, 此时开始翻译第二个词,我们通过翻译得到的第一个词取出对应的词向量,然后和decode第一个时刻的hidden states作为新的输入,经过同样的操作就可以得到出现在第二位置的最大可能的第二个词,依次进行, 直到最大概率的词是句尾标识符,就算是翻译结束

三、Attention机制

以下的这部分描述就是Attention:
4、将decode的第一个时间点的hidden states和encode所有时段的hidden states vecter进行点乘,并将结果进行softmax归一, 得到的向量分别代表翻译结果的第一个词和待翻译句子的各个词的相关性大小,

5、使用得到的相关性向量和decode部分所有的hidden states进行相乘并求和,得到Attention之后的hidden states,

最简单的计算相关性的方法就是:将decode的第一个时间点的hidden states和encode所有时段的hidden states vecter计算余弦相识度,正式应用的时候不是这种方法

计算想关性的方法我们有三种:

第一种: 将decode的第一个时间点的hidden states和encode所有时段的hidden states vecter,进行点乘,之后softmax得到相似度向量
第二种:encode所有时段的hidden states vecter  *  权重矩阵W *  将decode的第一个时间点的hidden states,对求出的值进行softmax得到相似度向量
第三种:将decode的第一个时间点的hidden states和encode所有时段的hidden states vecter隐藏层拼接起来之后乘以权重矩阵,最后通过softmax归一成相似度向量

在这里插入图片描述
第一种点乘:

在这里插入图片描述
第二种: 参数映射的方式
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab中的seq2seq是一种用于序列到序列(sequence-to-sequence)学习的机器学习模型。seq2seq模型通常用于处理具有不同长度的输入和输出序列的任务,例如机器翻译、语音识别和对话生成等。 在Matlab中,可以使用Deep Learning Toolbox来实现seq2seq模型。该工具箱提供了一系列函数和类,用于构建和训练seq2seq模型。 首先,需要定义一个Encoder网络和一个Decoder网络。Encoder网络将输入序列转换为一个固定长度的向量表示,而Decoder网络将该向量表示转换为输出序列。可以使用长短期记忆(LSTM)或门控循环单元(GRU)等循环神经网络作为Encoder和Decoder的基本单元。 接下来,使用sequenceInputLayer函数定义输入层,使用sequenceFoldingLayer函数将输入序列转换为时间序列数据,然后将其传递给Encoder网络。 对于Decoder网络,在输出层之前,可以使用attentionDecoderLayer函数引入注意力机制,以提高模型性能。同时,可以使用sequenceUnfoldingLayer函数将输出时间序列数据恢复为输出序列。 最后,使用trainNetwork函数对定义好的Encoder-Decoder模型进行训练。可以选择不同的优化器、损失函数和训练选项来获得最佳的模型性能。 通过使用Matlab中的seq2seq模型,可以轻松地实现序列到序列学习任务。这个强大的工具允许我们处理各种序列数据,并优化模型以获得最好的性能。无论是进行自然语言处理还是其他类型的序列建模任务,seq2seq模型都是一个值得尝试的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值