【猫猫】【8/17更新】深度学习与神经网络从入门到精通
落叶兄 2020-8-15原创 机器学习科创茶话
中文摘要
本文主要介绍以下内容:
1. 神经网络基础:单层感知器、线性神经网络、BP网络、hopfield神经网路、径向基函数神经网络、主成分分析神经网络与支持向量机。2.神经网络进阶:自编码器、稀疏自编码器、玻尔兹曼机、受限玻尔兹曼机、递归神经网络、自组织竞争神经网络。3.深度学习网络:深度置信网络、卷积神经网络、深度残差网络。4.神经网络的应用:数据挖掘、机器学习、OCR、CV、NLP、Alphago。5.
深度学习网络的落地实践:caffe、tensorflow
为了加快我的出稿速度与大家的阅读速度,我码字的时候会尽可能地简介,只在难于理解的部分详细讲述。所以在本文的绝大多数位置,文字将以仅比梗概稍详细些的形式出现。

    ​根据我个人的学习经验,我认为在具有一些初等的高等数学知识的基础下,即使对一个novice通过本文以较佳水平完成上述学习目标也只需大概30个小时的有效学习时间。请大家树立信心,神经网络与深度学习并不是一个困难的知识,在学习的过程中你会发现许多赫赫有名的模型其实是拍脑门想出来的,其实是非常易于学习与应用的。
关键词
机器学习神经网络教程
AIdeep learningBPnueral network

猫猫原创,转载需先征得本人同意。

这篇教学文档我准备主要讲述这样几个问题:

  1. 神经网络基础:单层感知器、线性神经网络、BP网络、hopfield神经网路、径向基函数神经网络、主成分分析神经网络与支持向量机。

  2. 神经网络进阶:自编码器、稀疏自编码器、玻尔兹曼机、受限玻尔兹曼机、递归神经网络、自组织竞争神经网络

  3. 深度学习网络:深度置信网络、卷积神经网络、深度残差网络

  4. 神经网络的应用:数据挖掘、机器学习、OCR、CV、NLP、Alphago

  5. 用matlab神经网络工具箱快速应用神经网络。深度学习网络的落地实践:caffe、tensorflow。

结构:

目录

一、导言 2

    1. 学习步骤 2

    2. 参考书 3

    3. 人工神经网络的70 4


二、人工神经网络与单层感知器 4


三、BP神经网络 4


四、基于动力学的神经网络 5

    1. Hopfield 5

    2. 玻尔兹曼机 5

    3. RBM 5

    4. RBMBP的结合:DBN 5


五、卷积神经网络 5

    1.从一个例子开始:手写数字的识别:LeNet-5 5

        1)图像处理之前的问题 6

        2LeNet-5的结构 6

        3LeNet-5的训练问题 6

    2.继续探究另一个深度CNN继续:AlexNet 6

    3.CNN的训练问题 6

    4.CNN的数学背景 6


六、深度残差网络 6

    1.向更多层网络进军 6

        1)深度革命 7

        2)传统深度学习的困难 7

        3)深度残差网络的思路:捷径 7

    2.深度残差网络 7

    3.深度残差网络的数学基础 7

    4.batch normalization 7


七、AlphaGo 8

    1.计算机博弈 8

    2.AlphaGo的结构 8

        1)快速走子网络 8

        2CNN 8

        3)强化学习 8

        4)价值网络 8

        5)蒙特卡洛树搜索 8


八、递归神经网络RNNrecurrent neural networks 8

    1. 背景 9

    2. 长期依赖(Long-Term Dependencies)问题 11

    3. LSTM 网络 13

    4. LSTM 的核心思想 16

    5. 逐步理解 LSTM 17

    6. LSTM 的变体 20

    7. 结论 24

    8. 致谢 24


九、CVNLP实战 25

    1.matlab神经网络工具箱快速建立神经网络 25




