【问题标题】:How can LSTM attention have variable length inputLSTM注意力怎么会有变长输入
【发布时间】:2017-11-10 14:58:36
【问题描述】:

LSTM 的注意力机制是一个直接的 softmax 前馈网络,它接受编码器每个时间步的隐藏状态和解码器的当前状态。

这两个步骤似乎相互矛盾,无法理解: 1) 需要预定义前馈网络的输入数量 2) 编码器的隐藏状态数是可变的(取决于编码时的时间步数)。

我是不是误会了什么?训练是否与训练常规编码器/解码器网络相同,还是必须单独训练注意力机制?

提前致谢

【问题讨论】:

标签: machine-learning neural-network text-processing lstm recurrent-neural-network


【解决方案1】:
def attention(inputs, size, scope):
    with tf.variable_scope(scope or 'attention') as scope:
        attention_context_vector = tf.get_variable(name='attention_context_vector',
                                             shape=[size],
                                             regularizer=layers.l2_regularizer(scale=L2_REG),
                                             dtype=tf.float32)
        input_projection = layers.fully_connected(inputs, size,
                                            activation_fn=tf.tanh,
                                            weights_regularizer=layers.l2_regularizer(scale=L2_REG))
        vector_attn = tf.reduce_sum(tf.multiply(input_projection, attention_context_vector), axis=2, keep_dims=True)
        attention_weights = tf.nn.softmax(vector_attn, dim=1)
        weighted_projection = tf.multiply(inputs, attention_weights)
        outputs = tf.reduce_sum(weighted_projection, axis=1)

return outputs

希望这段代码可以帮助你理解注意力是如何工作的。 我在我的文档分类作业中使用了这个函数,它是一个 lstm-attention 模型,不同于你的编码器-解码器模型。

【讨论】:

    【解决方案2】:

    我今天问自己同样的事情,发现了这个问题。我自己从未实现过注意力机制,但从this paper 看来,它似乎不仅仅是一个直接的 softmax。对于解码器网络的每个输出 yi,上下文向量 ci 被计算为编码器隐藏状态的加权和 h1, ..., hT:

    ci = αi1h1+...+ αiThT

    每个样本的时间步数 T 可能不同,因为系数 αij 不是固定大小的向量。实际上,它们是由 softmax(ei1, ..., eiT) 计算出来的,其中每个 eij 是一个输入为编码器隐藏状态hj和解码器隐藏状态si-1的神经网络:

    eij = f(si-1, hj )

    因此,在计算 yi 之前,这个神经网络必须被评估 T 次,产生 T 个权重 αi1,...,αiT。另外,this tensorflow impementation 可能有用。

    【讨论】:

    • 恭喜您的第一个答案,它展示了研究成果并且格式非常好!
    • 我还是有点困惑,因为 T 是可变数量的输入。在查看了您提供的论文和实现之后(谢谢,顺便说一句,答案也很好!),似乎解决方案是简单地固定时间步数 T 的上限。为了计算 alpha值,这需要标准的神经网络层转换,我们需要决定从该转换输出的固定数量的 alpha 值。不过,我很想得到关于这一点的可靠确认。很难从这篇论文和其他论文中推断出来。
    • 神经newtork f的输出是单系数e_ij。这个NN被评估了T次,T可以是任意的。 alpha 值是这个 T 数的 softmax。 sofmax 操作接受 N 个数字并产生 N 个数字,而 N 不必固定。因此,不需要 T 的上限。我希望我做对了,因为我最近使用了需要固定 T 的 Keras 注意力层 (gist.github.com/cbaziotis/7ef97ccf71cbc14366835198c09809d2),所以我不得不填充数据集。
    • @DavidParks Here 我写了一个略有不同的解释,希望它能补充这个答案。
    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多