首页 > 编程笔记 > Python笔记 阅读:17

RNN循环神经网络是什么(新手必看)

循环神经网络(Recurrent Neural Networks,RNN)是一种常用的神经网络结构,其特有的最重要的结构——长短时记忆网络,使得它在处理和预测序列数据的问题上有着良好的表现。

下图为 RNN 的结构:


图 1 RNN 的结构

具有记忆性、参数共享并且图灵完备(Turing completeness)等是 RNN 的特性,因此,RNN在进行序列的非线性特征学习时具有一定优势。RNN 在自然语言处理(Natural Language Processing,NLP)、各类时间序列预报等中有广泛应用。

RNN 被称为“循环”,是因为它对序列的每个元素都执行相同的任务,输出取决于先前的计算。另外,RNN 有一个“记忆”功能,它可以捕获到目前为止计算的信息。

理论上,RNN 可以利用任意长序列中的信息,但实际上它仅限于回顾几个步骤,下图为 RNN 在 t 时刻展开的效果:


图 2 RNN 在 t 时刻展开的效果

其中,xt 是输入层的输入;st 是隐藏层的输出,s0 是计算第一个隐藏层所需要的,初始化一般全设为零;ot 为输出层的输出。

从图 2 可看出,RNN 的关键是 st 的值不仅取决于 xt,还取决于 st-1

假设 f 是隐藏层激活函数,是非线性的,如 tanh 函数或 ReLU 函数;g 为输出层激活函数,可以是 Softmax 函数,那么循环神经网络的前向计算过程可表示为:

ot=g(V·st+b2)
st=f(U·xt+W·st-1+b1)

需要注意的是:
1) 可以将隐藏的状态 st 看作网络的记忆,用于捕获有关所有前时间步中发生的事件的信息。步骤输出 ot 根据时间 t 的记忆计算。

2) 与在每层使用不同参数的传统深度神经网络不同,RNN共享相同的参数(所有步骤的 U、V、W)。这反映了它在每个步骤中执行相同任务记录时,只是使用不同的输入,这大大减少了需要学习的参数总数。

3) 下图在每个时间步都有输出,但根据任务,这可能不是必需的。例如,在预测句子的情绪时,可能只关心最终的输出,而不是每个单词之后的情绪。同样,可能不需要在每个时间步输入。所以,RNN 结构可以是如下图所示的不同组合。


图 3 不同组合效果

相关文章