本文是学习莫烦python的"有趣的机器学习”一模块的笔记。
神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。
神经网络由大量的节点和之间的联系构成,负责传递信息和加工信息,神经元也可以通过训练而被强化。
神经网络有着两种比较火的分类,就是人们经常谈论的CNN和RNN
Convolutional Neural Network 卷积神经网络
这种神经网络主要应用于图片识别等计算机视觉方面,如最近很火的Alpha Go就是应用了该项技术。
我们把这个词分开来理解,卷积和神经网络。
所谓卷积,指的是计算机处理我们的图片时,不再是对单个的每个像素点进行处理,而是选择了一小块像素区域进行识别,这样的好处在于计算机可以看到一个较为连续的图形,而不只是单个的一个点,增加了神经网络对于图片的理解。
接着,计算机再对小块像素区域的边缘区域进行同样的扫描获取,不断的获取像素的边缘区域,使计算机对图片的高级结构有了更深的理解。
举个例子,例如识别人的脸的时候,假如计算机先看到了鼻子,接着会看到眼睛和嘴巴,再接着看就会看到整个人的脸部了。最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了.
在这个谷歌对于CNN的介绍中可以看到关于卷积更多的知识介绍,还未深入学习。
Recurrent Neural Network 循环神经网络
这个是针对语言分析, 序列化数据的神经网络。比如它可以对你说的一句话进行分析。
我:今天晚上我要做红烧排骨吃,所以我要去买。。。(巴拉巴拉)
我:计算机,今天晚上我要吃什么?
计算机:辣子鸡
可见在上述对话中,计算机分析错了,这个时候它就会进行学习,纠正自己的错误,最终会得到我们想要的红烧排骨的答案。
计算机会按照这段话的顺序来记忆这些信息。比如会按这个顺序来记忆这两个信息。
每次 RNN 运算完之后都会产生一个对于当前状态的描述 , state. 我们用简写 S( t) 代替, 然后这个 RNN开始分析 x(t+1) , 他会根据 x(t+1)产生s(t+1), 不过此时 y(t+1) 是由 s(t) 和 s(t+1) 共同创造的.
在上述的过程中,如果计算机学习自己错误的时候,每个环节会产生一个误差,如果误差系数小于1,就是下面的情况
误差会越来越小,容易得到正确的结果,这种问题叫做梯度消失或者梯度弥散 Gradient vanishing. 反之如果 W 是一个大于1 的数, 比如1.1 不断累乘, 则到最后变成了无穷大的数, RNN被这无穷大的数撑死了, 这种情况我们叫做剃度爆炸, Gradient exploding. 这就是普通 RNN 没有办法回忆起久远记忆的原因.
而LSTM RNN(long-short term memory Recurrent Neural Network)
为了理解这个算法大概的意思,用一个看电影的例子来说明。
电影剧情分为主线和支线。
主线就是那些很重要的内容,而在主线进行的过程中总会遇到各种各样的支线剧情,这些支线有的对主线影响很大,有的影响比较小。我们需要判断支线对主线的影响程度,从而确定是否需要对主线剧情进行修改。在经过了所有支线以后,我们就得到了一个新的,完整的主线。这个就是我们想要的东西。
而LSTM RNN 会对支线产生的影响 进行判断,从而确定是否遗忘一些主线内容,这对记忆量会有一定的优化。
LSTM 就是为了解决这个问题而诞生的. LSTM 和普通 RNN 相比, 多出了三个控制器. (输入控制, 输出控制, 忘记控制). 现在, LSTM RNN 内部的情况是这样.
他多了一个 控制全局的记忆, 我们用粗线代替. 为了方便理解, 我们把粗线想象成电影或游戏当中的 主线剧情. 而原本的 RNN 体系就是 分线剧情. 三个控制器都是在原始的 RNN 体系上, 我们先看 输入方面 , 如果此时的分线剧情对于剧终结果十分重要, 输入控制就会将这个分线剧情按重要程度 写入主线剧情 进行分析. 再看 忘记方面, 如果此时的分线剧情更改了我们对之前剧情的想法, 那么忘记控制就会将之前的某些主线剧情忘记, 按比例替换成现在的新剧情. 所以 主线剧情的更新就取决于输入 和忘记 控制. 最后的输出方面, 输出控制会基于目前的主线剧情和分线剧情判断要输出的到底是什么.基于这些控制机制, LSTM 就像延缓记忆衰退的良药, 可以带来更好的结果.
而这些神经网络的具体实现和学习,留在以后来进行。