RNN的思想是利用序列信息。在经典的神经网络中,我们认为所有的输入和输出是相互独立的。 但是对于许多其他任务这个想法是很不好的。如果你需要预测一个句子中的下一个字,知道前边的字会是很有帮助的。理论上RNN可以利用任意长度的序列的信息,但是实际只能处理很有限的前几步信息。下边是一个典型的RNN图示:

上图是一个展开的RNN,也就是说如果我们要处理一个含有5个字的序列,这个网络就要展开成5层的神经网络,一层处理一个字。图中的各个符号解释如下:

xtx_t是第t步的输入,x1x_1可能是一个one-hot编码的的字。

sts_t是第t步的隐藏状态,是网络的记忆功能。sts_t是通过前边的隐藏状态和当前输入步计算得出:st=f(Uxt+Wst1)st=f(Uxt+Ws_{t-1}), f通常是tanh或者ReLU

oto_t是第t步的输出,ot=softmax(Vst)ot=softmax(Vs_t)

RNN的数学描述:

st=tanh(Uxt+Wst1)s_t=tanh(Uxt+Ws_{t-1})

ot=softmax(Vst)ot=softmax(Vs_t)

L(y,o)=1/NnynlogonL(y,o)=-1/N\sum_{n}^{} y_nlogo_n

RNN在很多NLP任务中表现的非常出色。

RNN通用来生成文本

通过给定一段文本,通过一定的训练,可以生成相似的文本。

机器翻译

根据原语言的输入序列,预测目标语言的序列达到翻译的目的。

语音识别

输入一段音频序列,预测出一个序列的音频。

生成文本描述

和CNN一块,CNN识别图像内容,RNN生成图像的描述。

results matching ""

    No results matching ""