一、导言

    为了加快我的出稿速度与大家的阅读速度,我码字的时候会尽可能地简介,只在难于理解的部分详细讲述。所以在本文的绝大多数位置,文字将以仅比梗概稍详细些的形式出现。

    本文的教授紧密结合论文与案例。老老实实看人工智能祖师们的原著有助于真正领悟大师思想。

    根据我个人的学习经验,我认为在具有一些初等的高等数学知识的基础下,即使对一个novice通过本文以较佳水平完成上述学习目标也只需大概30个小时的有效学习时间。请大家树立信心,神经网络与深度学习并不是一个困难的知识,在学习的过程中你会发现许多赫赫有名的模型其实是拍脑门想出来的,其实是非常易于学习与应用的。

1. 学习步骤

image.png

Figure1.tutorial structure


2. 参考书

《人工神经网络理论、设计与应用》——韩力群

《神经网络与深度学习》——著名睡觉书

《MATLAB神经网络43个案例分析》——王小川


3. 人工神经网络的70


(1)思维的本质是什么?能不能仿真?冯·诺依曼结构的计算机与人脑区别很大,“电脑”不是“人工脑”,模拟人思维的真“电脑”的实现不仅能帮助人完成更多的任务,而且能验证现在对人脑的解剖学研究是否正确


(2)詹姆斯:心理学家,提出神经——联想理论


(3)McCulloch&Pitts:MP模型

a.证明了神经元遵循“全或无”的工作方式(兴奋、抑制)<——>对比于计算机的0/1工作方式。

b.证明了只要拥有足够简单的神经元,在这些神经元相互连接并同步运行的情况下,可以模拟任何计算函数。

c.开创了人工神经网络的研究


(4)Hebb学习规则 1949 《行为组织学》生理学家

a.提出”连接主义“

b.引入“学习假说”,即两个神经元之间的重复激活将使其连接权值加强。

c.成为学习系统和自适应系统的灵感源泉。


(5)Rosenblatt罗森布莱特 1957 提出感知器的概念


二、人工神经网络与单层感知器


三、BP神经网络


四、基于动力学的神经网络

1. Hopfield

2. 玻尔兹曼机

3. RBM

4. RBM与BP的结合:DBN




五、卷积神经网络



参考论文

《gradient-based learning applied to document recognition》

further reading

《notes on convalutional neural networks》

《understanding convolutional neural networks》

《understanding deep convolutional networks》


1.从一个例子开始:手写数字的识别:LeNet-5


(1)图像处理之前的问题


(2)LeNet-5的结构


(3)LeNet-5的训练问题


2.继续探究另一个深度CNN继续:AlexNet


3.CNN的训练问题


4.CNN的数学背景



六、深度残差网络


参考论文

《Deep residual learning for image recognition》

《Identity mappings in deep residual networks

further reading

《highway networks》

《training very deep networks》

另一个理解深度残差网络的思路:将它看成LSTM的变种:https://www.jianshu.com/p/18838bb1db75


1.向更多层网络进军


(1)深度革命

IMageNet比赛的历年冠军情况


年份2010201120122013201420142015
网络名浅层网络浅层网络AlexNet
VGGGoogLeNetResNet
层数

881922152
错误率28.225.816.411.77.36.73.57

正是由于深度残差网络的创造,使得ResNet的层数跨越了一个数量级


(2)传统深度学习的困难

退化问题:随着层数的增高,错误率不降反增。

训练问题:BP算法固有的训练权值变化量减小问题。

召唤新结构的出现


(3)深度残差网络的思路:“捷径


2.深度残差网络


3.深度残差网络的数学基础


4.batch normalization



七、AlphaGo


参考论文

《a survey of monte carlo tree search method》

1.计算机博弈


2.AlphaGo的结构


(1)快速走子网络


(2)CNN


(3)强化学习


(4)价值网络


(5)蒙特卡洛树搜索



八、递归神经网络RNN(recurrent neural networks)

(这里偷个懒,在摘抄自一篇很好的文章(译自 Christopher Olah 的博文)上整理)


