out=self.attention(queries,keys,values,attention_mask)out=self.dropout(out) 值得注意的是,在此处调用self.attention时传入的queries、keys、value形状分别为(以step=3为例):(bs,1,dim)、(bs,3,dim)、(bs,3,dim),即在key和value处神奇的对已有的全部单词做了考虑,而在上一步中分明将同一个形状为(bs,...
你会先把<Start>作为序列,输入到masked self-attention层,预测结果是y1 然后把<Start> y1作为序列,输入到masked self-attention层(和训练时一样,都会用到mask矩阵来实现masked self-attention层的神经元连接方式),预测结果是y1, y2(由于可能有dropout,这个y1可能与第一步的y1稍微有点不同) 把<Start> y1 y2作...
图1是没有mask的self-attention layer, 图2是有mask的 mask在图2中是一个a,b,c,d组成的2x2矩阵,之所以是2x2是因为假设了输入和输出序列长度就是2。这里A=K1 * Q1, B=K1*Q2,也就是说B其实就是第二个序列对于第一个序列的attention,然而在decode的时候,想要遵循“no peeking ahead”的原则,B就必须为0...
out=self.attention(queries,keys,values,attention_mask)out=self.dropout(out) 值得注意的是,在此处调用self.attention时传入的queries、keys、value形状分别为(以step=3为例):(bs,1,dim)、(bs,3,dim)、(bs,3,dim),即在key和value处神奇的对已有的全部单词做了考虑,而在上一步中分明将同一个形状为(bs,...