首先给出一个结论:损失函数和成本函数是同一个东西,目标函数是与它们相关但更广泛的概念。 对于目标函数来说,约束下的最小化就是损失函数(loss)。
我举个例子来解释一下:(图片来自Ng公开课视频)
上面三张图的功能分别是
,
,
我们想用这三个函数分别拟合Price,Price的真实值记为
。
我们被给予
,所有三个函数都输出一个
,这个的输出
具有真正的价值
可能相同,也可能不同。 为了表示我们拟合的质量,我们用一个函数来衡量拟合程度,比如:
,这个函数称为损失函数(loss),或者成本函数(cost)。 损失函数越小,模型拟合得越好。
难道我们的目标就是让损失尽可能小吗? 还没有。
这时候就出现了另一个概念,叫做风险函数。风险函数是由于我们的输入和输出而导致的损失函数的期望
遵循联合分布,但该联合分布是未知的,因此无法计算。 但是我们有历史数据,这是我们的训练集,
训练集上的平均损失称为经验风险,即
,所以我们的目标是最小化
,称为经验风险最小化。
到这里了吗? 还没有。
如果到这一步就结束了,那么我们看上图,一定是最右边的那个
的经验风险函数是最小的,因为它最符合历史数据。但是我们看图
它肯定不是最好的,因为它过度学习了历史数据,导致它在实际预测时表现不佳。 这种情况称为过拟合(over-)。
为什么会出现这样的结果呢? 说白了,它的功能太复杂了,而且都是四次方。 这引出了以下概念。 我们不仅要最小化经验风险,还要最小化结构性风险。此时定义了一个函数
,这个函数专门用来衡量模型的复杂度,在机器学习中也叫正则化()。常用的有
,
规范。
此时我们可以说我们最终的优化函数是:
,即优化经验风险和结构风险,这个函数称为目标函数。
结合上面的例子来分析:最左边
结构风险最小(模型结构最简单),但经验风险最大(与历史数据拟合最差); 最右边的
经验风险最小(最适合历史数据),但结构风险最大(模型结构最复杂); 尽管
它在两者之间取得了很好的平衡,最适合预测未知数据集。