循环神经网络(RNN)之网络结构解析

一、RNN的前向传播结构

在这里插入图片描述
在这里插入图片描述

t时刻输入: X t X_{t} Xt S t − 1 S_{t-1} St1
t时刻输出: h t h_{t} ht
t时刻中间状态: S t S_{t} St

上图是一个RNN神经网络的时序展开模型,中间t时刻的网络模型揭示了RNN的结构。可以看到,原始的RNN网络的内部结构非常简单。神经元A在t时刻的状态仅仅是(t-1)时刻神经元状态 S t − 1 S_{t-1} St1,与(t)时刻网络输入 X t X_t Xt的双曲正切函数的值;这个值不仅仅作为该时刻网络的输出,也作为该时刻网络的状态被传入到下一个时刻的网络状态中,这个过程叫做RNN的正向传播(forward propagation)

传播中的数学公式(含参数)

在这里插入图片描述

上图表示为RNN网络的完整的拓扑结构,以及RNN网络中相应的参数情况。我们通过对t时刻网络的行为进行数学的推导。在如下的内容中,会出现线性状态和激活状态两种表达,线性状态将用 ∗ * 号进行标注。
t时刻神经元状态
S t = ϕ ( S t ∗ ) S_t= {\phi}{(S{_t^*})} St=ϕ(St)
S t ∗ = ( U X t + W S t − 1 ) S{_t^*}=(UX_t+WS_{t-1}) St=(UXt+WSt1)
t时刻的输出状态
O t = ψ ( O t ∗ ) O_t=\psi{(O{_t^*})} Ot=ψ(Ot)
O t ∗ = V S t O{_t^*} = VS_t Ot=VSt
我们该如何得到RNN模型中的U、V、W三个全局共享参数的具体值呢?在之后的RNN逆向传播中可以得出具体的情况。

二、BPTT(随时间变化的反向传播算法)

1、 损失函数的选取,在RNN中一般选取交叉熵(Cross Entropy),表达式如下:
L o s s = − ∑ i = 0 n y i l n y i ∗ Loss = -{\sum_{i=0}^{n}y_ilny_i^*} Loss=i=0nyilnyi
上式为交叉熵的标量的形式, y i y_i yi是真实的标签纸, y i ∗ y_i^* yi是模型给出的预测值,在多维输出值的时,则可以通过累加得出n维损失值。交叉熵在应用于RNN需进行微调:首先,RNN的输出是向量的形式,没有必要将所有的维度进行累加一起,直接把损失值用向量进行表达即可;其次,由于RNN模型是序列问题,因此其模型损失不能只是一个时刻的损失,应该包含全部N个时刻的损失。
因此RNN模型在t时刻的损失函数如下:
L o s s t = − [ y t l n ( O t ) + ( y t − 1 ) l n ( 1 − O t ) ] {Loss}_t = -[y_tln(O_t) + (y_t-1)ln(1-O_t)] Losst=[ytln(Ot)+(yt1)ln(1Ot)]
全部N个时刻的损失函数(全局损失)表达为如下形式:
L o s s = − ∑ t = 1 N L o s s t = − ∑ t = 1 N [ y t l n ( O t ) + ( y t − 1 ) l n ( 1 − O t ) ] Loss = -{\sum_{t=1}^NLoss_t}= -{\sum_{t=1}^N[y_tln(O_t) + (y_t-1)ln(1-O_t)]} Loss=t=1NLosst=t=1N[ytln(Ot)+(yt1)ln(1Ot)]

2、 softmax函数的求导公式为(下文用 ψ 表 示 \psi 表示 ψ
ψ ′ ( x ) = ψ ( x ) ( 1 − ψ ( x ) ) \psi'(x)=\psi(x)(1-\psi(x)) ψ(x)=ψ(x)(1ψ(x))

3、 激活函数的求导公式为(选取tanh(x)作为激活函数)
ϕ ( x ) = t a n h ( x ) \phi(x) = tanh(x) ϕ(x)=tanh(x)
ϕ ′ ( x ) = ( 1 − ϕ 2 ( x ) ) \phi'(x)=(1-{\phi^2(x)}) ϕ(x)=(1ϕ2(x))

4、 BPTT算法
注: 由于RNN模型与时间序列有关,所以使用Back Propagation Through Time(随时间变化反向传播的算法),但依旧遵循链式求导法则。在损失函数中,虽然RNN的额全局损失是与N个时刻有关的,但下面的推导仅涉及某个t时刻。
(1)求出t时刻下的损失函数关于 O t ∗ O_t^* Ot的微分:
∂ L t ∂ O t ∗ = ∂ L t ∂ O t ∗ ∂ O t ∂ O t ∗ = ∂ L t ∂ O t ∗ ∂ ψ ( O t ∗ ) ∂ O t ∗ = ∂ L t ∂ O t ∗ ψ ′ ( O t ∗ ) \frac{\partial{L_t}}{\partial{O_t^*}} =\frac{\partial{L_t}}{\partial{O_t}} * \frac{\partial{O_t}} {\partial{O_t^*}}=\frac{\partial{L_t}}{\partial{O_t}} * \frac{\partial{\psi{(O_t^*)}}} {\partial{O_t^*}}=\frac{\partial{L_t}}{\partial{O_t}} * \psi'(O_t^*) OtLt=OtLtOtOt=OtLtOt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值