当前位置:首页 > 阅读 > 

机器学习与深度学习概述(一)

机器学习与深度学习概述(一)

机器学习与深度学习概述(一)

18121928,计算机工程与科学学院

摘要

本文先简单描述了人工智能、机器学习和深度学习三者的先后顺序和互补关系,然后从机器学习的模型、分类着手,介绍了无监督模型和监督学习,在无监督模型中用聚类举例说明,在监督模型中对生成模型和判别模型的概念进行区分,从单个感知机无法区分异或操作的结果引入深度学习的前馈神经网络。以前馈神经网络为例,介绍了神经元、激活函数、梯度下降、损失函数等相关概念和发展。

关键词机器学习;深度学习;前馈神经网络

An overview of machine learning and deep learning

Zheng Ruoxin

18121928, Computer Engineering and Science

Abstract

This paper first briefly describes the sequence and complementary relationship of artificial intelligence, machine learning and deep learning, and then starting with the model and classification of machine learning, introduces unsupervised models and supervised learning. Clustering is used to illustrate the unsupervised model, and the concepts of generative model and discriminant model are distinguished in the supervisory model. Then, the feedforward neural network of deep learning is introduced from the result that a single perceptron cannot distinguish the XOR operation. Finally, taking the feedforward neural network as an example, the concepts and development of neuron, activation function, gradient descent, loss function and so on are introduced.

Key wordsMachine Learning; Deep Learning; Feedforward Neural Network

1 引言

人工智能已经成为一个具有众多实际应用和活跃研究课题领域,并且仍在蓬勃发展。在早期,对人类智力来说非常困难、但对计算机来说相对简单的问题得到迅速解决,比如可以通过一系列形式化的数学规则来描述的问题,最具代表性的就是棋类竞技。此时人工智能的真正挑战在于解决那些对人来说很容易执行、但很难形式化描述的任务,如人脸识别。依靠硬编码的知识体系面对的困难表明,人工智能系统需要具备自己获取知识的能力,被称为机器学习。引入机器学习使计算机能够解决涉及现实世界知识的问题,并能作出看似主观的决策。显然,从原始数据中提取高层次、抽象的特征是非常困难的有些问题如语音识别中的口音,只能通过对数据进行复杂的、接近人类水平的理解来辨识。而深度学习通过其他较简单的表示来表达复杂表示,解决了表示学习中的核心问题。

计算机难以理解原始感观输入数据的含义,如表示为像素值集合的图像。将一组像素映射到对象标识的函数非常复杂。深度学习将所需的复杂映射分解为一系列嵌套的简单映射(每个由模型的不同层描述)来解决这一难题。输入展示在可见层,然后是一系列从图像中提取越来越多抽象特征的隐藏层;模型必须确定哪些概念有利于解释观察数据中的关系。如图所示,对于给定像素,第一层可以轻易地通过比较相邻像素的亮度来识别边缘。有了第一隐藏层描述的边缘,第二隐藏层可以容易地搜索可识别为角和扩展轮廓的边集合。给定第二隐藏层中关于角和轮廓的图像描述,第三隐藏层可以找到轮廓和角的特定集合来检测特定对象的整个部分。最后,根据图像描述中包含的对象部分,可以识别图像中存在的对象。如下图,为了解释CNN的每一层学习到了什么、理解网络中间的每一层提取到特征,Matthew D. Zeiler和Rob Fergus[1]通过反卷积的方法进行可视化。随着深度网络的规模和精度提高,他们可以解决的任务也日益复杂。

图 1 图片来源于论文《Visualizing and Understanding Convolutional Networks(Matthew D. Zeiler and Rob Fergus)》

2 机器学习

机器学习算法是一种能够从数据中学习的算法,这些算法企图从大量数据中挖掘出其中隐含的规律,并用于预测或者分类。Tom Mitchell (1977)提供了一个定义:“对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指,通过经验E改进后,它在任务T上由性能度量P衡量的性能有所提升。”机器学习可以看作是寻找一个函数,输入是样本数据,输出是期望的结果,其目标是使学到的函数很好地适用于“新样本”。学到的函数适用于新样本的能力,称为泛化能力。

2.1机器学习一般步骤

图 2 机器学习一般步骤,图片源于

通常学习一个好的函数,分为以下三步:

1、针对不同的问题和任务需要选取恰当的模型,模型就是一组函数的集合。

2、确定一个衡量标准判断一个函数的好坏,也就是我们通常说的损失函数。

3、找出“最好”的函数,常用的方法有梯度下降算法,最小二乘法等。

学习得到“最好”的函数后,需要在新样本上进行测试,并且测试效果好。而这通常是难以置信的,因为数据可能是模糊的,标记也可能出错;或者是采用MNIST手写字母数据集的图片,用其实际表示的字母来标记它。为了评估机器学习算法的能力,通常可以用准确率、错误率作为模型的度量标准,通过与训练集数据分开的测试集数据评估系统性能。

2.2机器学习的分类

按照学习理论分,机器学习模型可以分为有监督学习,半监督学习,无监督学习,迁移学习和强化学习。“学习”的本质就是找到特征和标签间的关系。无监督学习算法训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。无监督学习任务,例如聚类,将数据集分成相似样本的集合。

图 3 机器学习的分类,图片源于

监督学习算法训练含有很多特征的数据集,不过数据集中的样本都有一个标签或目标。无监督学习涉及到观察随机向量的好几个样本,试图显式或隐式地学习出概率分布,或者是该分布一些有意思的性质;而监督学习包含观察随机向量及其相关联的值或向量,然后从预测。

而监督学习和无监督学习的界限通常是模糊的,学习范式还有其他变种。例如在半监督学习中,一些样本有监督目标,但其他样本没有;不是在一个固定的数据集上训练的强化学习算法会和环境进行交互,训练过程中产生反馈回路等。迁移学习就是就是把已经训练好的模型参数迁移到新的模型上以帮助新模型训练。

2.2.1无监督学习

无监督学习”不是告诉计算机怎么做,而是让机器自己去学习怎样做。聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。以最常见的Kmeans聚类算法为例,算法流程可以描述为:

1、对于未分类的样本,首先随机以k个元素作为起始质心。

2、计算每个样本跟质心的距离,并将该样本分配给距离它最近的质心所属的簇,重新计算分配好后的质心。

3、在质心改变之后,它们的位移将引起各个距离改变,因此需要重新分配各个样本。

4、在停止条件满足之前,不断重复第二步和第三步。(可以使用不同类型的停止条件。)

由于Kmeans算法假设该图是凸的和各向同性的,所以对于非圆状的簇,该算法表现不是很好。对此可以使用高斯混合模型的期望最大化聚类GMM算法,使用高斯混合模型(GMM)做聚类首先假设数据点是呈高斯分布的,相对应K-Means假设数据点是圆形的,高斯分布(椭圆形)给出了更多的可能性。我们有两个参数来描述簇的形状:均值和标准差。所以这些簇可以采取任何形状的椭圆形,因为在x,y方向上都有标准差。GMM的算法流程可以描述为:

1、选择簇的数量并随机初始化每个簇的高斯分布参数。

2、给定每个簇的高斯分布,计算每个数据点属于特定簇的概率。

3、基于这些概率,我们为高斯分布计算一组新的参数,以便使集群内数据点的概率最大化。我们使用数据点位置的加权和来计算这些新参数,其中权重是数据点属于特定簇的概率。

4、迭代地重复步骤2和3直到收敛,当分布在两次迭代中变化不大时停止。

使用GMMs有两个关键优势:首先GMMs由于含有标准差参数,簇可以采取任何椭圆形状,而不仅限于圆形。K-Means实际上是GMMs的一个特例,其中每个簇的协方差在所有维度上都接近0。其次,由于GMMs使用了概率,每个数据点可以有多个簇。因此,如果一个数据点位于两个重叠的簇的中间,我们可以简单地定义它的簇,X%属于簇1且Y%属于簇2。即GMMs支持混合的成员资格。

2.2.2无监督学习

监督式学习建立一个学习过程,通过已有的训练样本去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。这个模型就是所要学习的条件概率分布或者决策函数。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归和反向传递神经网络。

根据学习地方式可以分为两个模型:判别模型和生成模型。判别模型由数据直接学习或作为预测模型,关心对于给定的输入,应预测什么样的输出。而生成模型由数据学习,然后由,求出作为预测的模型,它表示了给定输入与产生输出的生成关系。生成模型可以还原出联合概率分布(还原数据本身相似度),而判别方法不能; 当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用; 生成模型是从大量的数据中找规律,属于统计学习;而判别模型只关心不同类型的数据的差别,利用差别来分类。

感知机是最早的监督式训练算法,是神经网络构建的基础。假如对平面中存在的n个点进行二分类,并被分别标记为“0”和“1”。此时加入一个新的点,需要寻找一种办法对其进行分类,即去找出平面上的一条线来将不同标记的数据点分开,并用这条线作为“分类器”来区分新数据点的标记。

