在tensorflow.contrib.seq2seq
' AttentionWrapper
中,"深度"请参阅attention_layer_size
文档中所述的内容?当文档说"使用上下文作为注意"如果值为None
,那么"上下文"是什么意思?
答案 0 :(得分:1)
在Neural Machine Translation by Jointly Learning to Align and Translate中,他们描述了(Bahdanau)注意机制;本质上发生的是你计算标量“对齐分数”a_1, a_2, ..., a_n
,它表明你编码输入序列的每个元素在给定时刻的重要性(即你现在应该注意输入句子的哪个部分)在当前的时间步长。)
假设您想要“注意”/“参与”的(编码)输入序列是一系列表示为e_1, e_2, ..., e_n
的向量,则给定时间步长的上下文向量是所有的加权和这些由你的对齐分数决定:
context = c := (a_1*e_1) + (a_2*e_2) + ... + (a_n*e_n)
(请记住,a_k
是标量;您可以将其视为句子中的“平均”字母/单词 - 理想情况下,如果您的模型训练有素,则上下文看起来如此与e_i
最相似,你最需要注意的是e_{i-1}
,但与e_{i+1}
,attention_layer_size
等有点相似。直观地说,想象一下“抹掉”输入元素,如果有任何意义......)
无论如何,如果None
不是attention_layer_size == None
,那么它指定解码器中前馈层中隐藏单元的数量,用于将此上下文向量与解码器内部RNN的输出混合细胞获得注意力的价值。如果attention_layer_size
,它只使用上面的上下文向量作为注意值,并且不会混合内部RNN单元的输出。 (当我说“混合”时,我的意思是连接上下文向量和RNN单元格的输出,然后通过设置{{1}}将其投影到您指定的维度。)
实施的相关部分位于this line,并描述了如何计算。
希望有所帮助!