对于分类问题,预测函数的输出值是离散化的类别标签。给定一组训练样本,在训练时的目标是让这组训练样本尽量被正确的分类,这对应于经验风险最小化的思想。
感知器算法的是最简单的线性分类器,它的目标是让所有样本尽可能分类。对于二分类问题,线性分类器的判别函数为:
样本的标签值为+1或-1,分别对应正样本和负样本。如果线性函数预测出来的值和样本的真实标签值不同号,则预测错误;如果同号,则预测正确。要将预测错误最小化,只需求解如下最优化问题即可:
对于每个训练样本,如果预测正确,则损失函数为负,否则为正。这样我们就构造出了一个容易求解的损失函数。
对于二分类或多分类问题,都可以用欧氏距离作为分类的损失函数。对于多分类问题,一般不直接用类别编号作为预测值,而是为类别进行向量化编码,如one-hot编码。此时损失函数定义为:
在人工神经网络发展的早期,这种函数被广泛使用,但后来对于多分类问题,更多的采用交叉熵损失函数。在后面我们会介绍此函数,至于原因,在SIGAI之前的公众号文章“【群话题精华】五月集锦——机器学习和深度学习中一些值得思考的问题”中曾经做过说明,感兴趣的读者可以阅读这篇文章。
线性判别分析(LDA)是一种有监督的数据降维算法,它的目标是最大化类间差异,最小化类内差异。数据经过投影之后,在低维空间里,同类样本聚集在一起,不同类的样本相距尽可能远。类内差异用每个类的方差来衡量,类间差异用各个类的类中心之间的距离来衡量,二者的比值为我们要优化的目标。由此构造出如下损失函数:
求解这一问题最后归结为求解矩阵的特征值问题。
前面介绍的感知器算法的目标函数,欧氏距离损失,代表的都是经验风险,即在训练样本集上让误差最小化。这样做的泛化性能不一定好,还有一种做法为结构化风险最小化,典型代表是支持向量机。
支持向量机不仅要让所有训练样本尽可能被正确分类,还要让分类间隔最大化,根据解析几何中点到超平面的距离公式,我们构造出了它的优化目标:
这个优化问题还带有不等式约束。SVM推导的细节,SIGAI之前写过一篇公众号文章“用一张图理解SVM的脉络”,后面将做更详细的讲解,敬请期待。
我们可以从另一个角度解释支持向量机的优化目标函数,即合页损失函数。合页损失函数定义为:
其意义为当:
即当样本的间隔大于1时:
该样本的损失是0;否则样本的损失是1-yiwtxi。此时是一个正的损失。采用合页损失函数,SVM训练时优化的目标为:
这和前面一种表述是等价的。此时,目标函数的前半部分充当正则化项,后半部分充当真正的损失函数,用于对违反约束的样本进行惩罚。
前面说过,对于输出概率值的模型,可以采用最大似然估计来估计模型的参数。典型的代表是logistic回归。对于二分类问题,如果样本的类别标签值为1和0,则对数似然函数为:
将logistic回归推广到多分类问题,即softmax回归,它输出一个样本属于每个类的概率值。因此,训练样本的标签值为一个向量,如果样本属于某一类,该分量为1,其他分量为0。损失函数根据标签向量与预测出的概率向量构造,使用的是softmax交叉熵,定义为:
而交叉熵损失定义为:
它在深度神经网络中被广泛使用。
AdaBoost算法训练时优化的目标函数为指数损失函数,它根据强分类器的输出值F(x)与样本的标签值构造:
在这里,样本的标签值为-1或+1,对应于负样本和正样本。强分类器通过加法模型构造,求解时每次优化一个弱分类器和它的权重,具体做法在之前的公众号文章“理解AdaBoost算法”中已经介绍,由此可以推导出AdaBoost的训练算法。
神经网络尤其是深度学习中使用的损失函数种类繁多,除了传统的欧氏距离之外,还有近几年流行的交叉熵,以及其他函数,下表列出了常用的一些损失函数以及它们的导数:
在这里,求导是对神经网络的预测数据进行的。损失层是神经网络训练时的最后一层,它也只用于训练阶段。在实现反向传播算法时,它是梯度反向传播的起点。
需要说明的是,对前面介绍的很多损失函数,我们都可以加上正则化项,得到新的损失函数,以减轻过拟合。