1. 自注意力
k 窗口的大小
每个kernel窗口都可以并行计算,GPU计算
最长路径:信息是怎么传递的 filed–视野
自注意力适合处理比较长的文本,无视距离,可以看比较长的文本,但是计算复杂度高【代价】
位置信息加到输入数据里面。 行:样本
2. 代码
核心:
class PositionalEncoding(nn.Module):"""位置编码"""def __init__(self, num_hiddens, dropout, max_len=1000):super(PositionalEncoding, self).__init__()self.dropout = nn.Dropout(dropout)# 创建一个足够长的Pself.P = torch.zeros((1, max_len, num_hiddens))X = torch.arange(max_len, dtype=torch.float32).reshape(-1, 1) / torch.pow(10000, torch.arange(0, num_hiddens, 2, dtype=torch.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)
3. QA
1 序列长度是n,不是n维。最长路径:第一个元素到最后一个元素,要经过n/k层,才能看到这两个元素信息。
2 QA系统。答案在文本里,效果比较好;需要推理,效果不太好。
3 每一行是样本,每一列对应特征每一维的encoding
4 指实际中的序列–i。对每个样本加了独特的编码,每个样本不同的位置加的是同样的东西。
5 一样,从0开始。
6 不需要学习,p是生成的。对输入做变换,与输出无关
7 bert用的可学习方案
8 后面讲
9 可以。bert会讲,把p随机初始化包成nn.parameter即可,bert的做法。
10 可以,就是网络层layer
11 有可能会丢,希望输出也会有
12 bert会讲
13 位置编码可以设成可学习的东西