Closed jjjjohnson closed 3 years ago
感谢您发现问题,您如果愿意可以提一个PR,太感谢了!
比如下图第一行[00 pad 14 13 12]如果不用下三角mask,这样shift了以后会将一个batch中的其他样本的feature引入当前样本
我觉得应该是引入了同一个样本中其他帧之间的信息,而非不同样本间的信息。 而且引入的是一些混乱的信息。例如0行2列本应该是0号帧对2号帧的注意力评分,却错成了"14"也即1号帧对-3号帧的注意力评分。
如果encoder要求完整的双向感受野,那么我们的最后需要的矩阵是这样的:
. | . | . | . | . |
---|---|---|---|---|
00 | 01 | 02 | 03 | 04 |
11 | 10 | 11 | 12 | 13 |
22 | 21 | 20 | 21 | 22 |
33 | 32 | 31 | 30 | 31 |
44 | 43 | 42 | 41 | 40 |
. | . | . | . | . |
---|---|---|---|---|
00 | 0,-1 | 0,-2 | 0,-3 | 0,-4 |
11 | 10 | 1,-1 | 1,-2 | 1,-3 |
22 | 21 | 20 | 2,-1 | 2,-2 |
33 | 32 | 31 | 30 | 3,-1 |
44 | 43 | 42 | 41 | 40 |
我这样理解对吗? @jjjjohnson
的确是有个正负号的,上图中的是针对语言模型而言,我们的编码器是针对全部上下文的,不过不同的是,代码中我默认左边为负数,右边是正数。
你好, 因为conformer在ASR的应用中是encoder,不需要和transformer-XL(decoder)一样加上下三角的attention mask, 所以transformer-XL中的_shift实现用到conformer中是不对的。(当然代码中没有加下三角的,比如下图第一行[00 pad 14 13 12]如果不用下三角mask,这样shift了以后会将一个batch中的其他样本的feature引入当前样本。这样个人认为不合理)。 我在ESPNET也提过issue,作者也承认了这个问题。
配一张图来说明transformer-XL的shift实现原理: 如果需要 我可以提一个PR~ 谢谢!