query mask 为什么要在这个地方做 query masking
HaishuoFang opened this issue · comments
# Query Masking
`query_masks = tf.sign(tf.abs(tf.reduce_sum(queries, axis=-1))) # (N, T_q)
query_masks = tf.tile(query_masks, [num_heads, 1]) # (h*N, T_q)
query_masks = tf.tile(tf.expand_dims(query_masks, -1), [1, 1, tf.shape(keys)[1]]) # (h*N, T_q, T_k)
outputs *= query_masks # broadcasting. (N, T_q, C)`
你好,看了你的笔记受启发,但有个问题我想请教一下,你知道作者为啥要在 softmax 之后进行query mask吗?而不是在softmax之前 和 key masking 一起做完
你好,这个是我当时学习的时候做的笔记,当时也不是很懂。但是现在看起来好像有问题,这个人的代码好像疑惑点还挺多的。目前来看,大多数都是先做masking然后softmax。我另外有一篇Transformer的博客也是先做的masking,你可以查看一下Tansformer的PyTorch实现