首先需要明确损失函数与代价函数的区别与联系。在 Coursera:Neural Networks and Deep Learning 课程中,Andrew Ng 给出的解释如下:

The loss function computes the error for a single training example; the cost function is the average of the loss funcitons of the entire training set.

损失函数(Loss function)是定义在单个训练样本的损失/误差,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的哦,用L表示。

代价函数(Cost function)是定义在整个训练集整体的误差描述,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。

所以说两个不是一个东西,很多人把它们混为一谈这是不对的。好了,开始今天的正题吧。

6.1常见的损失函数

损失函数(loss function)是用来估量你模型的预测值 f(x)与真实值 Y的不一致程度,它是一个非负实值函数,通常使用 来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_TensorFlow

其中,前面的均值函数表示的是经验风险函数, L L L代表的是损失函数,后面的Φ是正则化项(regularizer)或者叫惩罚项(penalty term),它可以是 L 1 L1 L1,也可以是 L 2 L2 L2,或者其他的正则函数。整个式子表示的意思是找到使目标函数最小时的θ值。下面主要列出几种常见的损失函数。

【注】Object Function(目标函数 )定义为:Cost Function + 正则化项。目标函数(Objective function)就是有某个(最优化)目标的函数。

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_损失函数_02

图1常见的损失函数

6.1.1 0-1损失函数和绝对值损失函数

可以看从图1看出,该损失函数的意义就是,当预测错误时,损失函数值为1,预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度,也就是只要预测错误,预测错误差一点和差很多是一样的。

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_03

感知机就是用的这种损失函数。但是由于相等这个条件太过严格,因此我们可以放宽条件,即满足 ∣ Y − f ( X ) ∣ &lt; T |Y-f(X)|&lt;T Yf(X)<T 时认为相等。

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_TensorFlow_04

 绝对值损失函数

L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=Yf(X)

6.1.2平方损失函数(Square Loss)(最小二乘法, Ordinary Least Squares )

最小二乘法是线性回归的一种,OLS将问题转化成了一个凸优化问题。在线性回归中,它假设样本和噪声都服从高斯分布(为什么假设成高斯分布呢?其实这里隐藏了一个小知识点,就是中心极限定理。

最后通过极大似然估计(MLE)可以推导出最小二乘式子。最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。换言之,OLS是基于距离的,而这个距离就是我们用的最多的欧几里得距离。为什么它会选择使用欧式距离作为误差度量呢(即Mean squared error, MSE),主要有以下几个原因:

 简单,计算方便;

 欧氏距离是一种很好的相似性度量标准;

 在不同的表示域变换后特征性质不变。

平方损失(Square loss)的标准形式如下:

L ( Y − f ( X ) ) = ( Y − f ( X ) ) 2 L(Y-f(X))=(Y-f(X))^2 L(Yf(X))=(Yf(X))2

6.1.3 log对数损失函数(Cross Entropy Loss)(逻辑回归与Softmax 分类)

平方损失函数可以通过线性回归在假设样本是高斯分布的条件下推导得到,而逻辑回归得到的并不是平方损失。在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数(即 m a x F ( y , f ( x ) ) — &gt; m i n − F ( y , f ( x ) ) ) max F(y, f(x)) —&gt; min -F(y, f(x))) maxF(y,f(x))>minF(y,f(x)))。从损失函数的视角来看,它就成了log损失函数了。

log损失函数的标准形式:

L ( Y , P ( Y ∣ X ) ) = − log ⁡ P ( Y ∣ X ) L(Y,P(Y|X)) = -\log P(Y|X) L(Y,P(YX))=logP(YX)

刚刚说到,取对数是为了方便计算极大似然估计,因为在MLE中,直接求导比较困难,所以通常都是先取对数再求导找极值点。损失函数 L ( Y , P ( Y ∣ X ) ) L(Y, P(Y|X)) L(Y,P(YX))表达的是样本 X X X在分类 Y Y Y的情况下,使概率 P ( Y ∣ X ) P(Y|X) P(YX)达到最大值(换言之,就是利用已知的样本分布,找到最有可能(即最大概率)导致这种分布的参数值;或者说什么样的参数才能使我们观测到目前这组数据的概率最大)。因为log函数是单调递增的,所以 l o g P ( Y ∣ X ) logP(Y|X) logP(YX)也会达到最大值,因此在前面加上负号之后,最大化 P ( Y ∣ X ) P(Y|X) P(YX)就等价于最小化 L L L了。

