RNN的思想是利用序列信息。在经典的神经网络中,我们认为所有的输入和输出是相互独立的。 但是对于许多其他任务这个想法是很不好的。如果你需要预测一个句子中的下一个字,知道前边的字会是很有帮助的。理论上RNN可以利用任意长度的序列的信息,但是实际只能处理很有限的前几步信息。下边是一个典型的RNN图示:
上图是一个展开的RNN,也就是说如果我们要处理一个含有5个字的序列,这个网络就要展开成5层的神经网络,一层处理一个字。图中的各个符号解释如下:
是第t步的输入,可能是一个one-hot编码的的字。
是第t步的隐藏状态,是网络的记忆功能。是通过前边的隐藏状态和当前输入步计算得出:, f通常是tanh或者ReLU
是第t步的输出,
RNN的数学描述:
RNN在很多NLP任务中表现的非常出色。
RNN通用来生成文本
通过给定一段文本,通过一定的训练,可以生成相似的文本。
机器翻译
根据原语言的输入序列,预测目标语言的序列达到翻译的目的。
语音识别
输入一段音频序列,预测出一个序列的音频。
生成文本描述
和CNN一块,CNN识别图像内容,RNN生成图像的描述。