扩展阅读:

高维RNN:Grid LSTM 的两篇论文

1. 偏理论:http://blog.sina.com.cn/s/blog_5309cefc0102wbcv.html

2. 偏代码实现:https://blog.csdn.net/yiyele/article/details/81912437


1. 背景

        人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。
        传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。
RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。

1.png

RNN 包含循环


        在上面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。
        这些循环使得 RNN 看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:

2.png

展开的 RNN

        链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。
        并且 RNN 也已经被人们应用了!在过去几年中,应用 RNN 在语音识别,语言建模,翻译,图片描述等问题上已经取得一定成功,并且这个列表还在增长。我建议大家参考 Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks 来看看更丰富有趣的 RNN 的成功应用。
        而这些成功应用的关键之处就是 LSTM 的使用,这是一种特别的 RNN,比标准的 RNN 在很多的任务上都表现得更好。几乎所有的令人振奋的关于 RNN 的结果都是通过 LSTM 达到的。这篇博文也会就 LSTM 进行展开。

2. 长期依赖(Long-Term Dependencies)问题

        RNN 的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果 RNN 可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。
        有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 —— 因此下一个词很显然就应该是 sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN 可以学会使用先前的信息。

3.png

不太长的相关信息和位置间隔

        但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France... I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。
        不幸的是,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。

4.png

相当长的相关信息和位置间隔

        在理论上,RNN 绝对可以处理这样的 长期依赖 问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN 肯定不能够成功学习到这些知识。Bengio, et al. (1994)等人对该问题进行了深入的研究,他们发现一些使训练 RNN 变得非常困难的相当根本的原因。
        然而,幸运的是,LSTM 并没有这个问题!

(猫猫注:我猜测,这个长距离依赖所产生的问题与BP神经网络过深所面对的梯度变化下降类似,过长的链造成前面的神经元信息难以训练,即对于最终的权值包含的长链信息的学习的能力有限。<如果不对,敬请批评指正>)

3. LSTM 网络

    Long Short Term Memory 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在很多问题,LSTM 都取得相当巨大的成功,并得到了广泛的使用。
        LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!
        所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。

5.png

标准 RNN 中的重复模块包含单一的层

        LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。

6.png

LSTM 中的重复模块包含四个交互的层

        不必担心这里的细节。我们会一步一步地剖析 LSTM 解析图。现在,我们先来熟悉一下图中使用的各种元素的图标。

7.png

LSTM 中的图标

        在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

4. LSTM 的核心思想

        LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。
        细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

8.png

数据通路

        LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

9.png

门结构

        Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!

        LSTM 拥有三个门,来保护和控制细胞状态。

5. 逐步理解 LSTM

        在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取h_t-1x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态C_t-1中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
        让我们回到语言模型的例子中来基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语

10.png

决定丢弃信息

        下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,C_t,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
        在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

11.png

确定更新的信息

        现在是更新旧细胞状态的时间了,C_t-1更新为C_t。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
我们把旧状态与f_t相乘,丢弃掉我们确定需要丢弃的信息。接着加上i_t * C_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
        在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。

12.png

更新细胞状态

        最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
        在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化。

13.png

输出信息

6. LSTM 的变体

image.png

现代LSTM

        我们到目前为止都还在介绍正常的 LSTM。但是不是所有的 LSTM 都长成一个样子的。实际上,几乎所有包含 LSTM 的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。
        其中一个流形的 LSTM 变体,就是由 Gers & Schmidhuber (2000) 提出的,增加了 “peephole connection”。是说,我们让 门层 也会接受细胞状态的输入。

14.png

peephole 连接

        上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。

        另一个变体是通过使用 coupled 忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。

15.png

coupled 忘记门和输入门

        另一个改动较大的变体是 Gated Recurrent Unit (GRU),这是由 Cho, et al. (2014) 提出。它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。

16.png

