2.5 代价函数
2.5.1 为什么需要代价函数
1. 为了得到训练逻辑回归模型的参数,需要一个代码函数,通过训练代价函数来得到参数。
2. 用于找到最优解的目的函数。
2.5.2 代价函数作用原理
在回归问题中,通过代价函数来求解最优解,常用的是平方误差代价函数。假设函数图像如图2-4所示,当参数发生变化时,假设函数状态也会随着变化。
图2-4 函数示意图
想要拟合图中的离散点,我们需要尽可能找到最优的A�和 来使这条直线更能代表所有数据。如何找到最优解呢,这就需要使用代价函数来求解,以平方误差代价函数为例,假设函数为 。平方误差代价函数的主要思想就是将实际数据给出的值与拟合出的线的对应值做差,求出拟合出的直线与实际的差距。在实际应用中,为了避免因个别极端数据产生的影响,采用类似方差再取二分之一的方式来减小个别数据的影响。因此,引出代价函数: 。
最优解即为代价函数的最小值 。如果是1个参数,代价函数一般通过二维曲线便可直观看出。如果是2个参数,代价函数通过三维图像可看出效果,参数越多,越复杂。当参数为2个时,代价函数是三维图像,如下图2-5所示。
图2-5 代价函数三维图像
2.5.3 为什么代价函数要非负
目标函数存在一个下界,在优化过程当中,如果优化算法能够使目标函数不断减小,根据单调有界准则,这个优化算法就能证明是收敛有效的。只要设计的目标函数有下界,基本上都可以,代价函数非负更为方便。
2.5.4 常见代价函数
(1)二次代价函数(quadratic cost):
其中, 为代价函数, 表示样本, 表示实际值, 表示输出值, 表示样本的总数。使用一个样本为例简单说明,此时二次代价函数为: 。假如使用梯度下降法(Gradient descent)来调整权值参数的大小,权值 和偏置 的梯度推导如下: , ,其中, 表示神经元的输入, 表示激活函数。权值 和偏置 的梯度跟激活函数的梯度成正比,激活函数的梯度越大,权值 和偏置 的大小调整得越快,训练收敛得就越快。
注:神经网络常用的激活函数为sigmoid函数,该函数的曲线如下图2-6所示。
图2-6 sigmoid函数曲线
如上图所示,对0.88和0.98两个点进行比较:假设目标是收敛到1.0。0.88离目标1.0比较远,梯度比较大,权值调整比较大。0.98离目标1.0比较近,梯度比较小,权值调整比较小。调整方案合理。假设目标是收敛到0。0.88离目标0比较近,梯度比较大,权值调整比较大。0.98离目标0比较远,梯度比较小,权值调整比较小。调整方案不合理。原因:在使用sigmoid函数的情况下,初始的代价(误差)越大,导致训练越慢。
(2)交叉熵代价函数(cross-entropy):
其中, 表示代价函数, 表示样本, 表示实际值, 表示输出值, 表示样本的总数。权值 和偏置 的梯度推导如下: 。
当误差越大时,梯度就越大,权值 和偏置 调整就越快,训练的速度也就越快。二次代价函数适合输出神经元是线性的情况,交叉熵代价函数适合输出神经元是S型函数的情况。
(3)对数似然代价函数(log-likelihood cost):对数似然函数常用来作为softmax回归的代价函数。深度学习中普遍的做法是将softmax作为最后一层,此时常用的代价函数是对数似然代价函数。对数似然代价函数与softmax的组合和交叉熵与sigmoid函数的组合非常相似。对数似然代价函数在二分类时可以化简为交叉熵代价函数的形式。
在tensorflow中: 与sigmoid搭配使用的交叉熵函数:tf.nn.sigmoid_cross_entropy_with_logits()。 与softmax搭配使用的交叉熵函数:tf.nn.softmax_cross_entropy_with_logits()。 在pytorch中: 与sigmoid搭配使用的交叉熵函数:torch.nn.BCEWithLogitsLoss()。 与softmax搭配使用的交叉熵函数:torch.nn.CrossEntropyLoss()。
对数似然函数:
我们将似然函数作为机器学习模型的损失函数,并且用在分类问题中。这时似然函数是直接作用于模型的输出的(损失函数就是为了衡量当前参数下model的预测值predict距离真实值label的大小,所以似然函数用作损失函数时也是为了完成该任务),所以对于似然函数来说,这里的样本就成了label集(而不是机器学习意义上的样本集X了),这里的参数也不是机器学习model的参数,而是predict值。
其实作为损失函数的似然函数并不关心你当前的机器学习model的参数是怎样的,毕竟它此时所接收的输入只有两部分:1、predict;2、label。3、分布模型(predict服从的分布)。
显然这里的label就是似然函数的观测值,即样本集。而它眼里的模型,当然就是predict这个随机变量所服从的概率分布模型。它的目的,就是衡量predict背后的模型对于当前观测值的解释程度。而每个样本的predict值,恰恰就是它所服从的分布模型的参数。
比如此时我们的机器学习任务是一个4个类别的分类任务,机器学习model的输出就是当前样本X下的每个类别的概率,如predict=[0.1,0.1,0.7,0.1],而该样本的标签是类别3,表示成向量就是label=[0,0,1,0]。那么label=[0,0,1,0]就是似然函数眼里的样本,然后我们可以假设predict这个随机变量背后的模型是单次观测下的多项式分布,(因为softmax本身是基于多项式分布的)。
回顾:
伯努利分布,也叫做(0,1)分布,伯努利可以看成是将一枚硬币(只有正反两个面,代表两个类别)向上扔出,出现某个面(类别)的概率情况,因此其概率密度函数为:
这是理解似然函数做损失函数的关键!另外,伯努利分布的模型参数就是其中一个类别的发生概率。
而二项分布呢,就是将伯努利实验重复n次(各次实验之间都是相互独立的)。
而多项式分布呢,就是将二项分布推广到多个面(类别)。
所以,单次观测下的多项式分布就是伯努利分布的多类推广!即:
其中, 代表类别数。 代表向量形式的模型参数,即各个类别的发生概率,如p=[0.1, 0.1, 0.7, 0.1],则p1=0.1,p3=0.7等。即,多项式分布的模型参数就是各个类别的发生概率!x代表one-hot形式的观测值,如x=类别3,则x=[0, 0, 1, 0]。 代表x的第i个元素,比如x=类别3时,x1=0,x2=0,x3=1,x4=0。
想一下,机器学习model对某个样本的输出,就代表各个类别发生的概率。但是,对于当前这一个样本而言,它肯定智能是一个类别,所以这一个样本就可以看成是一次实验(观察),而这次实验(观察)的结果要服从上述各个类别发生的概率,那不就是服从多项式分布嘛!而且是单次观察!各个类别发生的概率predict当然就是这个多项式分布的参数。
总结一下,对于多分类问题,似然函数就是衡量当前这个以predict为参数的单次观测下的多项式分布模型与样本值label之间的似然度。
所以,根据似然函数的定义,单个样本的似然函数即:
所以,整个样本集(或者一个batch)的似然函数即:
所以在累乘号前面加上log函数后,就成了所谓的对数似然函数:
而最大化对数似然函数就等效于最小化负对数似然函数,所以前面加个负号就和交叉熵的形式相同的了。
交叉熵定义:对于某种分布的随机变量X~p(x),有一个模型q(x)用于近似p(x)的概率分布,则分布X与模型q之间的交叉熵即:
这里X的分布模型即样本集label的真实分布模型,这里模型q(x)即想要模拟真实分布模型的机器学习模型。可以说交叉熵是直接衡量两个分布,或者说两个model之间的差异。而似然函数则是解释以model的输出为参数的某分布模型对样本集的解释程度。因此,可以说这两者是“同貌不同源”,但是“殊途同归”啦。
tips:
最大似然估计:给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即“模型已定,参数未知”。例如,我们知道它是从某一种分布是正态分布,但是不知道均值和方差;或者是二项分布,但是不知道均值。最大似然估计(MLE,Maximum Likelihood Estimation)就可以用来估计模型的参数。MLE的目标是找出一组参数,使得模型产生出观测数据的概率最大。
2.5.5 为什么用交叉熵代替二次代价函数
(1)为什么不用二次方代价函数
由上一节可知,权值 和偏置 的偏导数为: ,偏导数受激活函数的导数影响,sigmoid函数导数在输出接近0和1时非常小,会导致一些实例在刚开始训练时学习得非常慢。
(2)为什么要用交叉熵
交叉熵函数权值 和偏置 的梯度推导为:
由以上公式可知,权重学习的速度受到 影响,更大的误差,就有更快的学习速度,避免了二次代价函数方程中因 导致的学习缓慢的情况。
2.6 损失函数
2.6.1 什么是损失函数
损失函数(Loss Function)又叫做误差函数,用来衡量算法的运行情况,估量模型的预测值与真实值的不一致程度,是一个非负实值函数,通常使用L(Y,f(x))表示。损失函数越小,模型的鲁棒性就越好。损失函数是经风险函数的核心部分,也是结构风险函数重要组成部分。
2.6.2 常见的损失函数
机器学习通过对算法中的目标函数进行不断求解优化,得到最终想要的结果。分类和回归问题中,通常使用损失函数或代价函数作为目标函数。损失函数用来评价预测值和真实值不一样的程度。通常损失函数越好,模型的性能也越好。损失函数可分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是在经验风险损失函数上加上正则项。下面介绍常用的损失函数:
(1)0-1损失函数
如果预测值和目标值相等,值为0,如果不想等,值为1。
一般的在实际使用中,相等的条件过于严格,可适当宽条件:
(2)绝对值损失函数
和0-1损失函数相似,绝对值损失函数表示为:
(3)平方损失函数
这点可从最小二乘法和欧几里得距离角度理解。最小二乘法的原理是,最优拟合曲线应该使所有点到回归直线的距离和最小。
(4)对数损失函数
其中,Y为输出变量,X为输入变量,L为损失函数,N为输入样本量,M为可能的类别数, 是一个二值指标,表示类别 j 是否是输入实例 xi 的真实类别, 为模型或分类器预测输入实例 xi 属于类别 j 的概率。
常见的逻辑回归使用的就是对数损失函数,有很多人认为逻辑回归的损失函数是平方损失,其实不然。逻辑回归它假设样本服从伯努利分布(0-1分布),进而求得满足该分布的似然函数,接着取对数求极值等。逻辑回归推导出的经验风险函数是最小化负的似然函数,从损失函数的角度看,就是对数损失函数。形式上等价于二分类的交叉熵损失函数。
(6)指数损失函数
指数损失函数的标准形式为:
例如AdaBoost就是以指数损失函数为损失函数。
(7)Hinge损失函数
Hinge损失函数的标准形式如下:
统一的形式:
其中y是预测值,范围为(-1, 1),t为目标值,其为-1或1。
在线性支持向量机中,最优化问题可等价于:
上式相似于下式:
其中, 是Hinge损失函数, 可看作为正则化项。
2.6.3 逻辑回归为什么使用对数损失函数
假设逻辑回归模型 :
假设逻辑回归模型的概率分布是伯努利分布,其概率质量函数为:
其似然函数为:
对数似然函数为:
对数函数在单个数据点上的定义为:
则全局样本损失函数为:
由此可以看出,对数损失函数与极大似然估计的对数似然函数本质上是相同的。所以逻辑回归直接采用对数损失函数。
2.6.4 对数损失函数是如何度量损失的
例如,在高斯分布中,我们需要确定均值和标准差。如何确定这两个参数?最大似然估计是比较常用的方法。最大似然的目标是找到一些参数值,这些参数值对应的分布可以最大化观测到数据的概率。因为需要计算观测到所有数据的全概率,即所有观测到的数据点的联合概率。现考虑如下简化情况:
2.7 梯度下降
2.7.1 机器学习中为什么需要梯度下降
梯度下降是机器学习中常见优化算法之一,梯度下降法有以下几个作用:
(1)梯度下降是迭代法的一种,可以用于求解最小二乘问题。
(2)在求解机器学习算法的模型参数,即无约束优化问题时,主要有梯度下降法(Gradient Descent)和最小二乘法。
(3)在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
(4)如果我们需要求解损失函数的最小值,可通过梯度上升法来迭代。梯度下降和梯度上升法可相互转换。
(5)在机器学习中,梯度下降法主要有随机梯度下降法和批量梯度下降法。
2.7.2 梯度下降法缺点
梯度下降法缺点有以下几点:
(1)靠近极小值时收敛速度减慢。
(2)直线搜索时可能会产生一些问题。
(3)可能会“之字形”地下降。
梯度概念也有需注意的地方:
(1)梯度是一个向量,即有方向也有大小。
(2)梯度的方向是最大方向导数的方向。
(3)梯度的值是最大方向导数的值。
2.7.3 梯度下降直观理解
梯度下降法经典图示如下图2-7所示:
图2-7 梯度下降法经典图示
形象化举例,由上图2-7所示,假如最开始,我们在一座大山上的某处位置,因为到处都是陌生的,不知道下山的路,所以只能摸索着根据直觉,走一步算一步,在此过程中,每走到一个位置的时候,都会求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。不断循环求梯度,就这样一步步地走下去,一直走到我们觉得已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山势低处。由此,从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部的最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
核心思想归纳:
(1)初始化参数,随机选取取值范围内的任意数;
(2)迭代操作:a)计算当前梯度;b)修改新的变量;c)计算朝最陡的下坡方向走一步;d)判断是否需要终止,如否,返回a);
(3)得到全局最优解或者接近全局最优解。
2.7.4 梯度下降法算法描述
梯度下降算法步骤如下:
(1)确定优化模型的假设函数及损失函数
举例,对于线性回归,假设函数为:
2.7.5 如何对梯度下降法进行调优
实际使用梯度下降法时,各项参数指标不能一步就达到理想状态,对梯度下降法调优主要体现在以下几个方面:
(1)算法迭代步长 的选择
在算法参数初始化时,有时根据经验将步长初始化为1。实际取值取决于数据样本。可以从大到小,多取一些值,分别运行算法看迭代效果,如果损失函数在变小,则取值有效。如果取值无效,说明要增大步长。但步长太大,有时会导致迭代速度过快,错过最优解。步长太小,迭代速度慢,算法运行时间长。
(2)参数的初始值选择
初始值不同,获得的最小值也有可能不同,梯度下降有可能得到的是局部最小值。如果损失函数是凸函数,则一定是最优解。由于局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
(3)标准化处理
由于样本不同,特征取值范围也不同,导致迭代速度慢。为了减少特征取值的影响,可对特征数据标准化,使新期望为0,新方差为1,可节省算法运行时间。
2.7.6 随机梯度和批量梯度的区别
随机梯度下降(SGD)和批量梯度下降(BGD)是两种主要梯度下降法,其目的是增加某些限制来加速运算求解。下面通过介绍两种梯度下降法的求解思路,对其进行比较。
假设函数为:
损失函数为:
其中, 为样本个数, 为参数个数。
1、批量梯度下降的求解思路如下:
a)得到每个 对应的梯度:
b)由于是求最小化风险函数,所有按每个参数 的梯度负方向更新 :
c)从上式可以注意到,它得到的虽然是一个全局最优解,但每迭代一步,都要用到训练集所有的数据,如果样本数据很大,这种方法迭代速度就很慢。相比而言,随机梯度下降可避免这种问题。
2、随机梯度下降的求解思路如下:
a)相比批量梯度下降对应所有的训练样本,随机梯度下降法中的损失函数对应的是训练集中每个样本的粒度。损失函数可以写成如下这种形式:
c)随机梯度下降是通过每个样本来迭代更新一次。随机梯度下降伴随的一个问题是噪音较批量梯度下降要多,使得随机梯度下降并不是每次迭代都向着整体最优化方向。
小结:随机梯度下降法、批量梯度下降法相对来说都比较极端,简单对比如下:
方法 | 特点 |
批量梯度下降 | a)采用所有数据来梯度下降 b)批量梯度下降法在样本量很大的时候,训练速度慢 |
随机梯度下降 | a)随机梯度下降用一个样本来梯度下降 b)训练速度很快 c)随机梯度下降法仅仅用一个样本决定梯度方向,导致解有可能不是全局最优 d)收敛速度来说,随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解 |
下面介绍能结合两种方法优点的小批量梯度下降法。
3、小批量(Mini-Batch)梯度下降的求解思路如下:
对于总数为 个样本的数据,根据样本的数据,选取其中的 个子样本来迭代。其参数 按梯度方向更新 公式如下:
2.7.7 各种梯度下降法性能比较
下表简单对比随机梯度下降(SGD)、批量梯度下降(BGD)、小批量梯度下降(Mini-batch GD)、和Online GD的区别:
BGD | SGD | Mini-batch GD | Online GD | |
训练集 | 固定 | 固定 | 固定 | 实时更新 |
单次迭代样本数 | 整个训练集 | 单个样本 | 训练集的子集 | 根据具体算法定 |
算法复杂度 | 高 | 低 | 一般 | 低 |
时效性 | 低 | 一般 | 一般 | 高 |
收敛性 | 稳定 | 不稳定 | 较稳定 | 不稳定 |
BGD、SGD、Mini-batch GD,前面均已讨论过,这里介绍一下Online GD。
Online GD于Mini-batch GD/SGD的区别在于。所有训练数据只用一次,然后丢弃。这样做的优点在于可预测最终模型的变化趋势。
Online GD的互联网领域用的较多,,比如搜索广告的点击率(CTR)预估模型,网民的点击行为会随着时间改变。。用普通的BGD算法(每天更新一次)一方面耗时较长(需要对所有历史数据重新训练);另一方面,无法及时反馈用户的点击行为迁移。而Online GD算法可以实时的依据网民的点击行为进行迁移。
2.8 自然梯度法
2.8.1 为什么我们需要自然梯度
传统的梯度下降方法是在欧式空间进行,并与时序过程结合的优化方法,但这样的更新过程无法度量由于参数变化引起的概率属性的变化(这一点也可以认为是传统梯度下降方法的缺点)。在如强化学习等很多应用领域关注模型输出的概率分布,优化过程常常需要在一定概率属性的约束下完成,这就需要自然梯度。
2.8.2 如何定义自然梯度
若度量模型参数变化引起的概率分布变化,常用的“距离”度量是KL散度(Kullback-Leibler divergence)。设模型概率分布为 ,其与参数变动后的概率分布空间的KL散度为:
我们令 作泰勒展开取二阶近似(忽略高阶余项)得到:
我们记在KL散度意义下的参数增量为 ,接下来我们寻求在 约束下 的方向,使得目标函数 下降最快,即 最大。
应用拉格朗日乘法:
对 求导得 ,即
其中, 称为自然梯度,相应的自然梯度下降公式为:
2.8.3 Fisher信息矩阵的意义
首先我们对一个模型进行建模,成为以 为参数的概率分布 。为求出一个合理的 ,我们需要一个评分函数(score function): ,意为对数似然的梯度,当分数为0时(对数似然梯度为0),对数似然达到极值。对评分函数求关于 数学期望 ,不难发现数学期望为0。
接下来求估计误差的界,我们用评分函数的方差来确定,即:
带入评分函数的数学表达形式则等价于Fisher信息矩阵
特别地,Fisher信息矩阵与评分函数 的Hessian似然的负数等价。
证明:首先求出评价函数的Hessian矩阵,由梯度的Jacobian决定
等式两边同时求关于 的数学期望:
而Hessian矩阵刻画着对数似然函数的曲率,所以本质上自然梯度下降法是在一个消除了不同概率分布的曲率后,在同一个“平坦”曲面上进行迭代更新,步长等于原概率分布空间的步长按照曲率折合到新的“平坦曲面”的大小。
值得注意的一点是,一般来说似然函数获取很难,在实际问题中,我们可以用采样的方法从数据集中采样数据,将Fisher信息矩阵原始表达式的积分变为求和来近似估计,这样的方式得到的Fisher信息矩阵称为经验Fisher。
2.9 线性判别分析(LDA)
2.9.1 LDA思想总结
线性判别分析(Linear Discriminant Analysis,LDA)是一种经典的降维方法。和主成分分析PCA不考虑样本类别输出的无监督降维技术不同,LDA是一种监督学习的降维技术,数据集的每个样本有类别输出。
LDA分类思想简单总结如下:
1. 多维空间中,数据处理分类问题较为复杂,LDA算法将多维空间中的数据投影到一条直线上,将d维数据转化成1维数据进行处理。
2. 对于训练数据,设法将多维数据投影到一条直线上,同类数据的投影点尽可能接近,异类数据点尽可能远离。
3. 对数据进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定样本的类别。
如果用一句话概括LDA的思想,即“投影后类内方差最小,类间方差最大”。
2.9.2 图解LDA核心思想
假设有红、蓝两类数据,这些数据特征均为二维,如下图所示。我们的目标是将这些数据投影到一维,让每一类相近的数据的投影点尽可能接近,不同类别数据尽可能远,即图中红色和蓝色数据中心之间的距离尽可能大。
左图和右图是两种不同的投影方式:
左图思路:让不同类别的平均点距离最远的投影方式。
右图思路:让同类别的数据挨得最近的投影方式。
从上图可以直观看出,右图红色数据和蓝色数据在各自的区域来说相对集中,根据数据分布直方图也可看出,所以右图的投影效果好于左图,左图中间直方图部分有明显交集。
以上例子是基于数据是二维的,分类后的投影是一条直线。如果原始数据是多维的,则投影后的分类面是一低维的超平面。
2.9.3 二类LDA算法原理
输入:数据集 ,其中样本 是n维向量, ,降维后的目标维度 。定义:
为第 类样本个数;
为第 类样本的集合;
为第 类样本的均值向量;
为第 类样本的协方差矩阵。
其中,
假设投影直线是向量 ,对任意样本 ,它在直线 上的投影为 ,两个类别的中心点 在直线 的投影分别为 、 。
LDA的目标是让两类别的数据中心点的距离 尽量大,与此同时,希望同类样本投影点的协方差 尽量小,最小化 。定义类内散度矩阵: ,类间散度矩阵:
据上分析,优化目标为:
根据广义瑞利商的性质,矩阵 的最大特征值为 的最大值,矩阵 的最大特征值对应的特征向量即为 。
2.9.4 LDA算法流程总结
LDA算法降维流程如下:
输入:数据集 ,其中样本 是n维向量, ,降维后的目标维度 。
输出:降维后的数据集 。
步骤:
1. 计算类内散度矩阵 。
2. 计算类间散度矩阵 。
3. 计算矩阵 。
4. 计算矩阵 的最大的d个特征值。
5. 计算d个特征值对应的d个特征向量,记投影矩阵为 W。
6. 转化样本集的每个样本,得到新样本 。
7. 输出新样本集 。
2.9.5 LDA和PCA的区别
异同点 | LDA | PCA |
相同点 | 1. 两者均可以对数据进行降维 2. 两者在降维时均使用了矩阵特征分解的思想 3. 两者都假设数据符合高斯分布 |
|
不同点 | 有监督的降维方法 | 无监督的降维方法 |
降维最多降到k-1维 | 降维多少没有限制 | |
可以用于降维,还可以用于分类 | 只用于降维 | |
选择分类性能最好的投影方向 | 选择样本点投影具有最大方差的方向 | |
更明确,更能反映样本间差异 | 目的较为模糊 |
2.9.6 LDA优缺点
优缺点 | 简要说明 |
优点 | 1. 可以使用类别的先验知识 2. 以标签、类别衡量差异性的有监督降维方式,相对于PCA的模糊性,其目的更明确,更能反映样本间的差异 |
缺点 | 1. LDA不适合对非高斯分布样本进行降维 2. LDA降维最多降到分类数k-1维 3. LDA在样本分类信息依赖方差而不是均值时,降维效果不好 4. LDA可能过度拟合数据 |