BP,RNN 和 LSTM暨《Supervised Sequence Labelling with Recurrent Neural Networks-2012》阅读笔记

一、BackPropagation

  • wljk wjkl:表示第 l1 l−1层第k个神经元到第 l l层第j个神经元的连接权重;
  • blj bjl:表示第 l l层第j个神经元的偏置;
  • zlj zjl:表示第 l l层第j个神经元的带权输入;
  • alj ajl:表示第 l l层第j个神经元的激活值;
  • σ σ:表示一个激活函数(sigmoid,relu,tanh);
zlj=kwljkal1k+blj zjl=∑kwjklakl−1+bjl
alj=σ(kwljkal1k+blj)=σ(zlj) ajl=σ(∑kwjklakl−1+bjl)=σ(zjl)

向量化上面的公式:

al=θ(wlal1+bl)=θ(zl) al=θ(wlal−1+bl)=θ(zl)​
  • L(W,b,x,y):表示损失函数,其中y是正确值,x是输入,下面是二次方损失函数的计算;
L(W,b,x,y)=12NN||yal||2 L(W,b,x,y)=12N∑N||y−al||2
  • 阿达马(Hadamard)乘积,表示两个同维度向量a,b按元素相乘的结果向量,用 ab a⊙b表示。
  • 反向传播BP计算的目标: Lwljk ∂L∂wjkl Lblj ∂L∂bjl,也就是L对所有参数的偏导数。
  • δlj δjl:表示第 l l层第j个单元的残差。也就是 Lzlj ∂L∂zjl
  • δLj=LaLjσ(zLj) δjL=∂L∂ajLσ′(zjL):表示顶层(输出层,假设是第L层)的残差,也就是损失函数对输出层的带权输入的偏导数。这个公式也可以进行向量化,为以下的形式:
δL=aLσ(zL) δL=▽aL⊙σ′(zL)
  • 当使用二次损失函数的时候, δl=(aLy)σ(zL) δl=(aL−y)⊙σ′(zL)
  • 使用上一层的残差表示当前层的残差:
δl=((wl+1)Tδl+1)σ(zl) δl=((wl+1)Tδl+1)⊙σ′(zl)
  • 最后,利用链式求导求出来的结果:
Lwljk=Lzljzljwljk=δljal1k ∂L∂wjkl=∂L∂zjl∂zjl∂wjkl=δjlakl−1
Lblj=Lzljzljblj=δlj ∂L∂bjl=∂L∂zjl∂zjl∂bjl=δjl

向量化以上的结果,得到:

Lb=δ ∂L∂b=δ
Lw=ainδout ∂L∂w=ainδout

二、RNN

  • RNN能够从之前的输入中映射出输出,具有一定程度的记忆能力,能够从之前的输入中存储网络的内部状态。
  • 有足够多隐藏单元的RNN能够模拟任何Sequence-to-Sequence的映射。

1.RNN的forward pass

注:下面这段使用的符号和上面的符号定义又有些不同,没办法,下面这篇论文就是这么用的。

Graves A. Supervised Sequence Labelling with Recurrent Neural Networks[M]. Springer Berlin Heidelberg, 2012.

  • 一个I个输入单元、H个隐藏单元和K个输出单元的RNN,输入序列是 x x,长度为 T T, xti xit是输入单元 i i t t时刻的输入。
  • 对每一个隐藏单元h,其t时刻的带权输入值 ath aht如下所示,也就是本文第一章中的 zth zht,(⊙o⊙)…好乱:
ath=i=1IWihxti+h=1HWhhbt1h aht=∑i=1IWihxit+∑h′=1HWh′hbh′t−1
  • 也就是,其带权输入值不仅与这一时刻的输入层单元值相关,还与上一时刻所有隐藏单元的激活值 bt1h bh′t−1相关,而激活值计算如下所示,其中 θh θh是激活函数(tanh,sigmoid,….),这里是一样的:
bth=θh(ath) bht=θh(aht)
  • 整个网络从t=1开始迭代, b0h bh0可以取全0,不过2006年之后也有人提出,使用非0来初始化能够提高RNN的性能和稳定性。
  • 第k个输出单元t时刻的值按照下面的公式计算,就是每个隐藏单元激活值的连接,这里并没有引入偏置向量,不过可以认为是第0个单元,不影响:
atk=h=1Hwhkbth akt=∑h=1Hwhkbht

2.RNN的Output层和损失函数

按照实际情况选择RNN输出层的激活函数(sigmoid,softmax)和损失函数(cross_entropy)。

RNN应用在时间序列分析。

3.RNN的backward pass

现在计算出cross_entropy损失函数L关于输出y的偏导数,下一步就是计算L关于权重的偏导数。

