Kyubyong / transformer

A TensorFlow Implementation of the Transformer: Attention Is All You Need
Apache License 2.0
4.25k stars 1.29k forks source link

key_mask是什么 what is key_mask in modules's mask???? #140

Open letmeheard opened 4 years ago

letmeheard commented 4 years ago

module中的mask函数分为key_mask和future_mask,future_mask是decoder中防止看到未来答案的mask,key_mask是什么? what is key_mask in modules's mask????

Kangli-Xia commented 4 years ago

训练的时候一次算一个batch,但是样本的长度是不一样的,所以要做padding=0。但是0在算softmax的时候对其他有意义的值产生影响。这里他用了一个mask来标记哪些地方是0,然后在做softmax之前把这些地方的值变成负无穷,这样就不会影响其他的数值了。

superhg2012 commented 4 years ago

什么时候用,key_mask, 什么时候用query_mask?

letmeheard commented 4 years ago

应该是这样的,由于样本长度不一,做了padding=0,但对于这部分填充的来说,是不能做positional encoding的,因为正常是用词向量+positional encoding,词向量为填充的0时,positional encoding应该也为0。key_mask就是用来解决这个的,让padding=0的地方最后加上positional encoding仍然为0。 query_mask就是正常的,Transformer decoder里,为了不让模型看到未来信息所做的mask

superhg2012 commented 4 years ago

Transforer decoder里面的mask应该是future这种上三角模式的对齐,跟key mask和 query mask还是有区别的吧。我现在也在用这个Transformer代码做模型,发现模型不收敛,现在在看是不是这个mask导致的,我用的是key_mask

letmeheard commented 4 years ago

是啊,那个query mask不就是future的上三角对齐,只用key mask肯定不收敛啊

---原始邮件--- 发件人: "Gang He"<notifications@github.com> 发送时间: 2020年5月4日(周一) 晚上10:20 收件人: "Kyubyong/transformer"<transformer@noreply.github.com>; 抄送: "letmeheard"<515365006@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [Kyubyong/transformer] key_mask是什么 what is key_mask in modules's mask???? (#140)

Transforer decoder里面的mask应该是future这种上三角模式的对齐,跟key mask和 query mask还是有区别的吧。我现在也在用这个Transformer代码做模型,发现模型不收敛,现在在看是不是这个mask导致的,我用的是key_mask

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

superhg2012 commented 4 years ago

我用的transformer是改过的,不需要去学习一个上三角的alignment,对齐信息是用了一个teacher模型学习了

rosefun commented 3 years ago

是啊,那个query mask不就是future的上三角对齐,只用key mask肯定不收敛啊 ---原始邮件--- 发件人: "Gang He"<notifications@github.com> 发送时间: 2020年5月4日(周一) 晚上10:20 收件人: "Kyubyong/transformer"<transformer@noreply.github.com>; 抄送: "letmeheard"<515365006@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [Kyubyong/transformer] key_mask是什么 what is key_mask in modules's mask???? (#140) Transforer decoder里面的mask应该是future这种上三角模式的对齐,跟key mask和 query mask还是有区别的吧。我现在也在用这个Transformer代码做模型,发现模型不收敛,现在在看是不是这个mask导致的,我用的是key_mask — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

大佬,我只用key mask,模型训练分类任务的时候,train auc会不断下降,test auc会平稳,该怎么训啊