循环神经网络基础

文章介绍了长短时记忆网络(LSTM)作为循环神经网络(RNN)的一种变体,它通过门控机制解决了传统RNN中的梯度消失问题。LSTM包含输入门、输出门和遗忘门,这些门控制着信息的流动,从而有效地处理长期依赖性。此外,文章还提供了一个简单的RNN和LSTM网络的例子。
摘要由CSDN通过智能技术生成

长短时记忆网络

在RNN中,存在一个很重要的问题,就是梯度消失问题,一开始我们不能有效的解决长时依赖问题,其中梯度消失的原因有两个:BPTT算法和激活函数Tanh
∂ E 3 ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ( ∏ j = k + 1 3 ∂ s j ∂ s j − 1 ) ∂ s k ∂ W \frac{\partial E_{3}}{\partial W}=\sum_{k=0}^{3} \frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}}\left(\prod_{j=k+1}^{3} \frac{\partial s_{j}}{\partial s_{j-1}}\right) \frac{\partial s_{k}}{\partial W} WE3=k=03y^3E3s3y^3 j=k+13sj1sj Wsk
有两种解决方案,分别是ReLU函数和门控RNN(LSTM).

LSTM

LSTM,即长短时记忆网络,于1997年被Sepp Hochreiter 和Jürgen Schmidhuber提出来,LSTM是一种用于深度学习领域的人工循环神经网络(RNN)结构。一个LSTM单元由输入门、输出门和遗忘门组成,三个门控制信息进出单元。

  • LSTM依靠贯穿隐藏层的细胞状态实现隐藏单元之间的信息传递,其中只有少量的线性操作
  • LSTM引入了“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆
  • “门”机制由一个Sigmoid激活函数层和一个向量点乘操作组成,Sigmoid层的输出控制了信息传递的比例

遗忘门:LSTM通过遗忘门(forget gate)实现对细胞状态信息遗忘程度的控制,输出当前状态的遗忘权重,取决于 h t − 1 h_{t−1} ht1 x t x_t xt.
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right) ft=σ(Wf[ht1,xt]+bf)

输入门:LSTM通过输入门(input gate)实现对细胞状态输入接收程度的控制,输出当前输入信息的接受权重,取决于 h t − 1 h_{t−1} ht1 x t x_t xt.
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \begin{array}{c}i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) \\ \tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)\end{array} it=σ(Wi[ht1,xt]+bi)C~t=tanh(WC[ht1,xt]+bC)

输出门:LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于 h t − 1 h_{t−1} ht1 x t x_t xt.
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) o_{t}=\sigma\left(W_{o} \cdot\left[h_{t-1}, x_{t}\right]+b_{o}\right) ot=σ(Wo[ht1,xt]+bo)

状态更新:“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆。
C t = f t ∗ C t − 1 + i t ∗ C ~ t h t = o t ∗ tanh ⁡ ( C t ) \begin{array}{c}C_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t} \\ h_{t}=o_{t} * \tanh \left(C_{t}\right)\end{array} Ct=ftCt1+itC~tht=ottanh(Ct)

下面给出一个标准化的RNN例子

#构造RNN网络,x的维度5,隐层的维度10,网络的层数2
rnn_ seq = nn.RNN(510,2)
#构造一个输入序列,长为6,batch是3,特征是5
X =V(torch. randn(635))
#out,ht = rnn_ seq(x, h0) # h0可以指定或者不指定
out,ht = rnn_ seq(x)
# q1:这里out、ht的size是多少呢? out:6*3*10, ht:2*3*10

#输入维度50,隐层100维,两层
Lstm_ seq = nn.LSTM(50100,num layers=2 )
#输入序列seq= 10,batch =3,输入维度=50
lstm input = torch. randn(10350)
out, (h, c) = lstm_ seq(lstm_ _input) #使用默认的全0隐藏状态
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值