在Transformer等类似深度学习任务中有掩码自注意力机制等子模块,会涉及默认的填充值,
建议填一个足够小的数,如-1e6
就OK了,如果设置成float('-inf')
,如:
if mask is not None:mask = mask.expand(attention_scores.shape[0], -1, -1, -1)attention_scores = attention_scores.masked_fill(mask == 0, float('-inf'))
那么softmax
处理后会出现nan
,可能是因为它需要计算exp(float('-inf'))
先,所以会出现很离谱的数字,所以不要这么做。
参考这个图