首发:
part I
https://yq.aliyun.com/articles/71667
part II
https://yq.aliyun.com/articles/72036
作者介绍:Deepak Shah
Deepak Shah毕业于德克萨斯奥斯汀分校,徒步旅行爱好者,目前是深度学习\数据科学实习生,研究领域专注于深度学习、编程、金融等方面。
个人主页:http://www.deepakvshah.com/
Medium论坛:https://medium.com/@dvshah13
Github论坛:https://github.com/Dvshah13
笔记分为两个部分,本文是笔记Part I,关于深度学习笔记Part II可以看这篇博客;
目前有一些正在进行和已经完成的编码项目,这些项目与深度学习有关。写下一些笔记,简单地向大家介绍深度学习与神经网络。
Datasoap项目:https://github.com/DigitalCrafts-HTX-11-2016-Cohort/DataSoap
Digital Crafts项目:https://github.com/MarvinM579/e-commerce
神经网络
- 神经网络的结构就像任何其他网络。
- 它是一系列互连的节点,称为神经元和边缘,并将它们连接在一起。
- 主要功能是接收一组输入执行逐步复杂的计算并使用输出来解决问题。
- 分类是其中的一个应用。分类是对一组对象进行分类,而只使用描述它们的一些基本数据特征。
- 分类器的例子 - 逻辑回归,支持机器向量(SVM)、朴素贝叶斯、神经网络。
- 分类器将数据作为输入开始,通过隐藏层进行处理,并在在输出处给出置信分数。
- 神经网络由输入层,隐藏层和输出层组成。隐藏层位于输入和输出层之间。
- 神经网络可以被视为在分层网络中将分类器一起旋转的结果,因为隐藏和输出层中的每个节点都有自己的分类器。
- 从输入 - >隐藏层 - >输出的过程称为前向传播(prop)。
- 分层的感知器网络大大提高了个体感知器触发的准确性。
- 每组输入受其自身的权重和偏置影响。这就是为什么当通过相同的图层,会得到一个不同的结果。
- 每个边具有唯一的权重,并且具有唯一的偏置。神经网络的预测精度取决于其权重和偏置。
- 目标是希望精确度高、神经网每次都预测一个尽可能接近实际输出的值。
- 提高神经网络精度的过程称为训练。
- 为了训练网络,将来自前向传播的输出与已知正确的输出进行比较。代价是两者的差。
- 训练的目的是使这个代价尽可能小。
- 为此,逐步调整权重和偏置,直到预测与正确的输出密切匹配。
- 一旦训练良好,神经网络有可能每次都能进行准确的预测。
为什么要使用深度学习?
- 深度学习有能力识别令人难以置信的复杂模式,特别是神经网络。
- 计算机一直擅长重复计算并能给出详细的说明,但历来是不擅长进行模式识别。
- 在模式复杂性方面,如果只需要识别简单模式,可以使用实时SVM或逻辑回归。
- 但是随着你的数据增长到几十或更多的输入,神经网络开始表现优异。
- 随着模式变得更复杂,具有少量层的神经网络可能变得不可用。原因是因为每层中所需的节点数量随着数据中可能的模式的数量呈指数增长。这使得训练变得昂贵(时间),并且精度受损。
- 所以对于更复杂的图案(图像),唯一的实际选择是深层网络。
- 深层网络能够将复杂的模式分解成一系列更简单的模式。
- 示例:检测人脸。深层网络首先将使用边缘来检测面部的不同部分(嘴唇、鼻子、眼睛、耳朵),然后将结果组合在一起以形成整个面部。
- 使用更简单的模式作为复杂模式的构建块,这使得深层网络具有优势。
- 精度已变得越来越令人印象深刻。
- 深层网络的灵感来自于我们自己的大脑的结构。大脑的模式识别类似于深层网络。
- 唯一的缺点是深层网络需要很长时间来训练。但随着计算(GPU)的最新进展,可以更快地训练他们。
使用哪个深层网络?
- 第一步是弄清楚你是否想要构建一个分类器或者在数据中找到模式。
- 无监督学习试图在未标记的数据中找到模式。如果这是你的目标,最好的方法是受限玻尔兹曼机(RBM)或自动编码器。
- 监督学习试图使用标签数据构建分类器。可以根据应用程序选择不同的方法。
- 对于文本处理任务,如情感分析、解析和命名实体识别,使用递归神经张量网络(RNTN)或循环网络(RNN)。
- 对于图像识别,使用深信念网络(DBN)或卷积网络(CNN)。
- 对于对象识别,使用卷积网络或RNTN。
- 对于语音识别使用循环网络。
- 一般来说,具有整流线性单元(RELU)的深信念网络(DBN)和多层感知器(MLP)是分类器的好选择。
- 对于时间序列分析,最好使用循环网络。
- 之所以花费这么长的时间来实现深层网络,这是由于其训练难度高。
为什么深层网络难以训练?
- 当我们尝试使用称为反向传播的方法训练它们时,会遇到一个称为消失梯度的基本问题,有时称为爆炸梯度。
- 当发生消失梯度时,训练花费时间太长,精度受到很大影响。
- 训练神经网络时,会不断计算成本值。然后通过在整个训练过程中对所述权重和偏置进行微调来降低成本,直到获得最低可能值。
- 训练过程使用了梯度,用来测量成本相对于权重或偏置的变化而变化的速率。
- 对于复杂的机器学习问题,深层架构是最好的,并且有时是唯一的选择,如面部识别的选择。但直到2006年,没有办法训练深层网络,因为消失梯度现象。
- 想象梯度类似于斜坡,训练过程如一个球下坡。坡度越陡,球越快下降。相同的逻辑适用于深层网络的梯度。
- 在神经网络中,梯度开始衰减或消失。梯度在早期的层中小得多。因此早期的层是最慢的训练。
- 如果早期的层是错误的,由网络建立的结果将是错误的。
- 用于训练神经网络的过程称为反向传播。前向传播是从输入开始,向前移动。反向传播方向相反,它从右到左计算渐变。
- 在反向传播中,每次计算梯度时,它会使用该点所有以前的梯度。一个节点可以在整个网络中使用许多不同的梯度。
- 网络越大和越深,其变得越复杂,并且每个节点具有更多的梯度。这是因为任何节点处的梯度是到该点为止之前梯度的乘积。
- 假设矩形有两个梯度,其中一个是1/4,另外一个是1/3。二者相乘得到1/12,然后乘以1/4后得到1/48,乘积越多数字越小。
- 由于所有的这些反传最终需要太长的训练,并且精度通常非常低。直到2006年,深层网络的表现欠佳的浅网和机器学习算法,但受限玻尔兹曼机改变了这个现状。
受限玻尔兹曼机(RBM)
RBM是一种可以通过重建输入在数据中自动查找模式的方法,包含两层网络,第一层为可见层,第二层为隐藏层。可见层中的每个节点都连接到隐藏层中的节点,由于同一层中没有两个节点共享连接,所以其是受限的。
在前向过程中,RBM接受输入并将它们转换成对输入进行编码的一组数字。在反向过程中,将这组数字转换后形成重构的输入。
在这两个步骤中,权重和偏置具有非常重要的作用,其允许RBM解译输入特征之间的相互关系,并且确定哪些输入特征是最重要的。
训练过程反复重复以下三个步骤。
步骤1:在前向传递中,每个输入与单独的权重和偏置组合,结果被传递到隐藏层。
步骤2:在反向过程中,每个激活与单独的权重和偏置组合,结果被传递到可见层以用于重建。
步骤3:在可见层,使用KL发散将重建与原始输入进行比较以判断结果的质量。
使用不同的权重和偏置重复步骤1-3,直到重建与输入尽可能接近。
注意到,RBM实际上通过调整权重和偏置决定了哪些输入特性是重要的,以及如何将它们组合形成模式。
那么RBM如何能够提取特征?这与深层信念网络有关。
深层信念网络(DBN)
深层信念网络(DBN)在网络结构方面,可以被看作是RBM的堆叠,其中一个RBM的隐藏层是其上一层的可见层。
DBN训练过程:第一层RBM被训练以尽可能准确地重建其输入,其隐藏层被视为第二层RBM的可见层,并且使用来自第一层RBM的输出来训练第二层RBM。重复该过程,直到网络中的每一层都被训练。DBN表现好的原因是因为一堆RBM优于单个RBM单元。就像多层感知器能够胜过单个感知器。
为了完成训练,在模式中引入标签,并通过监督学习来微调网络。权重和偏置稍微改变,导致网络对图案感知的微小变化,同时总精度通常会小幅增加。
卷积神经网络(CNN)
近年来主导机器视觉空间,影响深远,是深度学习AI中最热门的话题之一,卷积网络一直是机器视觉项目的解决方案。
CNN结构:
第一个组成部分是卷积层。网络使用卷积的技术操作来搜索特定模式。可以把它看作是通过图像过滤特定模式的过程。该层的权重和偏置影响操作执行的过程。调整权重和偏置会影响过滤过程的有效性。CNN具有权值共享的特性,这意味着过滤器上任何给定的神经元都连接到相同数量的输入神经元,并且具有相同的权重和偏置。
接下来的两层是整流线性单元(RELU)和池化层,都有助于由卷积层发现的简单模式的建立。卷积层中的每个节点都连接到一个激活节点,使用的激活函数称为整流线性单元(RELU)。CNN使用反向训练,所以梯度消散仍然是一个问题。但由于RELU能使得梯度在每一层处或多或少保持恒定,所以允许网络被适当地训练。池化层用于维数降低。通过引入池化层,确保网络仅关注卷积和RELU发现的最相关的模式。
这三个层组合在一起可以发现复杂的模式,但网络不能理解这些模式是什么。因此,在网络末端有全连接层,以便使网络具有分类数据样本的能力。
综上所述,典型的深层CNN具有三层:卷积层,RELU层和池化层,这些层之后连接几个全连接层以支持分类。
由于CNN是深层网络,训练复杂度高,可能需要使用具有GPU的服务器进行训练;另外是受监督的学习方法限制,需要大量的用于训练的标记数据,这在现实应用中也是有挑战性的。
循环神经网络(RNN)
如果数据中的模式随时间变化,最好使用循环神经网络。RNN结构简单,内置的反馈回路允许它作为一个预测引擎,其应用非常广泛,从语音识别到无人驾驶汽车。
在前馈神经网络中,信号仅在一个方向上从输入到输出信号,每次传递一个层;而在循环神经网络中,每层的输出添加到下一个层入并且被反馈回同一层,该层通常是整个网络中的唯一层。
与前馈网不同,循环网可以接收一系列值作为输入,并且还可以产生一系列值作为输出。操作序列的能力使得RNN具有广泛的应用。当输入是单个并且输出是序列时,潜在的应用是图像字幕;具有单个输出的输入序列可以用于文档分类;当输入和输出都是序列时,可以用来逐帧分类视频;如果引入时间延迟,则可以统计地预测需求和供应链方案。
可以将RNN堆叠在彼此之上,形成一个更复杂的输出网络,然而RNN是极难训练的网络。由于RNN使用了反向传播,也会遇到梯度消失的问题。不幸的是,对于RNN而言,梯度消失呈指数恶化。其原因是每个时间步长等同于前馈网络中的整个层。有几种方法来解决该问题。目前最流行的是门控循环单位(GRU)和长期短期记忆(LSTM);另外还有梯度剪裁和陡峭门以及其它更好的优化方法。
自动编码器(AE)
当尝试找出数据集的基础结构时,自动编码器非常有用。自动编码器采用一组通常未标记的输入,并且在对其进行编码后,尝试尽可能精确地重建它们。因此,网络必须确定哪些数据特征是最重要的。
自动编码器通常包括输入层,输出层和隐藏层。在前向传递方面,有两个步骤:编码和解码。用于编码隐藏层中的特征的相同权重会被用于重建输出层中的图像。训练使用损失度量网络尝试重建输入时丢失的信息量。
并不是所有的自动编码器都是浅层的,其变体深度自动编码器在维数降低方面表现更好,它们的前身是主成分分析(PCA)。
递归神经张量网络(RNTN)
在尝试发现一组数据的分层结构时,RNTN表现更好。
RNTN有三个基本组件。分别为父组(根)、子组(叶)以及根与叶之间的连接。每个组是神经元的集合,其中神经元的数量取决于输入数据的复杂性。根连接到所有叶组,但是每个叶之间彼此不连接。从技术上讲,这三个组件形成一个二叉树。叶组接收输入,根组使用分类器来给出类别和分数。
RNTN结构看起来很简单,但其复杂性来自数据在整个网络中移动的方式。这是由于其过程是递归的。
递归示例:输入一个句子“The car is fast ”,在第一步,将前两个词分别输入叶组1和2。叶组实际上不接收字,而是字的向量(有序数字集)表示。当两个向量中的数字与词汇中的其他单词相比较时,两个单词之间的相似性编码实现特别好的结果。两个向量(由The和Car表示)通过网络移动到根,得到两个值的类别和得分。得分代表当前语法分析的质量,类别代表当前语法分析中结构的编码。网络开始递归,在下一步,第一叶组现在接收当前解析,第二叶接收句子中的下一个字。之后根组将输出三个字长的解析分数(“The,Car,Is)。重复该过程,直到将所有输入全部解析完毕,并且网络具有包含每个单词的解析树。这是RNTN的简化示例并说明了其主要思想。但是在实际应用中,通常对抗更复杂的递归过程。而不是使用句子中的下一个词用于第二叶组,RNTN将尝试所有下一个词,并且最终尝试表示整个子解析的向量。
一旦网络具有最终结构,它通过解析树回溯以便找出句子的每个部分的正确语法标签。RNTN通过将预测的句子结构与从一组标记的训练数据获得的正确句子结构进行比较来用反向传播训练。一旦训练完毕,网络将给与更多类似于其在训练中所解析的树的结构分数。
在自然语言处理中,RNTN用于语法解析和情感分析,还可用于在含有不同分量的场景中解析图像。