图 4 感知机的分类器,图片源于

如上图所示,我们要找的函数则是要实现要实现“如果在线以下,输出0;在线以上,输出1。用数学方法表示,定义一个表示权重的向量和一个垂直偏移量。然后,我们将输入、权重和偏移结合可以得到如下传递函数:。这个传递函数的结果将被输入到一个激活函数中以产生标记。

图 5 感知机的异或分类,图片源于

这种简单的感知机有一个明显缺陷:只能学习线性可分函数。如简单的异或函数,都不能被线性分类器分类(如上图所示)。为了解决这个问题,我们要使用一种多层感知机,也就是——前馈神经网络:事实上,我们将要组合一群这样的感知机来创建出一个更强大的学习机器。

3 深度学习

人工智能是追求目标,机器学习是实现手段,深度学习是其中一种方法。

3.1神经元

人工神经元就是使用一个数学函数来对生物的神经元建模。一个人工神经元就是接受一个或者多个输入(训练数据),对它们加权求和,然后将加和的输入传递给激活函数,产生一个输出。在图6所示神经元的计算中,激活函数是非线性的Sigmoid函数,它将输出被限定在[0,1]之间,通常被用在浅层神经网络中当作激活函数使用。

图 6 神经元单位,图片源于《一天搞懂深度学习(李宏毅)》

对于单层的感知器进行泛华,将它们堆积起来并相互连接,如图7所示。如此得到的线性组合模型仍然只是一个线性分类器,对于复杂的非线性分类,无法正确拟合,需要引入激活函数。

3.1.1激活函数

图 7 连接单层感知器,图片源于《深度学习(中文版)》

有很多非线性函数可以用来做激活函数,从而表征不同的非线性模型。在输入同样的变量的时候,不同的激活函数有不同的响应。

常用的激活函数

3.1.2输出单元

在输出单元处,不设置激活函数,直接应用输出,被称作线性单元。针对二分类的问题,通常需要把输出限制在(0,1) 之间,表示针对某一类别的概率,通常使用sigmoid 单元:,其图像如下:

图 8 sigmoid函数图像,图片源于

图 8 sigmoid函数图像,图片源于

针对多分类问题的时候,softmax 函数可以表示 n 个不同类别上的概率分布。

softmax 函数表示

经过softmax函数作用后,相对应输入样本i分别被分类到j个类别中地概率。softmax 函数有多个输出值,当不同值之间差异变得极端的时候,输出值也可能饱和。当使用最大化对数似然的时候,同 sigmoid 函数一样,对数函数抵消 指数函数,更适合梯度下降。

3.2前馈神经网络

神经网络实际上就是将大量之前讲到的感知机进行组合,用不同的方法进行连接并作用在不同的激活函数上。神经网络既可以被用于回归问题,也可以被用于分类问题。不同的地方在于结构的最后一层。如果需要的结果是一个数值,那么就不要连接激活函数,则可得到一个连续值。

图 9 前向神经网络举例,图片源于

前馈神经网络,又名多层感知机,具有一个输入层,一个输出层,一个或多个隐含层,每一个神经元都是一个感知机。输入层的神经元作为隐含层的输入,同时隐含层的神经元也是输出层神经元的输入。每条建立在神经元之间的连接都有一个权重W(可以设置权重为0来断开这条连接)。图8所示的神经网络中有一个三神经元的输入层、一个四神经元的隐含层、一个二神经元的输出层。为了处理输入数据,将输入向量赋到输入层中。在图8中,这个网络可以计算一个3维输入向量,这些值将被传播到隐含层,通过加权传递函数传给每一个隐含层神经元,隐含层神经元再计算输出。

3.2.1前馈神经网络的超线性

如果每一个感知机都只能使用一个线性激活函数,则那么每一个神经元都是线性的,导致一个神经网络多个神经元的线性组合仍然是线性的,最终的输出也是线性拟合,无法泛化非线性的问题。正是这个原因,大多数神经网络都是使用的非线性激活函数,如对数函数、双曲正切函数等。大多数隐藏单元的区别仅仅在于激活函数的不同。

万能近似定理(universal approximation theorem)表示,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种挤压性质的激活函数的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维空间到另一个有限维空间的可测函数,前馈神经网络的导数也可以任意好的近似函数的导数。

大多数隐藏单元采用 ReLU 整流线性单元(rectified linear unit):

ReLU 整流线性单元

