如何建网站吗?,计算机包含哪些专业,wordpress编辑器经典,手表网站 海马300米潜水表一、自注意力 1、给定一个由词元组成的输入序列x1,…,xn#xff0c; 其中任意xi∈R^d#xff08;1≤i≤n#xff09;。 该序列的自注意力输出为一个长度相同的序列 y1,…,yn#xff0c;其中#xff1a; 2、自注意力池化层将xi当作key#xff0c;value#xff0c;query来…一、自注意力 1、给定一个由词元组成的输入序列x1,…,xn 其中任意xi∈R^d1≤i≤n。 该序列的自注意力输出为一个长度相同的序列 y1,…,yn其中 2、自注意力池化层将xi当作keyvaluequery来对序列抽取特征得到y1,…,yn
二、跟CNN、RNN对比目标都是将由n个词元组成的序列映射到另一个长度相等的序列其中的每个输入词元或输出词元都由d维向量表示不是很明白有空问问老师 1、CNN序列长度是n输入和输出的通道数量都是d 所以卷积层的计算复杂度为O(knd^2)卷积神经网络是分层的因此为有O(1)个顺序操作 最大路径长度为O(n/k)。
2、RNN当更新循环神经网络的隐状态时 d×d权重矩阵和d维隐状态的乘法计算复杂度为O(d2)。 由于序列长度为n因此循环神经网络层的计算复杂度为O(nd2)有O(n)个顺序操作无法并行化最大路径长度也是O(n)。
3、在自注意力中查询、键和值都是n×d矩阵。 考虑缩放的”点积“注意力 其中n×d矩阵乘以d×n矩阵。 之后输出的n×n矩阵乘以n×d矩阵。 因此自注意力具有O(n2d)计算复杂性。 每个词元都通过自注意力直接连接到任何其他词元有O(1)个顺序操作可以并行计算 最大路径长度也是O(1)。 三、位置编码
1、自注意力则因为并行计算而放弃了顺序操作。 为了使用序列的顺序信息通过在输入表示中添加 位置编码positional encoding来注入绝对的或相对的位置信息。
2、输入表示X∈R^(n×d)包含一个序列中n个词元的d维嵌入表示。 位置编码使用相同形状的位置嵌入矩阵 P∈R^(n×d)输出XP
3、位置编码矩阵 4、绝对位置信息 竖着看有三维第一维00001111变化很慢第二位00110011变化中等第三维01010101变化最快大概是这样子叭。。。。 5、相对位置信息 除了捕获绝对位置信息之外位置编码还允许模型学习得到输入序列中相对位置信息。 这是因为对于任何确定的位置偏移δ位置iδ处 的位置编码可以线性投影位置i处的位置编码来表示。也就是 位于iδ处的位置编码可以线性投影位置i处的位置编码来表示 令ωj1/100002^(j/d) 对于任何确定的位置偏移δ中,任何一对 (p^(i,2j)p^(i,2j1))都可以线性投影到 (p^(iδ,2j)p^(iδ,2j1))
6、代码
#save
class PositionalEncoding(nn.Module):位置编码def __init__(self, num_hiddens, dropout, max_len1000):super(PositionalEncoding, self).__init__()self.dropout nn.Dropout(dropout)# 创建一个足够长的Pself.P torch.zeros((1, max_len, num_hiddens))X torch.arange(max_len, dtypetorch.float32).reshape(-1, 1) / torch.pow(10000, torch.arange(0, num_hiddens, 2, dtypetorch.float32) / num_hiddens)self.P[:, :, 0::2] torch.sin(X)self.P[:, :, 1::2] torch.cos(X)def forward(self, X):X X self.P[:, :X.shape[1], :].to(X.device)return self.dropout(X)
四、总结
1、在自注意力中查询、键和值都来自同一组输入。
2、卷积神经网络和自注意力都拥有并行计算的优势而且自注意力的最大路径长度最短。但是因为其计算复杂度是关于序列长度的二次方所以在很长的序列中计算会非常慢。
3、为了使用序列的顺序信息可以通过在输入表示中添加位置编码来注入绝对的或相对的位置信息