循环神经网络RNN\GRU\LSTM(理论篇)
循环神经网络、LSTM\GRU\总结自李沐老师的动手学深度学习,供自己回顾用
循环神经网络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.无法很好的学习到全局信息
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)