以深度学习为背景,重点介绍卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络(LSTM)等深度学习模型的原理、结构与计算方法,并给出每个模型详细的理论推导和基于Python的代码实现。
深度学习
1:深度学习概念
深 度 学 习 ( Deep Learning , DL ) 是 机 器 学 习 ( Machine Learning,ML)领域中一个新的研究方向,它被引入机器学习使其更接近于 人工智能目标 。
深度学习的概念来源于人工神经网络 (Artificial Neural Network,ANN),所以又称深度神经网络 (Deep Neural Networks,DNN)。
人工神经网络主要使用计算机的计算单元和存储单元模拟人类大脑神经系统中大量的神经细胞(神经元)通过神经纤维传导并相互协同工作的原理。
深度学习在一定程度上等同于多层或者深层神经网络,深度学习通过算法构造多层神经网络,经过多层处理,逐渐将初始的“低层”特征表示转 化为“高层”特征表示,再用自学习模型便可完成复杂的分类等学习任务。因此,可将深度学习理解为深度特征学习或深度表示学习。
深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能技术前进了一大步。
典型的深度学习模型有卷积神经网络(Convolutional Neural Networks,CNN)、循环神经网络(Recurrent Neural Network,RNN)、长短时记忆网络(Long Short-Term Memory , LSTM ) 、 深度置信网络 ( Deep Belief Network,DBN)模型等。
2:深度学习原理
相比传统的机器学习,深度学习有更好的特征学习能力。
在传统的机器学习算法中需要手工编码特征,相比之下深度学习对特征的识别由算法自动完成,机器学习的这个处理过程不仅耗时,而且还需要较高的专业知识和一定的人工参与才能完成。
深度学习通过大数据技术直接从数据中自动学习各种特征并进行分类或者识别,做到全自动数据分析。
在解决复杂问题时(如目标识别、 自然语言处理等),传统机器学习算法通常先把问题分成几块,一个一个地解决好之后再重新组合起来,但是深度学习则是一次性地端到端(end-to-end)解决。
深度学习与传统机器学习的区别与联系
相较于传统的浅层学习,深度学习的不同之处在于:
(1)强调了模型结构的深度,通常有5层、6层,甚至十几层的隐层节点,如图
(2)明确了特征学习的重要性,也就是说,通过逐层特征变换, 将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能刻画数据丰富的内在信息。
通过设计建立适量的神经元计算节点和多层运算层次结构,选择合适的输入层和输出层,通过网络的学习和调优,建立起从输入到输出的函数关系。虽然不能100%找到输入与输出的函数关系,但是可以尽可能地逼近现实的关联关系,进而使用训练成功的网络模型实现我们对复杂事务处理的自动化要求。
3:深度学习训练
如果对深度学习中的所有层同时训练,时间复杂度会很高。如果每次只训练一层,偏差就会逐层传递。
因此在2006年,Geoffrey Hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简 单地说就是分两步进行:一是每次训练一层网络;二是调优,使原始表示X向上生成的高级表示R和该高级表示R向下生成的X′尽可能一致,方法是:
(1)首先逐层构建单层神经元,这样每次训练一个单层网络。
(2)当所有层训练完后,Hinton使用Wake-Sleep算法进行调优。
将除最顶层的其他层间的权重变为双向,这样最顶层仍然是一个单层神经网络,而其他层则变为图模型。
向上的权重用于“认知”, 向下的权重用于“生成”。
然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确地复原底层的节点。
例如顶层的一个节点表示人脸,那么所有人脸的图像应该激活这个节点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。
深度学习训练过程
1)自下而上的非监督学习
采用无标定数据或有标定数据分层训练各层参数,这一步可被看作一个无监督训练过程,也可被看作特征学习过程。
先用数据训练第1 层,训练时先学习第1层的参数(这一层可被看作得到一个使输出和输入差别最小的3层神经网络的隐藏层)。由于模型容量的限制及稀疏性约束,使得所得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征。
在学习并得到第N-1层后,将N-1层的输出作为第N层的输入,训练第N层,由此分别得到各层的参数。
2)自顶而下的监督学习
基于第1步得到的各层参数来进一步调整多层模型的参数,这一步是一个有监督训练过程。
第1步类似神经网络的随机初始化初值过程, 由于深度学习的第1步不是随机初始化,而是通过学习输入数据的结构得到,因而这个初值更接近全局最优,从而能够取得更好的效果,所以深度学习效果好在很大程度上归功于第1步的特征学习过程。
人工神经网络基础
人工神经网络是基于生物学中脑认知神经网络的基本原理,模仿 大脑神经系统工作原理所创建的数学模型,它有并行的分布处理能力、高容错性、自我学习等特征。
1:神经元感知器
人工神经网络中最基本的单元叫神经元,又叫感知器,它是模拟人脑神经系统的神经元(分析和记忆)、树突(感 知)、轴突(传导)的工作原理,借助计算机的快速计算和存储来实现。
人工神经网络中一个基本的神经元由以下几个部分组成:
2 : 学习方式
神经网络的学习方式很多,根据有无数据训练可以将其分为3大类。
(1)有监督学习
将训练样本的数据加入到神经网络的输入端, 将期望答案和实际输出做差,可以得到误差信号,通过误差信号来调整权值大小,以此来优化模型输出。
(2)无监督学习
首先并不给定标准数据样本,而是直接将网络置于环境之中,由自身根据数据特征进行自动学习。
(3)半监督学习
输入信息介于有监督和无监督之间,不需要给定标准数据样本,但需要对网络的输出做出评判,以此来调整网络参数。
3:学习规则
反向传播过程求偏导
4 : 激活函数
激活函数又叫激励函数,主要作用是对神经元所获得的输入进行非线性变换,以此反映神经元的非线性特性。常用的激活函数有以下几种类型。
1.线性激活函数
其中,k和c为常量。线性函数常用在线性神经网络中。
2.符号激活函数
3.Sigmoid激活函数
Sigmoid激活函数又称为S形函数,是最为常见的激活函数,它将区间(-∞,+∞)映射到(0,1)的连续区间。 特别是f(x)关于x处可导,并且有f(x)的导数f′(x)=f(x) (1-f(x))。
5: 梯度下降法
梯度下降法是神经网络模型训练中最常用的优化算法之一。
梯度下降法是一种致力于找到函数极值点的算法。
机器学习其实就是不断改进模型参数,以便通过大量训练步骤将损失最小化。
有了这个概念,将梯度下降法应用于寻找损失函数(Loss Function) 或代价函数(Cost Function)的极值点,便构成依据输入数据的模型 进行自我优化的学习过程。
常见的梯度下降法主要有批量梯度下降法、随机梯度下降法和小批量梯度下降法等。
由上面的BP算法推导过程可知,每一次更新权值都需要遍历训练数据中的所有样本,这样的梯度算法就是批梯度下降法(BGD)。
假设数据样本非常大,例如达到数以百万计,那么计算量也将非常巨大。
因此,深度学习算法一般不采用常规的梯度下降法算法,而是选用随机梯度下降法(SGD)
SGD和BGD的区别。由图(a)可以看出,在SGD算法中,每次更新权值w的迭代,只计算一个 样本数据。这样对于一个具有数百万样本的训练数据而言,每完成一次遍历,就会对权值w更新数以百万次,这将大大提升运算效率。由于存在样本的噪声和随机性,每次更新权值w并不一定会按照损失函数E 减少的方向行进。尽管算法存在一定随机性,但对于大量的权值w更新来说,大体上是沿着梯度减少的方向前进,所以最终也会收敛到最小值的附近。
从图(b)可以看出,BGD算法一直向着函数最小值的最低点前进,而SGD明显随机了很多,但从总体上看,仍然是向最低点逼近的。 假设有30万个样本,对于BGD而言,每次迭代需要计算30万个样本 才能对参数进行一次更新,需要求得最小值可能需要多次迭代(假设这里是10)。而对于SGD,每次更新参数只需一个样本,因此若使用这 30万个样本进行参数更新,则参数会被更新(迭代)30万次,而这期 间,SGD保证能够收敛到一个合适的最小值上了。也就是说,在收敛 时,BGD计算了10×30万次,而SGD只计算了1×30万次。 有时候随机性并非坏事,因此SGD效率有时候会比较高。如果我们 研究的目标函数是一个凸函数,沿着梯度反方向总能找到全局唯一的 最小值。但是对于非凸函数来说,存在许多局部最小值。SGD算法的随机性有助于逃离某些不理想的局部最小值,从而获得一个更好的网络架构模型。
6 : 交叉熵损失函数
在神经网络中较常采用交叉熵(Binary Cross Entropy)作为损失函数,设p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还 有一个好处,使用Sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。
交叉熵损失函数的Python实现代码
def binary_crossentropy(t,o):
return-(t?tf.log(o+eps)+(1.0-t)?tf.log(1.0-o+eps))
7 : 过拟合
机 器 学 习 中 的 一 个 重 要 问 题 便 是 模 型 的 泛 化 能 力 (Generalization Ability),即模型对新鲜样本的适应能力。泛化能力强的模型才是好模型。当模型在训练数据上表现良好但对不可见 数据的泛化能力很差时,可能发生过拟合(Overfitting)。若在训练集 表 现 差 , 则 在 测 试 集 表 现 同 样 会 很 差 , 这 可 能 是 由 欠 拟 合 (Underfitting)导致的。
过拟合常见的解决办法:
(1)在神经网络模型中,可使用权值衰减的方法,即每次迭代过 程中以某个小因子降低每个权值。
(2)选取合适的停止训练标准,使对机器的训练在合适的程度。
(3)保留验证数据集,对训练成果进行验证。
(4)获取额外数据进行交叉验证。
(5)正则化,即在进行目标函数或代价函数优化时,在目标函数 或代价函数后面加上一个正则项,一般有L1正则与L2正则等。
卷积神经网络
卷积神经网络结构
典型的卷积神经网络结构主要分为输入层、卷积层、池化层、全连接层、分类层
(1)输入层(Input Layer)
输入层是整个神经网络的输入, 在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。 其中三维矩阵的长和宽代表了图像的大小,深度代表了图像的色彩通道(Channel)。例如黑白图的深度为1,而在RGB色彩模式下,图像的深度为3。从输入层开始,卷积神经网络通过不同的神经网络架构将上 一层的三维矩阵转换为下一层的三维矩阵,直到最后的全连接层。
(2)卷积层(Convolution Layer)
卷积层是一个网络最重要的部分,卷积层试图将神经网络中的每小块进行更加深入地分析从而 获得抽象度更高的特征。一般来说,通过卷积层处理过的节点矩阵会变得更深。
(3)池化层(Pooling Layer)
池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。通过池化层可以进一步缩 小最后全连接层中节点的个数,从而达到减小整个神经网络参数的目 的。
(4)全连接层(Full Connection Layer)
在经过多轮卷积和 池化之后,在卷积神经网络的最后一般会有1~2个全连接层给出最后 的分类结果。经过几轮卷积和池化之后,可以认定图像中的信息已经 被抽象成信息含量更高的特征。我们可以将卷积层和池化层看作自动图像特征提取的过程,在特征提取之后,仍要用全连接层来完成分类问题。
(5)Softmax层。Softmax层主要用于分类问题,通过Softmax层 可以得到当前输出属于不同种类的概率分布情况。该层主要采用 Softmax函数,又称归一化指数函数,是对数概率回归在C个不同值上的推广。
Softmax函数的Python实现代码: