如何在 TensorFlow 中实现递归神经网络?

How can I implement a recursive neural network in TensorFlow?

是否有某种方法可以使用 TensorFlow 实现类似于 [Socher et al. 2011] 中的递归神经网络? 请注意,这与 TensorFlow 很好地支持的递归神经网络不同。 不同的是,网络不是复制成线性操作序列,而是复制成树状结构。

我想象我可以使用 While op 为我的数据集的每个条目构造类似于树数据结构的广度优先遍历。

也许可以在 TensorFlow 中将树遍历实现为新的 C++ 操作,类似于 While(但更通用)?

目前,这些模型很难在 TensorFlow 中高效、干净地实现,因为图形结构取决于输入。这也使得进行小批量处理变得非常困难。可以使用您提到的 while 循环之类的东西,但是要干净利落地做到这一点并不容易。

您可以为每个示例构建一个新图表,但这会很烦人。如果对于给定的输入大小,您可以枚举相当少的可能图,您可以 select 在它们之间并一次构建它们,但这对于更大的输入是不可能的。

您还可以使用复杂的 tf.gather 逻辑和掩码在图表中路由示例,但这也可能是一个巨大的痛苦。

最终,为每个示例动态构建图表可能是最简单的,并且将来可能会有支持更好的即时样式执行的替代方案。但是从 v0.8 开始,我预计这会有点烦人,并且会像 Yaroslav 在他的评论中提到的那样引入一些开销。

编辑:既然我回答了,这里是一个使用带有 while 循环的静态图的例子:https://github.com/bogatyy/cs224d/tree/master/assignment3 我不确定它与像这样的模型的自定义 C++ 代码相比性能如何,尽管原则上它可以批处理。

你猜对了,你可以用tf.while_looptf.cond来表示静态图中的树结构。更多信息: https://github.com/bogatyy/cs224d/tree/master/assignment3

在我的评估中,与为每棵新树重新构建图表相比,它使训练速度提高了 16 倍。