函数仍然非常接近线性,因此它保留了许多线性模型易于使用梯度优化的属性。缺点在于它们不能通过基于梯度的方法学习那些使激活函数为零的样本。这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“神经元死亡(Dead Neuron)”。根本原因是ReLU是所有的负值设置为0,因此,改进的渗漏整流线性单元(Leaky ReLU)给所有负值赋予一个非零的斜率,leak是一个很小的常数,这样保留了一些负轴的值,使得负轴的信息不会全部丢失。此外,随机修正线性单元(Randomized Leaky ReLU, RReLU)首次在Kaggle的NDSB比赛中被提出,其核心思想是在训练过程中,从一个高斯分布中随机选出一个参数α,损失函数对α求导数,然后再测试过程中进行修正,在测试环节就会固定下来。

大规模网络中的难题神经网络中可以有多个隐含层:这样,在更高的隐含层里可以对其之前的隐含层构建新的抽象,可以更好的学习大规模网络。但是增加隐含层的层数通常会导致两个问题:

①梯度消失:随着我们添加越来越多的隐含层,反向传播传递给较低层的信息会越来越少。实际上,由于信息向前反馈,不同层次间的梯度开始消失,对网络中权重的影响也会变小。

②过度拟合:也许这是机器学习的核心难题。简要来说,过度拟合指的是对训练数据有着过于好的识别效果,这时导至模型非常复杂。这样的结果会导致对训练数据有非常好的识别较果,而对真实样本的识别效果非常差。

3.2.2梯度下降算法

大多数常见的应用在多层感知机的监督式训练的算法都是反向传播算法。这里以MSE(均方差)举例,虽然其它的误差计算方法也可以,但MSE通常是一种较好的选择。基本的流程如下:

1、将训练样本通过神经网络进行前向传播计算。

2、计算输出误差,常用均方差:,其中t是目标值,y是实际的神经网络计算输出。

3、网络误差通过随机梯度下降的方法来最小化。

梯度下降方法很常用,但在神经网络中,输入参数是一个训练误差的曲线。算法希望每个权重的最佳值应该是误差曲线中的全局最小值,在训练过程中,权重以非常小的步幅改变(在每个样本或每小组样本训练完成后)以找到全局最小值,如图9所示。用误差仅依赖于单个参数举例,训练通常会结束在局部最小值上。但是,网络误差依赖于每一个网络权重,因而误差函数非常复杂。需要调整损失函数中的所有变量来最小化方程,通常使用损失函数的梯度来最小化误差。

如果网络拥有多层权重和转移函数,最终通过链式法则来求导所有参数的梯度。

在感知器的学习阶段,按照每个权重对误差的“责任”,按比例调整权重。在更复杂的网络中,误差的责任被分散在整个结构的所有操作之中。

图 10 依赖于单个参数的梯度下降方法,

其中我们关注global minimum(全局最小值)和local minimum(局部最小值)。

图片源于

根据导数的链式法则,每一层梯度的计算都使用到了后面一层梯度的计算结果,这种从后面一层不断计算梯度,然后传递到前面一层再计算梯度,直到输入的过程,称为反向传播(back propagation)。反向传播算法提供了一种通过利用输出误差来修正两个神经元之间权重的方法。关系本身十分复杂,但对于一个给定结点的权重修正,可用此公式:

目的是利用权重来修正梯度的方向。关键之处在于误差的导数的使用,通过反向传播能够巧妙且有效地在训练过程中修正权重并(期望)达到一个最小值。并且误差的首次计算只需对预期值和实际值做差。

图 11 梯度下降中更新参数,图片源于《一天搞懂深度学习(李宏毅)》

使用梯度下降的方法,每次迭代更新参数w和b的修正表达式为:

梯度下降的方法,迭代更新参数w和b的修正表达式

学习率可以控制在每一次迭代或者梯度下降法中步长大小;导数就是对参数w的基本更新或者改变。导数是正的,每一次都向w减小地方向走一步;导数是负的,每次都向w增大的方向走一步。通常会定义一个代价函数(损失函数),函数值越大表示精确率越不准,损失越大。对于大多数非线性问题,如果使用平方错误来衡量,代价函数通常是非凸函数,这就表示梯度下降一般不能优化至全局最小值,仅能使得函数达到一个非常小的值,不利于使用梯度下降来进行全局优化。如果是代价函数图像J(w,b)是凸象,则梯度下降算法能够保证每次迭代w和b都能向着J(w,b)全局最小化的方向进行。当目标函数是凸函数时,梯度下降法是全局的最优解,一般情况下梯度下降法的解不一定是全局最优解。所以在逻辑回归中我们会设定,一个不同的损失函数充当平方误差,这样能产生一个凸象最优问题,将使之后的优化变得更容易。因此构建一个凸象,名为交叉熵。