GRU

        这里只是部分流行的 LSTM 变体。当然还有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik, et al. (2014) 提出的 Clockwork RNN。
        要问哪个变体是最好的?其中的差异性真的重要吗?Greff, et al. (2015) 给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz, et al. (2015) 则在超过 1 万种 RNN 架构上进行了测试,发现一些架构在某些任务上也取得了比 LSTM 更好的结果。

17.png

Jozefowicz等人论文截图

7. 结论

        刚开始,我提到通过 RNN 得到重要的结果。本质上所有这些都可以使用 LSTM 完成。对于大多数任务确实展示了更好的性能!
        由于 LSTM 一般是通过一系列的方程表示的,使得 LSTM 有一点令人费解。然而本文中一步一步地解释让这种困惑消除了不少。
        LSTM 是我们在 RNN 中获得的重要成功。很自然地,我们也会考虑:哪里会有更加重大的突破呢?在研究人员间普遍的观点是:“Yes! 下一步已经有了——那就是注意力!” 这个想法是让 RNN 的每一步都从更加大的信息集中挑选信息。例如,如果你使用 RNN 来产生一个图片的描述,可能会选择图片的一个部分,根据这部分信息来产生输出的词。实际上,Xu, et al.(2015)已经这么做了——如果你希望深入探索注意力可能这就是一个有趣的起点!还有一些使用注意力的相当振奋人心的研究成果,看起来有更多的东西亟待探索……
        注意力也不是 RNN 研究领域中唯一的发展方向。例如,Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起来也是很有前途。使用生成模型的 RNN,诸如Gregor, et al. (2015) Chung, et al. (2015) 和 Bayer & Osendorfer (2015) 提出的模型同样很有趣。在过去几年中,RNN 的研究已经相当的燃,而研究成果当然也会更加丰富!

8. 致谢

I’m grateful to a number of people for helping me better understand LSTMs, commenting on the visualizations, and providing feedback on this post.
I’m very grateful to my colleagues at Google for their helpful feedback, especially Oriol Vinyals,Greg CorradoJon ShlensLuke Vilnis, and Ilya Sutskever. I’m also thankful to many other friends and colleagues for taking the time to help me, including Dario Amodei, and Jacob Steinhardt. I’m especially thankful to Kyunghyun Cho for extremely thoughtful correspondence about my diagrams.
Before this post, I practiced explaining LSTMs during two seminar series I taught on neural networks. Thanks to everyone who participated in those for their patience with me, and for their feedback.

From:http://www.jianshu.com/p/9dc9f41f0b29

###

作者:wangduo

出处:http://www.cnblogs.com/wangduo/

本博客中未标明转载的文章归作者wangduo和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

###



九、CV与NLP实战

1.用matlab神经网络工具箱快速建立神经网络

运行>>nntool

image.png


[修改于 6 个月前 - 2020-08-18 09:54:59]

Leonard
6个月19天前
1楼

坐等开播,吃瓜学习。希望能带着例子讲。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
leoo0
6个月18天前
2楼

要有点基础才能理解。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
落叶兄作者
6个月16天前 修改于 6个月16天前
3楼

LSTM两篇很好的文章,一片国内,一片国外,两个角度

国外:https://www.cnblogs.com/wangduo/p/6773601.html

国内:https://www.jianshu.com/p/dcec3f07d3b5(推荐这个,讲的很明白)


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
qwe
6个月15天前
4楼

感觉简单应用tensorflow之类的偏难,我就看着书没学会。matlab工具箱或者keras之类的好很多,虽然后者我也被numpy的使用拦住了


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
布布卡
6个月15天前
5楼

tensorflow上docker,环境有配置好的 ,用起来很方便。matlab新版用起来也不错,比较友好。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
落叶兄作者
6个月14天前
6楼
引用qwe发表于4楼的内容
感觉简单应用tensorflow之类的偏难,我就看着书没学会。matlab工具箱或者keras之类的...

最好上手的就是matlab-nntool了,现在pytorch也比较流行,而且上手很容易

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}