循环神经网络RNN:

1.什么是循环神经网络?
循环神经网络是具有隐藏状态的神经网络。
当前时间步的输入叠加上一个时间步的隐藏状态,得到当前时间步的隐藏状态,当前时间步的隐藏状态得到当前时间步的输出
当前时间步的*输入*叠加上一个时间步的*隐藏状态*,得到当前时间步的*隐藏状态*,当前时间步的隐藏状态得到当前时间步的*输出*。在这里插入图片描述2.循环神经网络计算公式
Ht = ϕ(XtWxh + Ht-1Whh + bh)
#当前时间步输入Xt依权重叠加上一个时间步隐藏状态Ht-1,再加激活函数得到当前时间步隐藏状态Ht
Ot = HtWhq + bq
#由当前时间步的隐藏状态得到当前时间步的输出

3.RNN的输入输出
#输入:时间步数、批量大小、特征数
X = torch.rand(size=(num_steps, batch_size, len(vocab)))
#隐藏:隐藏层数、批量大小、隐藏单元数
state = torch.zeros((1, batch_size, num_hiddens))

4.RNN的缺点
#产生较长的矩阵乘法链–因为梯度是一个时间节点一个时间节点往后传递的,会导致梯度消失或者梯度爆炸。
#可以使用梯度剪裁缓解。

门控循环单元GRU:

1.门控循环单元与普通RNN的区别
#支持隐藏状态的门控,即何时更新隐藏状态,何时重置隐藏状态,有个专门的控制单元

2.门控循环单元的结构
#重置门、更新门
Rt = σ(XtWxr + Ht-1Whr + br)
当前时间步的输入与上一个时间步的隐藏状态,计算得到当前时间步的重置门
Zt = σ(XtWxz + Ht-1Whz + bz)
当前时间步的输入与上一个时间步的隐藏状态,计算得到当前时间步的更新门
#候选隐藏状态
~Ht = tanh(XtWxh + (Rt ⊙ Ht-1) Whh + bh)
当前时间步的输入与当前重置门与上一个时间步的隐藏状态,计算得到候选隐藏状态
#隐藏状态
Ht = Zt ⊙ Ht-1 + (1 - Zt) ⊙ ˜Ht
更新门与上一步隐藏状态和当前候选隐藏状态,计算得到隐藏状态
重置门捕获短期依赖,更新门捕获长期依赖 #重置门捕获短期依赖,更新门捕获长期依赖

长短期记忆网络:LSTM

1.主要结构
#输入门、输出门、遗忘门
当前时间步的输入与上一个时间步的隐藏状态,计算得到输入门、输出门、遗忘门
It = σ(XtWxi + Ht-1Whi + bi)
Ft = σ(XtWxf + Ht-1Whf + bf )
Ot = σ(XtWxo + Ht-1Who + bo)

#候选记忆单元–还记得候选隐藏状态吗
˜Ct = tanh(XtWxc + Ht-1Whc + bc)

#记忆单元
Ct = Ft ⊙ Ct-1 + It ⊙ ˜Ct
遗忘门作用于上一个时间步的记忆单元,加上输入门作用于当前候选记忆单元,得到当前时间步记忆 单元

#隐藏状态
Ht = Ot ⊙ tanh(Ct)
输出门作用于当前记忆单元,得到当前隐藏状态
同时传递两个变量,记忆单元和隐藏状态

深度循环神经网络

1.多层循环神经网络堆叠

2.每个隐藏状态既要传递到下一个时间步,又要传递到下一层的当前时间步
在这里插入图片描述

RNN的缺点

1.无法并行
2.无法很好的学习到全局信息

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