机器学习中的目标函数总结

2018-09-17 18:16:52 浏览数 (1)

几乎所有的机器学习算法最后都归结为求解最优化问题,以达到我们想让算法达到的目标。为了完成某一目标,需要构造出一个“目标函数”来,然后让该函数取极大值或极小值,从而得到机器学习算法的模型参数。如何构造出一个合理的目标函数,是建立机器学习算法的关键,一旦目标函数确定,接下来就是求解最优化问题,这在数学上一般有现成的方案。如果你对最优化算法感兴趣,可以阅读SIGAI之前的公众号文章“理解梯度下降法”,“理解牛顿法”,“理解凸优化”,“机器学习中的最优化算法总结”。本文的侧重点是对目标函数的构造进行总结。

下面我们将介绍机器学习中一些典型的目标函数的构造思路,并对各种算法的目标函数做一个总结。按照用途和要解决的问题,机器学习算法可以分为有监督学习,无监督学习,强化学习3种类型。其中,有监督学习又进一步细分为分类问题与回归问题,无监督学习算法分为聚类问题和数据降维问题。概括起来,各类算法要解决的核心问题是:

对于有监督学习中的分类问题与回归问题,机器学习算法寻找一个映射函数:

为输入的样本数据预测出一个实数值或类别标签。不同的是,分类问题要确定样本的类别,即回答“是什么”的问题;回归问题要预测出一个实数值,即回答“是多少”的问题。例如,如果要确定一张图像是猫还是狗,则为分类问题,算法的输入为图像,输出为类别编号。如果我们要根据一个人的年龄、学历、行业等信息预测他/她的收入,则属于回归问题。二者都是要确定上面这种形式的函数。

对于无监督学习的聚类问题,机器学习算法要寻找一个集合的划分,将样本集D划分成多个不相交的子集:

每个样本属于这些子集中的一个,因此可以概括为解决“怎么分的问题”,与分类问题不同的是,这里没有人工事先定义好的类别,因此也没有训练过程。例如,如果要将一批新闻划分为不同类型的,就属于聚类问题,这里没有实现定义好的类,算法自己完成划分,这些类可能是政治、体育、娱乐、经济、军事等。

对于数据降维问题,机器学习算法要寻找一个映射函数,将一个高维向量映射成一个低维向量:

但要尽可能的保留之前向量的一些重要信息。

对于强化学习,机器学习算法要为每种状态s下确定一个动作a来执行,即确定策略函数,使得执行这些动作之后得到我们预期的结果:

执行动作后会得到奖励,这个预期的结果是让奖励最大化。例如,用强化学习来实现自动驾驶,要根据当前的路况来决定怎么开车,这里的路况就是状态,开车就是动作,通过控制汽车去我们想去的目的地,这就是目标。

上面这些算法要完成的目标是一个抽象的概念,具体实现时,要通过一个“目标函数”来体现,算法要通过让目标函数取极大值或极小值来确定模型的参数。

有监督学习

首先来看有监督学习,要确定一个映射函数,这个函数带有参数,而参数则通过训练样学习得到。假设映射函数为:

其中θ是模型的参数,如何确定它的值,是训练算法的核心。一般来说,我们称有监督学习的目标函数为“损失函数”,它通过模型对每个训练样本x的预测值y与训练样本的真正标签值y来构造。其含义是,如果算法预测错了,则有损失,因此该函数反映了映射函数的预测值与样本真实标签值之间的误差。让误差最小化,就是让损失函数最小化:

某些有监督的机器学习算法拟合的是概率密度函数或者某一概率分布,此时需要根据样本来确定概率分布的参数。在学习概率论与数理统计时我们知道,确定一个概率分布的参数最常用的是最大似然估计,它求解如下的似然函数最大化问题:

求解函数极值时需要对参数求导,这种连乘形式的函数求导不方便,因此对似然函数取对数,得到对数似然函数:

这类问题的核心是根据一组样本来估计概率分布的参数,使得在参数θ取最优值的时候,这组样本出现的概率最大。下面针对分类问题和回归问题,分别总结常用的目标函数。

分类问题

对于分类问题,预测函数的输出值是离散化的类别标签。给定一组训练样本,在训练时的目标是让这组训练样本尽量被正确的分类,这对应于经验风险最小化的思想。

感知器算法的是最简单的线性分类器,它的目标是让所有样本尽可能分类。对于二分类问题,线性分类器的判别函数为:

样本的标签值为 1或-1,分别对应正样本和负样本。如果线性函数预测出来的值和样本的真实标签值不同号,则预测错误;如果同号,则预测正确。要将预测错误最小化,只需求解如下最优化问题即可:

对于每个训练样本,如果预测正确,则损失函数为负,否则为正。这样我们就构造出了一个容易求解的损失函数。

对于二分类或多分类问题,都可以用欧氏距离作为分类的损失函数。对于多分类问题,一般不直接用类别编号作为预测值,而是为类别进行向量化编码,如one-hot编码。此时损失函数定义为:

