用encoder和decoder实现seq2seq过程

概念介绍

encoder与decoder的介绍

第一个组件是一个编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。 第二个组件是解码器(decoder): 它将固定形状的编码状态映射到长度可变的序列。 这被称为编码器-解码器(encoder-decoder)架构

用encoder和decoder实现seq2seq过程_第1张图片

给定一个英文的输入序列:“They”、“are”、“watching”、“.”。 首先,这种“编码器-解码器”架构将长度可变的输入序列编码成一个“状态”, 然后对该状态进行解码, 一个词元接着一个词元地生成翻译后的序列作为输出: “Ils”、“regordent”、“.”。

使用RNN只能实现1toN,Nto1,1to1;使用编码器解码器可以实现MtoN

编码器-解码器”架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。

seq2seq过程

我们将使用两个循环神经网络的编码器和解码器, 并将其应用于序列到序列(sequence to sequence,seq2seq)类的学习任务。(编码器可以使用双向的循环神经网络,解码器需要预测输出,所以不能用双向的)

用encoder和decoder实现seq2seq过程_第2张图片

在循环神经网络解码器的初始化时间步,有两个特定的设计决定: 首先,特定的“”表示序列开始词元,它是解码器的输入序列的第一个词元。 其次,使用循环神经网络编码器最终的隐状态来初始化解码器的隐状态 编码器最终的隐状态在每一个时间步都作为解码器的输入序列的一部分(还有另外的输入数据)。


衡量生成序列好坏的函数——BLEU

通过序列的匹配情况反映预测与标签的匹配情况。

BLEU(bilingual evaluation understudy) 最先是用于评估机器翻译的结果, 但现在它已经被广泛用于测量许多应用的输出序列的质量。 原则上说,对于预测序列中的任意n元语法(n-grams), BLEU的评估都是这个n元语法是否出现在标签序列中。

用encoder和decoder实现seq2seq过程_第3张图片

其中lenlabel表示标签序列中的词元数和 lenpred表示预测序列中的词元数, k是用于匹配的最长的n元语法。 另外,用pn表示n元语法的精确度,它是两个数量的比值: 第一个是预测序列与标签序列中匹配的n元语法的数量, 第二个是预测序列中n元语法的数量的比率。 具体地说,给定标签序列A、B、C、D、E、F 和预测序列A、B、B、C、D, 我们有p1=4/5、p2=3/4p2=3/4、p3=1/3和p4=0。 

BLEU会对过短的预测(通常不符合翻译)惩罚,并给长匹配高权重

惩罚过短的预测,当lenpred过小时,min里面是负的,会产生严重的惩罚。

长匹配有高权重,pn是小于等于1的,指数越小,这一项会越来越大,起到了高权重的作用。


seq2seq训练和预测的输入区别 

用encoder和decoder实现seq2seq过程_第4张图片

上图为训练过程的示意图,在训练过程中,无论decoder预测出了什么结果,都直接输出并丢掉,不会输入到下一个时间步的词元预测过程中:每次预测有两个输入,一个是上个时间步的标签词元(跟预测无关),一个是编码器最后一个状态state。

用encoder和decoder实现seq2seq过程_第5张图片

而在本图的预测过程中,解码器的实际预测输出会作为下一个时间步预测的输入的一部分,而不像训练中直接丢掉,拿标签来训练。

你可能感兴趣的:(动手学深度学习,p2p,网络协议,网络)