循环神经网络(RNN)结构
循环神经网络背后的思想就是使用序列信息。
在传统的神经网络中,我们认为所有的输入(和输出)彼此之间是互相独立的。但是对于很多任务而言,这个观点并不合适。如果你想预测句子中的下一个词,你最好需要知道它之前的词。循环神经网络之所以称之为循环,就是因为它们对于序列中每个元素都执行相同的任务,输出依赖于之前的计算。
另一种思考循环神经网络的方法是,它们有一个记忆,记忆可以捕获迄今为止已经计算过的信息。理论上,循环神经网络可以利用任意长度序列的信息,但是,在实际中,它们仅能利用有限长步。
循环神经网络结构
RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成。在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法。
Hidden Layer的层展开图
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的模型的“循环反馈”的思想。
相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型