RNN的网络结构和参数更新方式

1. RNN定义

RNN是处理时序问题的重要工具。对于一个 x x x,与一个 U U U计算后得到一个 h h h,这个 h h h V V V计算后得到输出 o o o h h h W W W计算后的结果返回到 h h h的输入,由此形成了一个循环,这就是循环神经网络;

2. RNN参数更新方式

假设一个输入序列 x x x= x 1 , x 2 , . . . , x n {x_1,x_2,...,x_n} x1,x2,...,xn,网络展开后看作一个 n n n层的前馈神经网络,第 t t t层对应者时刻 t t t的状态。记第 t t t层的输入状态、隐藏状态和输出状态分别为 x t x_t xt h t h_t ht, o t o_t ot,训练时的输出为 y t y_t yt,则有如下计算过程:
(1)隐藏状态
隐藏状态 h t h_t ht由当前时刻的输入状态 x t x_t xt和上一时刻的隐藏状态 h t h_t ht共同决定:
h t h_t ht= σ ( U x t + W h t − 1 + b ) \sigma({Ux_t}+{Wh_{t-1}}+b) σ(Uxt+Wht1+b)
其中 U U U是输入层到隐藏层之间的权重矩阵, W W W是不同时刻的隐藏层之间的权重矩阵, b b b是偏置向量, σ \sigma σ是激活函数,此处通常使用 t a n h ( x ) tanh(x) tanh(x)
(2)输出状态
输出状态 o t o_t ot的计算公式:
o t o_t ot = g ( V h t + c ) g(Vh_t+c) g(Vht+c)
其中 V V V是隐藏层到输出层之间的权重矩阵, c c c是偏置向量, g g g是激活函数,在输出层通常使用 s o f t m a x softmax softmax;
(3)训练时的状态
在训练时,网络在整个序列上的损失函数可以如下定义:
L L L= ∑ t L t \sum_{t}L_t tLt = ∑ t L o s s ( o t , y t ) \sum_{t}Loss(o_t,y_t) tLoss(ot,yt)
其中 L t L_t Lt t t t时刻的损失, L o s s ( , ) Loss(,) Loss(,)为损失函数,通常使用交叉熵损失函数,交叉熵损失函数由信息熵计算而来,信息熵的定义如下:
H ( p , q ) H(p,q) H(p,q)= − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) -\sum_{i=1}^{n}p(x_i)log(p(x_i)) i=1np(xi)log(p(xi))
其中 p ( x i ) p(x_i) p(xi) i i i时刻的概率,可以看到这个值越大,事物越不稳
交叉熵损失函数:
L L L= − [ y l o g y ^ + ( 1 − y ) l o g ( 1 − ( ^ y ) ) ] -[ylog\hat{y}+(1-y)log(1-\hat(y))] [ylogy^+(1y)log(1(^y))]

通过观察RNN的计算过程,可以发现整个过程在反复共享 U U U, V V V, W W W这三个权重矩阵,所有循环的参数也被反复使用,这样可以极大的减少参数量,并且可以根据序列时间步的不一样处理不同长度的序列。

3. RNN存在问题

RNN使用反向传播进行梯度下降。由于不同时刻的状态是相互依赖的,所以需要存储各个时刻的状态,这导致整个过程对内存的消耗很大,并且计算速度慢,同时,根据参数更新方式可知,位于序列后端的输入会异常大,如果激活函数得到的值小于1,则到了后面会有梯度消失,如果大于1,到了后面会有梯度爆炸,也把前面的信息给遗忘了。

如果你要转发或者引用,麻烦加上本文的链接。
转发:https://blog.csdn.net/weixin_45885232/article/details/124112359
引用:
RNN的网络结构和参数更新方式(2022-04-11)[EB\OL]https://blog.csdn.net/weixin_45885232/article/details/124112359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值