循环神经网络RNN
详细代码实现见同专栏下博文
-
给网络增加短期记忆能力的方法
- 延时神经网络:
- 在前馈网络中的每个非输出层都添加一个延时器,记录神经元的最近几次活性值。
- 在第 t 个时刻,第 𝑙 层神经元的活性值依赖于第 𝑙 − 1 层神经元的最近𝐾 个时刻的活性值,即 𝒉𝑡(𝑙) = 𝑓(𝒉𝑡(𝑙−1) ,𝒉𝑡-1(𝑙−1) , ⋯ , 𝒉𝑡−𝐾(𝑙−1)),其中𝒉𝑡(𝑙) ∈ ℝ𝑀𝑙 表示第 𝑙 层神经元在时刻 𝑡 的活性值。
- 有外部输入的非线性自回归模型NARX
- 自回归模型AR:用一个变量 𝒚𝑡 的历史信息来预测自己. 𝒚𝑡 = 𝑤0 + ∑ 𝑤𝑘𝒚𝑡−𝑘 + 𝜖𝑡 ,其中𝐾为超参数,𝑤0 , ⋯ , 𝑤𝐾 为可学习参数,𝜖𝑡 ∼ 𝒩(0, 𝜎2 )为第𝑡 个时刻的噪声, 方差和时间无关。
- NARX是自回归模型的扩展:在每个时刻 𝑡 都有一个外部输入𝒙𝑡,产生一个输出𝒚𝑡,NARX通过一个延时器记录最近𝐾𝑥次的外部输入和最近𝐾𝑦次的输出,第 t 个时刻的输出 𝒚𝑡 为 𝒚𝑡 = 𝑓(𝒙𝑡 , 𝒙𝑡−1, ⋯ , 𝒙𝑡−𝐾𝑥 , 𝒚𝑡−1, 𝒚𝑡−2, ⋯ , 𝒚𝑡−𝐾𝑦 ),其中𝑓(⋅)表示非线性函数,可以是一个前馈网络,𝐾𝑥 和𝐾𝑦 为超参数。
- 循环神经网络:使用带自反馈的神经元,能够处理任意长度的时序数据。
- 给定一个输入序列 𝒙1∶𝑇 = (𝒙1 , 𝒙2 , ⋯ , 𝒙𝑡 , ⋯ , 𝒙𝑇),循环神经网络通过下面公式更新带反馈边的隐藏层的活性值𝒉𝑡: 𝒉𝑡 = 𝑓(𝒉𝑡−1, 𝒙𝑡 ),其中𝒉0 = 0,𝑓(⋅)为一个非线性函数,可以是一个前馈网络。
- 隐藏层的活性值𝒉𝑡也叫状态或隐状态。
- 也具有通用近似定理,且图灵完备。
- 延时神经网络:
-
具体应用
-
序列到类别模式
假设样本𝒙1∶𝑇 = (𝒙1 , ⋯ , 𝒙𝑇)为一个长度为𝑇 的序列,输出为一个类别 𝑦 ∈ {1, ⋯ , 𝐶}。将样本 𝒙 按不同时刻输入到循环神经网络中,得到不同时刻的隐藏状态 𝒉1 , ⋯ , 𝒉𝑇,并将 𝒉𝑇 看作整个序列的最终表示输入给分类器𝑔(⋅)进行分类,即 𝑦 = 𝑔(𝒉𝑇)。也可以对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示,即 𝑦 = 𝑔 (1/𝑇 ∑𝒉𝑡)
-
同步的序列到序列模式:序列标注(严格的对应关系和长度关系)
-
异步的序列到序列模式:编码器-解码器
先编码后解码:输入为长度为 𝑇 的序列 𝒙1∶𝑇 = (𝒙1 , ⋯ , 𝒙𝑇), 输出长度为𝑀 的序列𝑦1∶𝑀 = (𝑦1 , ⋯ , 𝑦𝑀),先将样本𝒙按不同时刻输入到一个循环神经网络(编码器)中,并得到其编码𝒉𝑇,再用另一个循环神经网络(解码器)得到输出序列𝑦̂。
𝒉𝑡 = 𝑓1 (𝒉𝑡−1, 𝒙𝑡 ) ∀𝑡 ∈ [1, 𝑇]
𝒉𝑇+𝑡 = 𝑓2 (𝒉𝑇+𝑡−1, 𝒚̂ 𝑡−1) ∀𝑡 ∈ [1, 𝑀]
𝑦̂𝑡 = 𝑔(𝒉𝑇+𝑡) ∀𝑡 ∈ [1, 𝑀]
其中 𝑔(⋅) 为分类器,𝒚̂𝑡 为预测输出 𝑦̂𝑡 的向量表示
-
-
单隐藏层简单循环网络
令向量𝒙𝑡 ∈ ℝ𝑀 表示在时刻 𝑡 时网络的输入,𝒉𝑡 ∈ ℝ𝐷 表示隐藏层状态(即隐藏层神经元活性值),则𝒉𝑡 不仅和当前时刻的输入𝒙𝑡 相关,也和上一个时刻的隐藏层状态𝒉𝑡−1相关。简单循环网络在时刻𝑡 的更新公式为 𝒛𝑡 = 𝑼𝒉𝑡−1 + 𝑾𝒙𝑡 + 𝒃, 𝒉𝑡 = 𝑓(𝒛𝑡 )。
-
参数学习(以同步的序列到序列为例)
输入为长度为 𝑇 的序列 𝒙1∶𝑇 = (𝒙1 , ⋯ , 𝒙𝑇), 输出长度为𝑇 的序列𝑦1∶𝑇 = (𝑦1 , ⋯ , 𝑦𝑇),定义时刻 𝑡 的损失函数为 ℒ𝑡 = ℒ(𝑦𝑡 , 𝑔(𝒉𝑡)),整个序列的损失函数为 ℒ = ∑ℒ𝑡 。
- 随时间反向传播(BPTT)
- 实时循环学习(RTRL)
- 随时间反向传播(BPTT)
-
基于门控的循环神经网络
-
长程依赖问题:
-
梯度爆炸问题 :权重衰减或梯度截断
-
梯度消失问题:更改模型或𝒉𝑡 = 𝒉𝑡−1 + 𝑔(𝒙𝑡 , 𝒉𝑡−1; 𝜃)(但是存在梯度爆炸和记忆容量问题)
-
-
长短期记忆网络和门控循环单元网络
-
-
长短期记忆网络LSTM
-
新的内部状态:LSTM网络引入一个新的内部状态 𝒄𝑡 ∈ ℝ𝐷 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 𝒉𝑡 ∈ ℝ𝐷。内部状态 𝒄𝑡 通过下面公式计算:
𝒄𝑡 = 𝒇𝑡 ⊙ 𝒄𝑡−1 + 𝒊𝑡 ⊙ 𝒄̃𝑡 , 𝒉𝑡 = 𝒐𝑡 ⊙ tanh( 𝒄𝑡 )
其中𝒇𝑡 ∈ [0, 1]𝐷、𝒊𝑡 ∈ [0, 1]𝐷 和𝒐𝑡 ∈ [0, 1]𝐷 为三个门来控制信息传递的路径;⊙为向量元素乘积;𝒄𝑡−1 为上一时刻的记忆单元;𝒄̃𝑡 ∈ ℝ𝐷 是利用非线性函数得到的候选状态𝒄̃ = tanh(𝑾𝑐𝒙𝑡 + 𝑼𝑐𝒉𝑡−1 + 𝒃𝑐 ) ,在每个时刻 𝑡,LSTM网络的内部状态𝒄𝑡 记录了到当前时刻为止的历史信息。
-
-
门控机制
-
记忆:循环神经网络中的隐状态 𝒉 存储了历史信息,可以看作一种记忆。在简单循环网络中,隐状态每个时刻都会被重写,因此可以看作一种短期记忆。在神经网络中,长期记忆可以看作网络参数,隐含了从训练数据中学到的经验,其更新周期要远远慢于短期记忆。而在 LSTM 网络中,记忆单元 𝒄 可以在某个时刻捕捉到某个关键信息,并有能力将此关键信息保存一定的时间间隔。记忆单元 𝒄 中保存信息的生命周期要长于短期记忆 𝒉,但又远远短于长期记忆, 长短期记忆是指长的 “短期记忆”。 因此称为长短期记忆。
-
无遗忘门的LSTM 网络
-
门控循环单元网络
-
深层循环网络
- 堆叠循环神经网络
- 双向循环神经网络
- 堆叠循环神经网络
-
扩展到图结构:递归神经网路和图神经网络