对于单个样本有公式:

单个样本损失函数计算公式和含义

对于多个样本,如m个,可以定义代价函数(Cost function),代价函数是m个样本的损失函数的平均值,反映了m个样本的预测输出与真实样本输出y的平均接近程度。

同样对于代价函数,目标就是迭代计算出最佳的w和b值,以使其最小化,尽可能地接近于零。

梯度下降法目前主要分为三种方法,区别在于每次参数更新时计算的样本数据量不同:批量梯度下降法(BGD, Batch Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及小批量梯度下降法(Mini-batch Gradient Descent)。

可以看到BGD和SGD是两个极端,SGD由于每次参数更新仅仅需要计算一个样本的梯度,训练速度很快,即使在样本量很大的情况下,可能只需要其中一部分样本就能迭代到最优解,由于每次迭代并不是都向着整体最优化方向,导致梯度下降的波动非常大,更容易从一个局部最优跳到另一个局部最优,准确度下降。

小批量梯度下降法结合BGD和SGD,是其折中,对于含有n个训练样本的数据集,每次参数更新,选择一个大小为m(mn)的mini-batch数据样本计算其梯度,其参数更新公式如下:

小批量梯度下降法即保证了训练的速度,又能保证最后收敛的准确率,目前的SGD默认是小批量梯度下降算法。

动量优化方法引入物理学中的动量思想,加速梯度下降,使得梯度方向在不变的维度上,参数更新变快,梯度有所改变时,更新参数变慢,这样就能够加快收敛并且减少动荡。有Momentum和Nesterov两种算法。momentum算法思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。假设表示t时刻的动量,表示动量因子,通常取值0.9或者近似值,在SGD的基础上增加动量,则参数更新公式如下:

在梯度方向改变时,momentum能够降低参数更新速度,从而减少震荡;在梯度方向相同时,momentum可以加速参数更新, 从而加速收敛。总而言之,momentum能够加速SGD收敛,抑制震荡。NAG是momentum的改进,在梯度更新时做一个矫正。

在机器学习中,学习率是一个非常重要的超参数,但是学习率是非常难确定的,虽然可以通过多次训练来确定合适的学习率,但是一般也不太确定多少次训练能够得到最优的学习率,对人为的经验要求比较高,所以是否存在一些策略自适应地调节学习率的大小,从而提高训练速度。目前的自适应学习率优化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法[2]。

AdaGrad算法前期,梯度累计平方和r比较小,则约束项较大,这样就能够放大梯度, 参数更新量变大; 随着迭代次数增多,梯度累计平方和也越来越大,即r也相对较大,则约束项变小,这样能够缩小梯度,参数更新量变小。中后期,分母上梯度累加的平方和会越来越大,使得参数更新量趋近于0,使得训练提前结束,无法学习。仍需要手工设置一个全局学习率, 如果设置过大的话,会使约束项过于敏感,对梯度的调节太大。

Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值,Adadelta其实还是依赖于全局学习率,但是作者做了一定处理,经过近似牛顿迭代法之后Adadelta已经不依赖全局学习率了。

Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点,为不同的参数计算不同的自适应学习率,也适用于大多非凸优化问题——适用于大数据集和高维空间。

4 总结

机器学习是在追求人工智能的一个手段,而深度学习是使机器学习更加强大的一种方法,这三者从概念看来,每一次的提出都是对前者的某个概念或者问题的解决。机器学习发展很早,但由于在线性表达上受限一度陷入僵局,直到神经网络的出现使得多层感知机不局限于线性划分表达,帮助更好的学习,同时推动了机器学习的进一步蓬勃发展。深度学习涵盖很多概念,每一个概念都是为了更好地学习和表达,使得学习结果更优、更“人性化”。从线性到非线性的激活函数、非凸到凸象的梯度下降算法、平方差到交叉熵损失函数等一步步发展,使得我们现在能够更好地利用神经网络,并且神经网络的可解释化也在进行中。

参 考 文 献

[1] Zeiler M.D., Fergus R. (2014) Visualizing and Understanding Convolutional Networks. In: Fleet D., Pajdla T., Schiele B., Tuytelaars T. (eds) Computer Vision – ECCV 2014. ECCV 2014. Lecture Notes in Computer Science, vol 8689. Springer, Cham.

[2]优化算法Optimizer比较和总结,

以上就是(机器学习与深度学习概述(一))全部内容,收藏起来下次访问不迷路!