html网站 怎么做seo,永久免费个人域名注册,惠州品牌网站建设公司哪里有,wordpress tag搜索Transformer
比较了卷积神经网络#xff08;CNN#xff09;、循环神经网络#xff08;RNN#xff09;和自注意力#xff08;self-attention#xff09;。值得注意的是#xff0c;自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此#xff0c;使用自注意力…Transformer
比较了卷积神经网络CNN、循环神经网络RNN和自注意力self-attention。值得注意的是自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此使用自注意力来设计深度架构是很有吸引力的。对比之前仍然依赖循环神经网络实现输入表示的自注意力模Transformer模型完全基于注意力机制没有任何卷积层或循环神经网络层。尽管Transformer最初是应用于在文本数据上的序列到序列学习但现在已经推广到各种现代的深度学习中例如语言、视觉、语音和强化学习领域。
模型
Transformer作为编码器解码器架构的一个实例其整体架构图如下图展示。正如所见到的Transformer是由编码器和解码器组成的。与基于Bahdanau注意力实现的序列到序列的学习相比Transformer的编码器和解码器是基于自注意力的模块叠加而成的源输入序列和目标输出序列的嵌入embedding表示将加上位置编码positional encoding再分别输入到编码器和解码器中。 transformer架构
Transformer解码器也是由多个相同的层叠加而成的并且层中使用了残差连接和层规范化。除了编码器中描述的两个子层之外解码器还在这两个子层之间插入了第三个子层称为编码器解码器注意力encoder-decoder attention层。在编码器解码器注意力中查询来自前一个解码器层的输出而键和值来自整个编码器的输出。在解码器自注意力中查询、键和值都来自上一个解码器层的输出。但是解码器中的每个位置只能考虑该位置之前的所有位置。这种掩蔽masked注意力保留了自回归auto-regressive属性确保预测仅依赖于已生成的输出词元。
接下来将实现Transformer模型的剩余部分。
import math
import warnings
import pandas as pd
from d2l import paddle as d2lwarnings.filterwarnings(ignore)
import paddle
from paddle import nn 基于位置的前馈网络
基于位置的前馈网络对序列中的所有位置的表示进行变换时使用的是同一个多层感知机MLP这就是称前馈网络是基于位置的positionwise的原因。在下面的实现中输入X的形状批量大小时间步数或序列长度隐单元数或特征维度将被一个两层的感知机转换成形状为批量大小时间步数ffn_num_outputs的输出张量。
#save
class PositionWiseFFN(nn.Module):基于位置的前馈网络def __init__(self, ffn_num_input, ffn_num_hiddens, ffn_num_outputs,**kwargs):super(PositionWiseFFN, self).__init__(**kwargs)self.dense1 nn.Linear(ffn_num_input, ffn_num_hiddens)self.relu nn.ReLU()self.dense2 nn.Linear(ffn_num_hiddens, ffn_num_outputs)def forward(self, X):return self.dense2(self.relu(self.dense1(X)))
下面的例子显示改变张量的最里层维度的尺寸会改变成基于位置的前馈网络的输出尺寸。因为用同一个多层感知机对所有位置上的输入进行变换所以当所有这些位置的输入相同时它们的输出也是相同的。
ffn PositionWiseFFN(4, 4, 8)
ffn.eval()
ffn(torch.ones((2, 3, 4)))[0] tensor([[-0.8290, 1.0067, 0.3619, 0.3594, -0.5328, 0.2712, 0.7394, 0.0747],[-0.8290, 1.0067, 0.3619, 0.3594, -0.5328, 0.2712, 0.7394, 0.0747],[-0.8290, 1.0067, 0.3619, 0.3594, -0.5328, 0.2712, 0.7394, 0.0747]],grad_fnSelectBackward0)