首先说明一下它们三个的定义:
- 损失函数(Loss Function ):就是单个样本的误差,预测值和真实值之间的差距,但是衡量差距的方式有很多种,但是大多数情况下采用距离或者做差
- 代价函数(Cost Function ):它是整个训练集的损失,可以理解为所有样本数据的平均损失,但有时也可以不做平均,就是考虑总体损失
- 目标函数(Object Function):它是最终我们需要优化的函数,它代表着我们模型的各方面能力,抗干扰性、精度方面等
一般情况来说我们的目标函数为:
目 标 函 数 = 损 失 函 数 / 代 价 函 数 + 结 构 风 险 ( 正 则 项 ) 目标函数=损失函数/代价函数+结构风险(正则项)目标函数=损失函数/代价函数+结构风险(正则项)
前面的损失函数有时也成为经验风险,它你就可以理解为这个函数的值可以评估模型的精度或者误差之类的,它的值越小,说明我们模型此时的精度越好(针对于训练集),我们有时可以直接采用损失函数作为最终的目标函数进行优化,也就是我们只关心精度或者误差,我们可以优化该函数进行优化达到使训练集的误差最小,但是有时我们希望提高模型的泛化能力,减少过拟合,那么此时如果仍使用损失函数作为目标函数就不太合适了,就应该在损失函数的后面添加正则项,这个作为我们最终的目标函数,我们此时的目标就是同时重视模型的精度误差和模型的泛化能力。
总的来说,我们的目标函数就是可以衡量模型的多方面能力,而损失函数只可以衡量精度或者损失方面,看你的目标是什么,如果你的目标就是精度,此时完全可以把损失函数作为目标函数进行优化,如果要注重其它方面,此时损失函数只是目标函数的一部分。
其实有些时候把损失函数和代价函数混用,大多数情况都叫损失函数,不是特别严格。
我们用个线性回归的例子解释一下:
线性回归(以二维数据说明)是要找到一组参数构建一条直线去拟合图中所有点,此时我们的损失函数就为:
L = ( y i − w T x i ) 2 L=(y_i-w^Tx_i)^2L=(yi−wTxi)2
代价函数就为:
J = 1 m ∑ i = 1 m ( y i − w T x i ) 2 J=\frac{1}{m}\sum_{i=1}^m(y_i-w^Tx_i)^2J=m1i=1∑m(yi−wTxi)2
这也就是MSE:均方误差
但有的时候区分不是太严格,有的地方也把总体损失写成:
L ( w ) = 1 m ∑ i = 1 m ( y i − w T x i ) 2 L(w)=\frac{1}{m}\sum_{i=1}^m(y_i-w^Tx_i)^2L(w)=m1i=1∑m(yi−wTxi)2
此时如果我们意图将训练数据最大程度拟合,那么我们只需要找到一组参数值使我们的代价函数最小即可,此时就可以把代价函数作为目标函数然后使用一些迭代求解算法求极值。
此时虽然可以使训练集拟合的非常好,但是它的泛化能力非常低,容易产生过拟合,所以此时我们的目标就不仅仅重视误差,还要重视模型的泛化能力,所以此时目标函数就应该包括结构风险:
1 m ∑ i = 1 m ( y i − w T x i ) 2 + λ ∣ ∣ w ∣ ∣ 2 2 \frac{1}{m}\sum_{i=1}^m(y_i-w^Tx_i)^2+\lambda||w||_2^2m1i=1∑m(yi−wTxi)2+λ∣∣w∣∣22
这就是加上了L2正则项的目标函数,此时的目标函数同时兼顾模型的精度以及模型的泛化能力。