如何在TensorFlow中执行可微分的操作选择?

时间:2017-07-03 09:30:29

标签: machine-learning tensorflow neural-network recurrent-neural-network calculus

我正在尝试生成一个基于标量输入的数学运算选择nn模型。基于由nn产生的softmax结果来选择操作。然后,必须将此操作应用于标量输入以生成最终输出。到目前为止,我已经想出了在softmax输出上应用argmax和onehot以生成一个掩码,然后将掩码应用于要执行的所有可能操作的并置值矩阵(如下面的伪代码所示)。问题是argmax和onehot似乎都不是可区分的。我是新手,所以任何人都会非常感激。提前致谢。

    SELECT * FROM Orders a,Customers b WHERE a.CustomerID=b.CustomerID;

1 个答案:

答案 0 :(得分:2)

我认为这是不可能的。这类似于此paper中描述的Hard Attention。在图像字幕中使用了很多注意力,以允许模型在每一步仅关注图像的某个部分。很难注意力不集中,但有两种方法可以解决这个问题:

1-使用强化学习(RL):RL用于训练做出决策的模型。即使损失函数不会将任何梯度反向传播到用于决策的softmax,您也可以使用RL技术来优化决策。对于简化示例,您可以将损失视为惩罚,并使用softmax层中的最大值向节点发送与惩罚成比例的策略梯度,以便在判断错误时降低决策得分(结果在高损失中。)

2-使用类似软注意的东西:不要只挑选一个操作,而是根据softmax将它们与重量混合。所以代替:

output = values * mask

使用:

output = values * softmax

现在,根据softmax 选择它们的程度,操作将收敛到零。与RL相比,这更容易训练,但如果必须从最终结果中完全删除未选择的操作(将它们完全设置为零),它将无法工作。

这是另一个回答您可能会发现有用的硬和软关注的答案:https://stackoverflow.com/a/35852153/6938290