首页 > 人工智能(Artificial Intelligence) > 循环神经网络

循环神经网络(RNN)结构

循环神经网络背后的思想就是使用序列信息。

在传统的神经网络中,我们认为所有的输入(和输出)彼此之间是互相独立的。但是对于很多任务而言,这个观点并不合适。如果你想预测句子中的下一个词,你最好需要知道它之前的词。循环神经网络之所以称之为循环,就是因为它们对于序列中每个元素都执行相同的任务,输出依赖于之前的计算。

另一种思考循环神经网络的方法是,它们有一个记忆,记忆可以捕获迄今为止已经计算过的信息。理论上,循环神经网络可以利用任意长度序列的信息,但是,在实际中,它们仅能利用有限长步。

循环神经网络结构

RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成。在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法。

2018052810253376.png

Hidden Layer的层展开图

668850-20170105195352456-1826001717.jpg

RNN前向传播算法

$x_{t}$ 是时刻 t 的输入。例如, $x_{1}$ 可以是一个one-hot向量,对应句子中第二个词;

$s_{t}$ 是时刻 t 的隐层状态。它是网络的记忆。$s_{t}$ 基于前一时刻的隐层状态和当前时刻的输入进行计算, $s_{t} = f(U x_{t} + W s_{t-1})$ 。函数 f 通常是非线性的,如tanh或者ReLU。$s_{-1}$ 被要求为计算第一个隐藏状态,通常被初始化为全0;

$o_{t}$ 是时刻 t 的输出。例如,如果我们想预测句子 a 的下一个词,它将会是一个词汇表中的概率向量,$o_{t} = softmax(Vs_{t})$

也就是:

对于任意一个序列索引号 t,我们隐藏状态$s^{(t)}$由$x^{(t)}$和$s^{(t-1)}$得到:

$s^{(t)} = \sigma(z^{(t)}) = \sigma(Ux^{(t)} + Ws^{(t-1)} +b )$

其中σ为RNN的激活函数,一般为tanh, b为线性关系的偏倚。

序列索引号 t 时模型的输出o(t)的表达式比较简单:$o^{(t)} = Vs^{(t)} +c $

在最终在序列索引号 t 时我们的预测输出为: $\hat{y}^{(t)} = \sigma(o^{(t)})$

通常由于RNN是识别类的分类模型,所以上面这个激活函数一般是softmax。

U,W,V 这三个矩阵是我们的模型的线性关系参数,它在整个RNN网络中是共享的,这点和DNN很不相同。 也正因为是共享了,它体现了RNN的模型的“循环反馈”的思想。 

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。