往期回顾:
06——深度学习中的正则化
07——深度模型中的优化
08——卷积网络
为了处理一维序列数据,我们转向神经网络框架中另一强大的特化,循环神经网络。(主要参考《深度学习》和cousera上吴恩达的课程)
循环神经网络(recurrent neural network)或 RNN ,是一类用于处理序列数据的神经网络。大多数循环网络都能处理可变长度的序列。循环网络强调参数共享,这使得模型能够扩展到不同形式的样本并进行泛化。例如 “我八点吃的早饭” 和 “我早饭在八点吃” ,要提取时间信息。如果我们训练一个前馈网络,需要分别学习句子每个位置的所有语言规则,而循环网络在几个时间步内共享相同的权重,不需要在每个位置都分别学习。
循环网络的计算图有两种表现方式,如图。左边循环图展开后就是右边展开图。
一、循环神经网络
RNN 的设计模式主要有以下几种:
- 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络。如图:
- 每个时间步产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络。如图:
- 隐藏单元之间存在循环连接,读取整个序列后产生单个输出的循环网络,如图:
现在我们研究第一种情形的 RNN 前向传播公式。这种循环网络可以计算任何图灵可计算的函数。我们使用 tanh 作为激活函数,RNN 从特定的初始状态 h ( 0 ) \boldsymbol h^{(0)} h(0)出发,开始前向传播。从 t = 1 t=1 t=1 到 t = τ t=\tau t=τ 的每个时间步,我们应用以下更新方程: a ( t ) = b + W h ( t − 1 ) + U x ( t ) h ( t ) = tanh ( a ( t ) ) o ( t ) = c + V h ( t ) y ^ ( t ) = softmax ( o ( t ) ) \begin{aligned}\boldsymbol a^{(t)} &= \boldsymbol{b+Wh^{(t-1)}+Ux^{(t)}}\\ \boldsymbol h^{(t)}&=\boldsymbol{\tanh(a^{(t)})}\\ \boldsymbol o^{(t)}&=\boldsymbol {c +Vh^{(t)}}\\ \boldsymbol {\hat y^{(t)}}&=\text{softmax}(\boldsymbol o^{(t)}) \end{aligned} a(t)h(t)o(t)y^<