逻辑回归的 P ( Y = y ∣ x ) P(Y=y|x) P(Y=yx)表达式如下(为了将类别标签 y y y统一为1和0,下面将表达式分开表示):

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_05

将它带入到上式,通过推导可以得到logistic的损失函数表达式,如下:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_06

6.1.4指数损失函数(Exponential Loss)(Adaboost)

学过Adaboost算法的人都知道,它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。在Adaboost中,经过m此迭代之后,可以得到 f m ( x ) f_m(x) fm(x)

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_TensorFlow_07

Adaboost每次迭代时的目的是为了找到最小化下列式子时的参数 α α α G G G

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_损失函数_08

而指数损失函数(exp-loss)的标准形式如下:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_最小化_09

关于Adaboost的推导,可以参考Wikipedia:AdaBoost

或者《统计学习方法》P145.

6.1.5铰链损失函数(Hinge Loss)(SVM)

在机器学习算法中,hinge损失函数和SVM是息息相关的。在线性支持向量机中,最优化问题可以等价于下列式子:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_TensorFlow_10

下面来对式子做个变形,令:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_损失函数_11

于是,原式就变成了:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_损失函数_12

如若取 λ = 1 2 C \lambda=\frac{1}{2C} λ=2C1,式子就可以表示成:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_最小化_13

可以看出,该式子与下式非常相似:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_14

前半部分中的 l l l就是hinge损失函数,而后面相当于 L 2 L2 L2正则项。

Hinge 损失函数的标准形式:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_15

可以看出,当 ∣ y ∣ &gt; = 1 |y|&gt;=1 y>=1时, L ( y ) = 0 L(y)=0 L(y)=0

更多内容,参考Hinge-loss。

补充一下:在libsvm中一共有4中核函数可以选择,对应的是-t参数分别是:

 线性核;

 多项式核;

 RBF核;

 sigmoid核。

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_TensorFlow_16

图2

6.2常见的代价函数

前文介绍了常见的损失函数,接下来介绍常见的代价函数。这是在前文的基础上推到的。

6.2.1平方代价函数

当样本个数为n时,此时的代价函数变为:

C ( Y , f ( X ) ) = ∑ i = 1 n ( Y − f ( X ) ) 2 C(Y,f(X))= {}\sum_{i=1}^{n} (Y-f(X))^2 C(Y,f(X))=i=1n(Yf(X))2

Y − f ( X ) Y-f(X) Yf(X)表示的是残差,整个式子表示的是残差的平方和,而我们的目的就是最小化这个目标函数值(注:该式子未加入正则项),也就是最小化残差的平方和(residual sum of squares,RSS)。

而在实际应用中,通常会使用均方差(MSE)作为一项衡量指标,公式如下:

M S E = 1 n ∑ i = 1 n ( Y i ~ − Y i ) 2 MSE = \frac{1}{n} \sum_{i=1} ^{n} (\tilde{Y_i} - Y_i )^2 MSE=n1i=1n(Yi~Yi)2

上面提到了线性回归,这里额外补充一句,我们通常说的线性有两种情况,一种是因变量 y y y是自变量 x x x的线性函数,一种是因变量 y y y是参数 α α α的线性函数。在机器学习中,通常指的都是后一种情况。

6.2.2 log对数代价函数

逻辑回归最后得到的目标式子如下:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = - \frac{1}{m} \sum_{i=1}^m \left [ y^{(i)} \log h_{\theta}(x^{(i)}) + (1-y^{(i)}) \log(1-h_{\theta}(x^{(i)})) \right ] J(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

上面是针对二分类而言的。这里需要解释一下:之所以有人认为逻辑回归是平方损失,是因为在使用梯度下降来求最优解的时候,它的迭代式子与平方损失求导后的式子非常相似,从而给人一种直观上的错觉。

6.2.3指数代价函数(Adaboost)

Adaboost的目标式子就是指数损失,在给定¥n$个样本的情况下,Adaboost的损失函数为:

C ( y , f ( x ) ) = 1 n ∑ i = 1 n e x p [ − y i f ( x i ) ] C(y,f(x)) = \frac{1}{n} \sum_{i=1} ^{n} exp[-y_if(x_i)] C(y,f(x))=n1i=1nexp[yif(xi)]

6.2.4铰链代价函数(Hinge Loss)

铰链损失函数的代价函数如下:

《人工智能-TensorFlow开发笔记》第6章 损失函数与代价函数_代价函数_17