利用循环神经网络生成唐诗_循环神经网络

本文介绍了循环神经网络(RNN)的基础知识,包括其如何处理序列输入、如何记住过去信息并对未来进行预测。文章还探讨了RNN的各种变体,如深度RNN、双向RNN、递归神经网络、序列编码器解码器以及LSTM网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环神经网络(RNN)为基础神经网络增加了一个有趣的转折点。一个普通的神经网络接受一个固定大小的向量作为输入,这限制了其在涉及没有预定大小的“序列”类型输入的情况下的使用。

7904cab0ed7f7b33ae3a3a500fe9f4e8.png

图1:普通的网络表示,输入大小为3,一个隐藏层和一个大小为1的输出层。

RNNs设计用于在没有预先确定的大小限制的情况下接受一系列输入。

812cbff341314af2be01ffb69ba31dda.png

图2:我是否可以不为“序列”输入重复调用普通网络?

当然可以,但输入的“序列”部分都是有意义的。该连续中的单个输入项与其他项相关,并可能对其相邻项产生影响。否则它只是“很多”输入,而不是“序列”输入。

所以我们需要一些有意义的东西来捕捉输入之间的关系。

循环神经网络

循环神经网络能够记得过去,它的决策受到过去学到的东西的影响。注意:基本前馈网络也能“记住”东西,但他们记住在训练期间学到的东西。例如,图像分类器在训练期间学习“1”看起来像什么,然后使用该知识对生产中的事物进行分类。

虽然RNNs在训练过程中也有类似的学习过程,但他们还记得在生成输出时从先前输入中学到的东西。它是网络的一部分。RNNs可以采用一个或多个输入向量并产生一个或多个输出向量,并且输出不仅受到像普通NN那样在输入上应用的权重的影响,还受到基于先前输入(S)/输出(S)的表示上下文的“隐藏”状态向量的影响。因此,相同的输入可以根据序列中先前的输入产生不同的输出。

e82e52ffbbd70c9258b23899e8efa410.png

图3:循环神经网络,具有隐藏状态,用于将相关信息从系列中的一个输入项传递给其他输入项。

综上所述,在普通神经网络中,固定大小的输入向量被转换为固定大小的输出向量。当您重复将变换应用于一系列给定输入并生成一系列输出向量时,这样的网络将变为“循环”。向量的大小没有预先设定的限制。并且,除了生成输出(输出是输入和隐藏状态的函数)之外,我们还根据输入更新隐藏的状态,并将其用于处理下一个输入。

参数共享

您可能已经注意到图1和图3之间的另一个关键差异。在前面,多个不同的权重应用于生成隐藏层神经元的输入项的不同部分,而隐藏层神经元又使用其他权重进行转换以生成输出。这里似乎有很多权重。而在图3中,我们似乎是在对输入序列中的不同项反复应用相同的权重。

我们在图3中通过输入共享参数。如果我们不在输入之间共享参数,那么它就像一个普通神经网络,其中每个输入节点都需要它们自己的权重。这引入了约束,即输入的长度必须是固定的,这使得在长度不同且不总是已知的情况下不可能利用序列类型的输入。

f236c40f7bc0d16814bf5f57f45d2bd6.png

图4:参数共享有助于消除大小限制.

但是我们看似在这里失去了价值,我们通过引入将一个输入链接到另一个输入的“隐藏状态”来获得回报。隐藏状态在连续输入中捕获邻居之间可能存在的关系,并且在每个步骤中都在不断变化,因此有效地使每个输入经历不同的转换!

图像分类CNN已经变得如此成功,因为2D卷积是参数共享的有效形式,其中每个卷积滤波器基本上提取图像中特征的存在或不存在,该特征不仅是一个像素,而且是其周围的相邻像素的函数。

换句话说,CNNs和RNNs的成功可以归结为“参数共享”的概念,与普通神经网络相比,“参数共享”从根本上是一种利用输入项与其周围邻居之间的关系的方式 。