已经提出的两种算法,可以有效的计算RNN的权重偏导数

  • real time recurrent learning(RTRL,1987)
  • backpropagation through time(BPTT,1990)

这里对BPTT进行介绍,因为它的思想更简单,而且计算效率更高。

BPTT也是通过链式法则的应用进行权值训练,但是对于递归神经网络,一个隐藏层单元激活值的影响不仅仅通过通往输出层的连接,还可以通过对下一时刻(timestep)隐藏层的影响。所以,残差 δth δht的计算也应该包含这两条线路,如下所示:

δth=θ(ath)(k=1Kδtkwhk+h=1Hδt+1hwhh) δht=θ′(aht)(∑k=1Kδktwhk+∑h′=1Hδh′t+1whh′)

这里的残差计算方式和第一章相同, δtj=Latj δjt=∂L∂ajt。其中a是带权输入。

这样从T开始计算,算到1,就可以得出 Lwij ∂L∂wij,注意在这里整个网络在所有时刻使用的是同一权重。

4.双向RNN

BRNN,1997、1999年提出。能够使用输入序列当前时刻后面的内容作为上下文。使用两个隐藏层,一个从前往后一个从后向前,两个隐藏层互不连接。

  • 前向过程

从1到T,前向隐藏层的前向过程,存储每个t的激活值。

从T到1,后向隐藏层的前向过程,存储每个t的激活值。

对于所有t,使用前两步计算的激活值,进行输出层的前向过程。

  • 后向过程

对所有t,计算输出层的 δ δ值。

对T到1,利用 δ δ进行前向隐藏层的后向过程。

对1到T,利用 δ δ进行后向隐藏层的前向过程。

BRNN可以应用于像蛋白质结构预测(2001)、时间序列任务、自动听写等应用中。

5.序列雅克比矩阵(sequential Jacobian原谅我不知道它怎么翻译)

6.训练神经网络的一些tricks

  • 梯度下降算法:批量vs在线,梯度下降、动量momentum
    • 一些批量梯度下降算法:RPROP、quickprop、conjugate gradients、L-BFGS
    • 在线学习算法:stochastic meta-descent
  • 泛化方式
    • early stopping
    • 输入增加高斯噪声
    • 权重增加高斯噪声
  • 输入的表示,输入的标准化(把输入向量化为均值0,标准差1)很重要。
  • 权重的初始化,小而随机

三、LSTM

1.网络结构

  • Memory Block(Memory Cell)
    • 输入: xt xt
    • input gate输入门: it it
    • output gate输出门: Ot Ot
    • forget gate遗忘门: ft ft
    • 细胞状态: Ct Ct
    • 单元激活值: ht ht

盗个图过来吧,文字还是有点描述不清楚,以后别记不得了。

这里写图片描述

ft=σ(Wf[ht1,xt]+bf) ft=σ(Wf⋅[ht−1,xt]+bf)
it=σ(Wi[ht1,xt]+bi) it=σ(Wi⋅[ht−1,xt]+bi)
C~t=tanh(WC[ht1,xt]+bC) C~t=tanh(WC⋅[ht−1,xt]+bC)
Ct=ftCt1+itC~t Ct=ft⋅Ct−1+it⋅C~t
Ot=σ(Wo[ht1,xt]+bo) Ot=σ(Wo⋅[ht−1,xt]+bo)
ht=tanh(Ct)Ot ht=tanh(Ct)⋅Ot

2.LSTM的变种和进一步研究

  • 2000年,增加了窥视孔连接Peephole,所有或者部分公式中的$[h{t-1},x_t] 替换为[C{t-1},h_{t-1},x_t]$。
  • 配对了遗忘门和输入门,即 it=1ft it=1−ft
  • 2014年,Gated Recurrent Unit(GRU),合并了细胞状态和单元激活值,合并输入门和遗忘门为更新门,模型更加简单。
  • Depth Gated RNNs, Clockwork RNNs等
  • 注意力机制、Grid LSTM等

3.预处理

预处理能够通过采样减少输入序列的长度,从而使得LSTM能够更好的进行处理,上下文信息更少。

4.双向LSTM

5.LSTM的正向(激活)和反向(BPTT)过程

下面的过程都是带peephole的LSTM。输入公式还是不如手写方便,还是手写吧。。。

  • 正向过程:

LSTM正向过程

  • 反向过程:

forward pass

6.参考

http://blog.csdn.net/ycheng_sjtu/article/details/48792467

原文地址: 
http://cairohy.github.io/2016/11/23/machine-learning/BP-RNN-%E5%92%8C-LSTM%E6%9A%A8%E3%80%8ASupervised-Sequence-Labelling-with-Recurrent-Neural-Networks-2012%E3%80%8B%E9%98%85%E8%AF%BB%E7%AC%94%E8%AE%B0/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值