在人工神经网络发展的早期,这种函数被广泛使用,但后来对于多分类问题,更多的采用交叉熵损失函数。在后面我们会介绍此函数,至于原因,在SIGAI之前的公众号文章“【群话题精华】五月集锦——机器学习和深度学习中一些值得思考的问题”中曾经做过说明,感兴趣的读者可以阅读这篇文章。

线性判别分析(LDA)是一种有监督的数据降维算法,它的目标是最大化类间差异,最小化类内差异。数据经过投影之后,在低维空间里,同类样本聚集在一起,不同类的样本相距尽可能远。类内差异用每个类的方差来衡量,类间差异用各个类的类中心之间的距离来衡量,二者的比值为我们要优化的目标。由此构造出如下损失函数:

求解这一问题最后归结为求解矩阵的特征值问题。

前面介绍的感知器算法的目标函数,欧氏距离损失,代表的都是经验风险,即在训练样本集上让误差最小化。这样做的泛化性能不一定好,还有一种做法为结构化风险最小化,典型代表是支持向量机。

支持向量机不仅要让所有训练样本尽可能被正确分类,还要让分类间隔最大化,根据解析几何中点到超平面的距离公式,我们构造出了它的优化目标:

这个优化问题还带有不等式约束。SVM推导的细节,SIGAI之前写过一篇公众号文章,后面将做更详细的讲解,敬请期待。

我们可以从另一个角度解释支持向量机的优化目标函数,即合页损失函数。合页损失函数定义为:

这和前面一种表述是等价的。此时,目标函数的前半部分充当正则化项,后半部分充当真正的损失函数,用于对违反约束的样本进行惩罚。

前面说过,对于输出概率值的模型,可以采用最大似然估计来估计模型的参数。典型的代表是logistic回归。对于二分类问题,如果样本的类别标签值为1和0,则对数似然函数为:

将logistic回归推广到多分类问题,即softmax回归,它输出一个样本属于每个类的概率值。因此,训练样本的标签值为一个向量,如果样本属于某一类,该分量为1,其他分量为0。损失函数根据标签向量与预测出的概率向量构造,使用的是softmax交叉熵,定义为:

而交叉熵损失定义为:

它在深度神经网络中被广泛使用。

AdaBoost算法训练时优化的目标函数为指数损失函数,它根据强分类器的输出值F(x)与样本的标签值构造:

在这里,样本的标签值为-1或 1,对应于负样本和正样本。强分类器通过加法模型构造,求解时每次优化一个弱分类器和它的权重,具体做法在之前的公众号文章“理解AdaBoost算法”中已经介绍,由此可以推导出AdaBoost的训练算法。

神经网络尤其是深度学习中使用的损失函数种类繁多,除了传统的欧氏距离之外,还有近几年流行的交叉熵,以及其他函数,下表列出了常用的一些损失函数以及它们的导数:

在这里,求导是对神经网络的预测数据进行的。损失层是神经网络训练时的最后一层,它也只用于训练阶段。在实现反向传播算法时,它是梯度反向传播的起点。

需要说明的是,对前面介绍的很多损失函数,我们都可以加上正则化项,得到新的损失函数,以减轻过拟合。

回归问题

回归问题直接预测出所需要的函数值。最常用的是欧氏距离损失,它直接反映预测值与真实值之间的误差:

除此之外,还有其他的函数可以考虑,如接下来要介绍的L1光滑的损失函数。如果预测函数是线性函数,则为线性回归,这是最简单的回归算法,其损失函数为:

如果加上L1和L2正则化项,则分别得到LASSO回归和岭回归。

多任务损失函数

在一些实际应用中,机器学习算法要同时解决多个问题。例如对于目标检测问题,其目目标是检测出图像中各种大小、各种位置、各种类写的目标,即要同时判断出每个目标的类型(是人,是车,还是其他类型的东西)以及目标所在的位置、大小:

目标的位置和大小一般用一个矩形框来定义目标,即其外接矩形,用参数表示为(x, y, w, h),其中(x, y)是矩形左上角的坐标,w为宽度,h为高度。前者是一个分类问题,后者是一个回归问题。为了同时完成这些目标,设计出了多任务损失函数。此函数由两部分构成,第一部分为分类损失,即要正确的判定每个目标的类别;第二部分为定位损失,即要正确的的确定目标所处的位置。以Fast R-CNN为例,它的损失函数为:

前半部分为分类损失,可以采用交叉熵完成多分类任务。后半部分为定位损失,确定矩形框的大小和位置,但并没有使用欧氏距离,而是采用了L1光滑的损失函数,定义为:

在之后的Faster R-CNN,YOLO,SSD等算法中,都采用了这种多任务损失函数的思路。

除此之外,在其他地方也有多任务损失函数的影子,例如人脸识别。卷积神经网络用于人脸识别任务时,主要的作用是为每个人提取出有区分度的特征。要确保对同一个人的不同表情、姿态、角度的人脸图像所提取出的特征向量不要有太大的差异;但同时要确保提取的特征向量能区别不同的人。基于这一思路,DeepID2设计出了一种多任务的损失函数:

损失函数的前半部分为softmax交叉熵,用于区分不同的人,即解决多分类问题。后半部分为人脸验证损失,其目标是同一个人的特征向量尽量接近,不同人的特征向量尽量距离得远。

此后的各种人脸识别算法,大多采用了各种新设计的损失函数,例如Center loss的目标是让不同人的特征向量能被正确的分类,而同一个人的特征向量离这个人所有特征向量的类中心尽可能接近。这样就迫使神经网络提取出的特征向量能有效的区分不同人,而且同一个人的特性向量分布尽量紧密。下图是用这一算法提取出的人脸特征向量通过PCA投影到2D平面后的结果:

从上图可以看出,通过加大中心损失的系数,同一个人的特征最后收缩在很小的一个范围内,不同人的特征向量中间以一个很大的间距被分开,以此增加分类算法的泛化性能。

数据生成模型

数据生成模型生成符合某种分布的随机数,而这种随机数服从何种概率分布,我们是不知道的,无法写成概率密度函数的表达式来。生成对抗网络是深度生成模型的典型代表。

生成对抗网络由一个生成模型与一个判别模型构成,前者先用样本进行学习,然后可以生成和真实样本服从相同分布的样本数据。后者对生成模型生成的样本以及真实样本进行判定,确定一个样本是生成的,还是真实的。

训练的目标是,生成模型要尽可能的欺骗判别模型,即让判别模型把自己生成的样本判定为真实样本;判别模型的目标是准确的区分出真实样本和生成的样本,尽可能的把生成模型产生的模型鉴别处理,即判定为假。由此构造出如下的目标函数:

目标函数由两部分构成。后半部分只用于生成模型,要让生成模型产生的样本,被判别模型判定为真,即让D(G(z))尽可能接近于1,即让目标函数取极小值。整个目标函数都用于判别模型,前半部分要让判别模型将真实样本尽量判别为真,后半部分要让判别模型将生成的样本尽量判别为假,即让目标函数取极大值,这类似于而分类问题的交叉熵。

无监督学习

无监督学习分为聚类问题与数据降维问题两种类型,它们优化的目标完全不同,我们分别进行介绍。

聚类

聚类算法将一组样本划分成多个类,确保同一类中的样本差异尽可能小,而不同类的样本之间尽量不同。可以基于这一思想构造损失函数:

其含义是每一类样本距离它的类中心要近,可以理解为这类似于每个类的方差。所有类的方差之和要尽可能小。这就是k均值算法要优化的目标。

数据降维

数据降维算法要确保将向量投影到低维空间之后,仍然尽可能的保留之前的一些信息,至于这些信息是什么,有各种不同理解,由此诞生了各种不同的降维算法。

主成分分析的优化目标是最小化重构误差,即用投影到低维空间中的向量近似重构原始向量,二者之间的误差要尽可能的小。最小化重构误差的目标为:

这里有附带约束条件,即投影的基向量ej类似的,自动编码器也采用了这一思想。自动编码器是一种特殊的神经网络,由编码器和解码器两部分构成。前者对输入数据进行映射,得到编码后的向量;后者对编码后的向量进行重构,恢复出原始向量。解码器只在训练时使用,训练完成之后,只需要编码器这一部分,用于对输入数据进行降维或特征提取。其训练时的目标函数为:

即神经网络训练时的标签值和输入向量值相同。这和PCA非常类似,不同的是神经网络的映射是非线性的。

某些非线性降维算法如流形学习,采用了更复杂的目标函数。以等距映射为例,它采用了测地距离来构造损失函数,投影到低维空间之后,要保持这种距离信息,由此得到优化目标函数为:

流形学习的原理在之前的SIGAI公众号文章“流形学习概述”中已经介绍,感兴趣的读者可以阅读。

强化学习

最后来说强化学习。不同于有监督学习和无监督学习,强化学习的目的是寻找出一个策略函数,使得在每种状态下,按照该函数确定的动作执行,最后得到的累计回报最大化。之所以要计算累计回报是因为执行完一个动作之后要进入一个新的状态,在这个新的状态下又要执行动作。这里的累计回报用状态价值函数或者动作价值函数来定义,这是递归的定义。

由于各个状态之间存在关联,因此求解算法不同于其他机器学习算法。关于强化学习的原理,SIGAI将在后面的公众号文章中详细介绍。

这篇文章更详细的讲解已经由SIGAI录制成了视频,本文作者亲自讲述,精心剪辑制作。如果你对文章的话题感兴趣,可以登录SIGAI的官网:

www.sigai.cn

注册账号之后,即可观看视频并下载讲解的PPT。由于要支付高昂的讲师费、剪辑费,以及服务器研发、硬件与带宽等开销,因此我们向各位同学象征性的收取一部分成本费,本视频的价格为19.9元,以维持SIGAI后续的内容创作和研发。如果你喜欢我们的文章,希望能支持我们!SIGAI将持续输出高质量的内容与产品。

0 人点赞