递归与递归神经网络:哪个更适合 NLP?

机器算法验证 机器学习 神经网络 深度学习 自然语言
2022-01-21 05:15:00

有递归神经网络和递归神经网络。两者通常用相同的首字母缩写词表示:RNN。根据Wikipedia,Recurrent NN 实际上是 Recursive NN,但我不太明白解释。

此外,对于自然语言处理,我似乎没有找到哪个更好(带有示例左右)。事实是,尽管 Socher 在他的教程中使用 Recursive NN for NLP ,但我找不到递归神经网络的良好实现,而且当我在 Google 中搜索时,大多数答案都是关于 Recurrent NN。

除此之外,是否还有另一种更适用于 NLP 的 DNN,或者它取决于 NLP 任务?Deep Belief Nets 还是 Stacked Autoencoders?(我似乎没有在 NLP 中找到任何特定的 ConvNets 实用程序,并且大多数实现都考虑到了机器视觉)。

最后,我真的更喜欢 C++(如果支持 GPU 则更好)或 Scala(如果支持 Spark 则更好)的 DNN 实现,而不是 Python 或 Matlab/Octave。

我尝试过 Deeplearning4j,但它正在不断开发中,文档有点过时,我似乎无法让它工作。太糟糕了,因为它有类似“黑匣子”的做事方式,非常像 scikit-learn 或 Weka,这是我真正想要的。

4个回答

循环神经网络随着时间的推移而循环。例如,如果您有一个序列

x = ['h', 'e', 'l', 'l']

该序列被馈送到与自身具有单一连接的单个神经元。

在时间步 0,字母“h”作为输入。在时间步 1,“e”作为输入。随着时间的推移展开的网络将如下所示。

循环神经网络

递归网络只是递归网络的泛化。在循环网络中,权重沿序列的长度共享(并且维数保持不变),因为当您在测试时遇到与您在训练时看到的任何长度不同的序列时,您将如何处理与位置相关的权重. 在递归网络中,出于相同的原因,每个节点的权重都是共享的(并且维数保持不变)。

这意味着所有 W_xh 权重将相等(共享),W_hh 权重也是如此。这仅仅是因为它是一个及时展开的单个神经元。

这就是递归神经网络的样子。 递归神经网络

很容易理解为什么它被称为递归神经网络。每个父节点的子节点只是一个与该节点相似的节点。

您要使用的神经网络取决于您的使用情况。Karpathy 的博客中,他一次生成一个字符,因此循环神经网络很好。

但是如果你想生成解析树,那么使用递归神经网络会更好,因为它有助于创建更好的层次表示。

如果你想在 C++ 中进行深度学习,那么使用 CUDA。它有一个很好的用户群,而且速度很快。我对此不了解更多,因此无法发表更多评论。

在 python 中,Theano 是最好的选择,因为它提供了自动微分,这意味着当你形成大而笨拙的 NN 时,你不必手动寻找梯度。Theano 会自动为您完成。Torch7 缺少此功能。

Theano 非常快,因为它为 python 代码提供了 C 包装器,并且可以在 GPU 上实现。它还有一个很棒的用户群,这在学习新东西时非常重要。

大型循环神经网络被认为可能是 NLP 最强大的模型。一篇由 A. Karpathy 撰写的关于递归神经网络和字符级别建模的精彩文章可在http://karpathy.github.io/2015/05/21/rnn-effectiveness/获得

尝试了大量用于深度学习的库(theano、caffe 等)。我强烈建议使用 Torch7,它被认为是神经网络最先进的工具,并得到纽约大学、Facebook AI 和谷歌 DeepMind 的支持。Torch7 是基于 lua 的,有很多例子你可以很容易地熟悉。很多代码可以在 github 上找到,一个好的开始是https://github.com/wojzaremba/lstm

最后,lua 的美妙之处在于 LuaJIT 可以很容易地在 Java、Python、Matlab 等中注入。

循环神经网络 (RNN) 基本上随着时间的推移而展开。它用于顺序输入,其中时间因素是序列元素之间的主要区别因素。例如,这是一个用于语言建模的循环神经网络,随着时间的推移而展开。在每个时间步,除了该时间步的用户输入外,它还接受在前一个时间步计算的隐藏层的输出。

循环神经网络


递归神经网络更像是一个层次网络,其中输入序列实际上没有时间方面,但输入必须以树的方式分层处理。这是递归神经网络外观的示例。它展示了通过递归获取对较小文本块执行的操作的输出来学习句子解析树的方法。

递归神经网络


[注意]:

LSTM 和 GRU是具有遗忘门的两种扩展 RNN 类型,在 NLP 中非常常见。

长短期记忆体

LSTM 和 GRU


LSTM-细胞公式:

在此处输入图像描述

回答几个问题:

CNN 有时肯定会用于 NLP 任务。它们是采用可变长度自然语言输入并将其减少为固定长度输出(例如句子嵌入)的一种方法。Google 的多语言通用句子编码器 (USE) 就是一个例子:

自从提出这个问题以来,已经为 NLP 提出了许多与上述不同的新模型,例如 Transformer 和预训练的神经语言模型,例如 BERT 和其他一些 USE 风格。 https://en.wikipedia.org/wiki/Transformer_(machine_learning_model)