循环神经网络(RNN)相关知识

RNN概述

循环神经网络(RNN)是用于处理序列数据的神经网络,该序列在时刻 t(从1 到 τ)包含向量 x ( t ) x^{(t) } x(t)。典型的网络结构如下图所示:

在这里插入图片描述

RNN每个时间步都需要将 x 值的输入序列映射到输出值 o 的对应序列。其中 o 是未归一化的对数概率,并且在损失函数 L 内部计算 y ^ = s o f t m a x ( x ) \hat y = softmax(x) y^=softmax(x)。损失函数 L 用于衡量每个 o 与相应的训练目标 y 的距离。

RNN输入到隐含单元的连接由权重矩阵 U 参数化,隐含单元与隐含单元连接由权重矩阵 W 参数化,隐含单元到输出节点的连接由权重矩阵 V 参数化。从上面的图中也可以看出,与CNN类似,在RNN中同样有参数共享的思想(共享了参数 W , U , V W,U,V WUV等)。这使得模型的泛化能力更强,因为模型不会依赖于特定位置上的输入 x x x。例如考虑这两句话:“I went to Nepal in 2009’’ 和 “In 2009, I went to Nepal.” ,他们表达的意思完全相同,但是时间2009出现在不同的地方,RNN的参数共享机制可以更有效的提取到这个时间信息。参数共享也允许模型泛化到没有见过的序列长度,并且训练模型所需的训练样本远远少于不带参数共享的模型。

当训练循环网络根据过去的信息去预测未来的信息时,网络通常要使用隐含状态 h (t) 来表示时刻 t 之前的序列信息:
h ( t ) = g ( t ) ( x ( t ) , x ( t − 1 ) , x ( t − 2 ) , … , x ( 2 ) , x ( 1 ) ) = f ( h ( t − 1 ) , x ( t ) ; θ ) . \begin{aligned} h^{(t)} &=g^{(t)}(x^{(t)},x^{(t-1)},x^{(t-2)},\dots,x^{(2)}, x^{(1)}) \\ & = f(h^{(t-1)}, x^{(t)} ; \theta) . \end{aligned} h(t)=g(t)(x(t),x(t1),x(t2),,x(2),x(1))=f(h(t1),x(t);θ).
函数 g ( t ) g^{(t)} g(t)将过去的序列 ( x ( t ) , x ( t − 1 ) , x ( t − 2 ) , … , x ( 2 ) , x ( 1 ) ) (x^{(t)},x^{(t-1)}, x^{(t-2)},\dots,x^{(2)}, x^{(1)}) (x(t),x(t1),x(t2),,x(2),x(1))作为输入来生成当前的隐含状态 h ( t ) h(t) h(t)。实际上,我们可以递归调用函数 f f f来完成隐含状态的计算。这么做主要有两个优点:

  1. 无论序列的长度如何,模型始终具有相同的输入数据。因为它只关注给定输 x ( t ) x^{(t)} x(t)后,从一种状态 h ( t − 1 ) h(t-1) h(t1)到另一种状态 h ( t ) h(t) h(t)的转移, 而不是在可变长度的历史输入数据 x ( t − 1 ) , x ( t − 2 ) , … , x ( 2 ) , x ( 1 ) x^{(t-1)},x^{(t-2)},\dots,x^{(2)}, x^{(1)} x(t1),x(t2),,x(2),x(1)上的操作。
  2. 我们可以在每个时间步( t t t时刻)使用相同参数的状态转移函数 f f f

在不同的NLP场景中,h(t) 需要保存的信息也不同。例如在词性标注任务中,h(t) 更多的是要保存前一个单词的信息;而在机器翻译任务中,则需要保存输入序列的所有信息。

前向传播公式

上面的图中没有指明激活函数,假设使用 t a n h tanh tanh作为激活函数,并且假设输出值是离散的,例如用于预测类别。一种表示离散变量的方式是:把输出 o 作为离散变量每种可能值的非标准化对数概率。然后,我们可以应用 softmax 函数获得标准化后概率的输出向量 y ^ \hat y y^

RNN从特定的初始状态 h (0) 开始前向传播。从 t = 1 到 t = τ 的每个时间步,我们应用以下更新方程:
a ( t ) = b + W h ( t − 1 ) + U x ( t ) h ( t ) = tanh ⁡ ( a ( t ) ) o ( t ) = c + V h ( t ) \begin{aligned} &\mathbf a^{(t)} = \mathbf b + \mathbf W \mathbf h^{(t-1)} + \mathbf U \mathbf x^{(t)} \\ &\mathbf h^{(t)} = \tanh(\mathbf a^{(t)}) \\ &\mathbf o^{(t)} = \mathbf c + \mathbf V \mathbf h^{(t)} \\ \end{aligned} a(t)=b+Wh(t1)+Ux(t)h(t)=tanh(a(t))o(t)=c+Vh(t)

y ^ ( t ) = s o f t m a x ( o ( t ) ) = e o ( t ) ∑ t = 1 τ e o ( t ) \hat {\mathbf y} ^{(t)} = softmax(\mathbf o^{(t)}) = \frac{e^{o^{(t)}}}{\sum_{t=1}^\tau e^{o^{(t)}}} \\ y^(t)=softmax(o(t))=t=1τeo(t)eo(t)

其中的参数的偏置向量 b 和 c 连同权重矩阵 U、V 和 W,分别对应于输入到隐藏单元、
隐藏单元到输出和隐藏单元到隐藏单元的连接。这个循环网络将一个输入序列映射到相同长度的输出序列。与 x 序列配对的 y 的总损失就是所有时间步的损失之和,例如定义损失L为所有时间步的负对数似然函数:
L ( { x ( 1 ) , … , x ( τ ) } , { y ( 1 ) , … , y ( τ ) } ) = ∑ t L ( t ) = − ∑ t log ⁡ P m o d e l ( y

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值