transforms

batch norm是列标准化,layer norm是行标准化
transforms_第1张图片
transforms的encoder,这里省略了一些东西。每一个block都是输入一段向量,然后输出一段向量。每一个block不仅仅是一层layer。每一个block所做的事情,大概是先输出一段向量,做self-attention,考虑整个seq,然后输出。再将输出输入到全连接层中,最后的输出就是block的输出。
transforms_第2张图片
在transforms的encoder中,所做的事更为复杂。在经过self-attention后,我们在输出a上加上了自身b。将相加的结果,也就是residual,再经过规范化。这里用的规范化不再是batch normalization 而是layer normalization。将规范化后的结果作为全连接层的输出,再输出的时候,仍然要加上自身。最后在经过规范化,就是block的输出。
transforms_第3张图片
在输入的时候,除了词向量之外,还需要加入位置编码,用来确定其相对位置。
transforms_第4张图片
transforms的解码器,将encoder的结果输入到解码器中,然后第一次输入开始字符作为翻译的开始。在经过softmax之后,可以在词典上找到概率最大的文字,作为输出。将结果作为输入再次放入解码器中,来预测下一次的输出。
transforms_第5张图片
这里的解码器相较于encoder,加入了Masked self-attenton。

transforms_第6张图片
以往在计算b3的时候,需要计算q3与k1,k2,k3,k4相乘的结果,在Masked self-attenton中,我们只计算a3之前的值,也就是a1,a2,a3。因为在预测的之后是从前到后,在计算b3的时候,是不知道a4的值。
transforms_第7张图片
让decoder可以输出结束符号。当输出结束的时候,解码器自动停止生成。
transforms_第8张图片

NAT并不是一次产生一个字,而是一次把一整个句子都产生出来。NAT的输出可能是一排的开始符号,然后产生一排结果作为输出。而这个输出的个数,我们是不知道的。我们可以另外新建一个网络,在输入encode的结果之后,输出一个数字,代表预测的字数。另外一种,就是估计一下可能的字数,比如可能预测300字,让decode直接输出300个字,然后观察其中是不是有符号,在结束符号右边的,统统舍去。
NAT的好处就是可以一次产生完整的句子。
transforms_第9张图片
上述图片,表述了encode和decode之间是如何交互运作的。在decode中,首先输入一个字符,代表开始。将生成的向量乘上一个矩阵做一个Transform。得到一个query,称为q。将q与a1,a2,a3产生的k相乘,计算attention的分数。得到的α1,α2,α3,可能已经经过softmax之后的。再乘以v,相加得到V’,最后在经过全连接层后输出。mask可以帮助实现这个过程的并行化,上述是是顺序进行的,实际是并行的。
transforms_第10张图片上述是训练过程。其中每个字使用one-hot向量来表示,我们得出的结果一个分类,是每个字的概率。我们使用交叉熵来计算两者的损失,进而更新参数。

你可能感兴趣的:(深度学习,深度学习,人工智能)