aa7a843b1d6adf7b2c13d3f5c2b6dde8.png

深度RNNs

虽然隐藏状态的引入使我们能够有效地识别输入之间的关系,但是有一种方法可以使RNN“深入”并获得我们通过典型神经网络中的“深度”获得的多级抽象和表示。网络?

b94ad8ef7c2e7cbff0bb98bb86ada71f.png

图5:我们可能在一个典型的RNN的三个可能的位置增加深度。

以下是四种增加深度的方法:

(1)也许最明显的是,添加隐藏状态,一个在另一个之上,将一个输出提供给下一个。

(2)我们还可以在输入到隐藏状态之间添加额外的非线性隐藏层。

(3)我们可以增加隐藏到隐藏转换的深度。

(4)我们可以增加隐藏到输出转换的深度。Pascanu等人的这篇论文详细探讨了这一点,并且总体上确定深RNN比浅RNN表现更好。

双向RNN

有时它不仅仅是从过去来学习以预测未来,而且我们还需要展望未来以修正过去。在语音识别和手写识别任务中,如果只给出输入的一部分可能存在相当大的模糊性,我们经常需要知道接下来会发生什么,以更好地理解上下文并检测当前状态。

65551c616dd325fb065db33bdca813da.png

图6:双向RNN

这确实引入了一个明显的挑战,即未来我们需要研究多少,因为如果我们必须等待查看所有输入,那么整个操作将变得复杂。在语音识别等情况下,等到整个句子被说出可能会导致一个不太引人注目的用例。对于NLP任务,输入往往是可用的,我们可以同时考虑整个句子。此外,根据应用程序的不同,如果对近邻的敏感度较高且输入距离较远,并且比来自更远的输入的敏感性更高,则可以对仅限于有限的未来/过去的变体进行建模。

递归神经网络

递归神经网络以顺序方式分析输入。递归神经网络类似于转换被重复应用于输入的程度,但不一定以顺序方式。递归神经网络是循环神经网络的一种更为普遍的形式。它可以在任何层次树结构上运行。通过输入节点进行分析,将子节点组合到父节点中,并将它们与其他子节点组合在一起,以创建树状结构。循环神经网络也是这样做的,但那里的结构是严格线性的。即权重应用于第一个输入节点,然后是第二个,第三个等等。

68fdc027feabdd1b4c90079d3249a690.png

图7:递归神经网络

但这引发了与结构有关的问题。我们如何决定?如果结构像循环神经网络那样固定,那么训练,反向支持等过程就有意义,因为它们类似于常规神经网络。

用于对RNN进行排序的编码器解码器序列

编码器解码器或序列到序列的RNNs在翻译服务中经常使用。基本思想是有两个RNNs,一个是不断更新其隐藏状态并产生最终单个“上下文”输出的编码器。然后将其馈送到解码器,解码器将上下文转换为输出序列。这种排列的另一个关键差异是输入序列的长度和输出序列的长度不一定必须相同。

0d101a2e3bba0007845ee52ac72243a8.png

图7:编码器解码器或序列到序列的RNNs

LSTMs

这不是RNNs架构的不同变体,它引入了使用输入计算输出和隐藏状态的方式的变化。

在普通RNN中,输入和隐藏状态简单地通过单个tanh层。LSTM(长短期记忆)网络改进了这种简单的变换,并引入了额外的门和单元状态,从而从根本上解决了跨越句子保持或重置上下文的问题,并且无论这些上下文重置之间的距离如何。LSTMs的变体包括GRUs,其以不同的方式利用门来解决长期依赖性的问题。

到目前为止,我们在这里看到的只是普通的体系结构和一些已知的变体。但了解RNN及相关变体已经更清楚地表明,设计一个好的架构的技巧是了解不同的架构变化,了解每个变化带来的好处,并将这些知识应用于适当的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值