一、BackPropagation

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

向量化上面的公式:

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

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

∂L∂b=δ∂L∂b=δ
∂L∂w=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,输入序列是xx,长度为TT,xtixit是输入单元ii在tt时刻的输入。
  • 对每一个隐藏单元h,其t时刻的带权输入值athaht如下所示,也就是本文第一章中的zthzht,(⊙o⊙)…好乱:
ath=∑i=1IWihxti+∑h′=1HWh′hbt−1h′aht=∑i=1IWihxit+∑h′=1HWh′hbh′t−1
  • 也就是,其带权输入值不仅与这一时刻的输入层单元值相关,还与上一时刻所有隐藏单元的激活值bt−1h′bh′t−1相关,而激活值计算如下所示,其中θhθh是激活函数(tanh,sigmoid,….),这里是一样的:
bth=θh(ath)bht=θh(aht)
  • 整个网络从t=1开始迭代,b0hbh0可以取全0,不过2006年之后也有人提出,使用非0来初始化能够提高RNN的性能和稳定性。
  • 第k个输出单元t时刻的值按照下面的公式计算,就是每个隐藏单元激活值的连接,这里并没有引入偏置向量,不过可以认为是第0个单元,不影响:
atk=∑h=1Hwhkbthakt=∑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+1h′whh′)δht=θ′(aht)(∑k=1Kδktwhk+∑h′=1Hδh′t+1whh′)

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

这样从T开始计算,算到1,就可以得出∂L∂wij∂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)

    • 输入:xtxt
    • input gate输入门:itit
    • output gate输出门:OtOt
    • forget gate遗忘门:ftft
    • 细胞状态:CtCt
    • 单元激活值:htht

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

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

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

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

3.预处理

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

4.双向LSTM

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

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

  • 正向过程:

  • 反向过程:

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/

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

  1. 《Sequence to Sequence Learning with Neural Networks》阅读笔记

    Abstract DNNs 可用于各种复杂的学习任务并取得很好的效果,但是 DNNs 不能用于序列到序列的映射.这篇论文提出了一种端到端(end-to-end)的神经网络模型,来学习这种映射关系.作者 ...

  2. A Critical Review of Recurrent Neural Networks for Sequence Learning-论文(综述)阅读笔记

    A Critical Review of Recurrent Neural Networks for Sequence Learning 阅读笔记 //2022.3.31 下午15:00开始 论文地址 ...

  3. LSTM对比GRU:Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling

    先说结论:不论是machine translation还是music datasets.speech signal modeling,GRU和LSTM的performance差别不大,但GRU往往比L ...

  4. Paper:RNN之《Generating Sequences With Recurrent Neural Networks用循环神经网络生成序列》的翻译和解读

    Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...

  5. Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记

    Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras 序列分类是一种预测建模问题,其中在空间 ...

  6. 【论文研读】【医学图像分割】【FCN+RNN】Recurrent Neural Networks for Aortic Image Sequence Segmentation with ...

    [FCN+RNN]Recurrent Neural Networks for Aortic Image Sequence Segmentation with Sparse Annotations Ab ...

  7. 循环神经网络(RNN, Recurrent Neural Networks)介绍

    循环神经网络(RNN, Recurrent Neural Networks)介绍   循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural ...

  8. All of Recurrent Neural Networks (RNN)

    - notes for the Deep Learning book, Chapter 10 Sequence Modeling: Recurrent and Recursive Nets. Meta ...

  9. 第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks)

    第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...

  10. [C5W1] Sequence Models - Recurrent Neural Networks

    第一周 循环序列模型(Recurrent Neural Networks) 为什么选择序列模型?(Why Sequence Models?) 在本课程中你将学会序列模型,它是深度学习中最令人激动的内容 ...

最新文章

  1. creo减速器建模实例_Proe/Creo建模实例教程----乌比莫斯之环教程(表达式扫描特征)...
  2. RobotFramework+jenkins持续化集成及高级操作API
  3. java 字符串驻留_java String 以及字符串直接量 与 字符串驻留池 ...
  4. Supervisor使用教程
  5. python的jsonpath_python 提取json数据的jsonPath介绍及简单使用
  6. 《程序员代码面试指南》第八章 数组和矩阵问题 在行列都排好序的矩阵中找数...
  7. HDU 4548 美素数 素数题解
  8. Metal:对 iOS 中 GPU 编程的高度优化的框架
  9. linux手动安装unzip_怎样在Linux下搭建接口自动化测试平台?
  10. 自动化决策流程实现资产组合利润最大化
  11. 十二、添加RD 授权角色
  12. js控制的动画,显示隐藏(元素,动画,显示隐藏)
  13. 软件开发需求分析内容
  14. 解决Unable to find a single main class from the following candidates
  15. 智慧停车系统是怎么运行的?
  16. 在线职业教育APP开发,技能快速掌握的管家
  17. android加载efi分区,高通Android UEFI XBL 代码流程分析
  18. 计算机18个专业方向
  19. php短网址生成代码,一个php短网址的生成代码(仿微博短网址)
  20. Linux Kernel 5.1 正式版发布;Ubuntu 19.10 命名 Eoan Ermine

热门文章

  1. BZOJ_5369_[Pkusc2018]最大前缀和_状压DP
  2. Vue格式化CSS样式
  3. 怎么给计算机D盘分区,C盘分区太大怎么调整分区的大小?
  4. Java之约瑟夫环问题
  5. 计算机科普扫盲——固态硬盘
  6. 屏幕快照之旅:Android 4.2 Jelly Bean的10个新功能
  7. 数字绘画技术,从数位板到数位屏
  8. ZBrush如何结合数位板雕刻模型
  9. C# 原始的方法写入xml文件的代码
  10. 怎么查看linux系统防火墙,如何查看linux系统中防火墙的状态