损失函数是什么?衡量模型预测离正确答案差多远
损失函数(Loss Function)是用来衡量模型的预测结果与真实答案之间差距的函数。预测得越准,损失越小;预测得越离谱,损失越大。训练一个机器学习模型的过程,本质上就是不断地调整模型的参数,让损失函数的值变得尽可能小。它是告诉模型“你错了多少、该往哪里改”的那把尺子。
损失函数的作用
可以把训练模型想象成学生做练习题:模型对每道题给出自己的答案,损失函数就像老师批改作业,给出一个“扣分”,错得越多扣分越多。模型再根据扣分的情况调整自己的思路,争取下次少扣分。具体来说,训练时先让模型对训练数据做出预测,用损失函数计算出预测与真实答案之间的差距,再通过反向传播算法计算出每个参数对损失的影响,也就是梯度,最后用梯度下降等优化算法,把参数往让损失减小的方向调整。如此反复,模型的预测就会越来越准确。
有时人们会区分几个相关的概念:损失函数通常指单个样本上的误差;代价函数指整个训练集上损失的平均值;目标函数则是最终要优化的整个函数,可能还包括防止过拟合的正则化项。不过在日常使用中,这几个词经常混用。
回归任务中常用的损失函数
回归任务是预测一个连续的数值,比如房价、气温。均方误差(MSE):把预测值与真实值之差取平方,再求平均。它是最常用的回归损失函数。由于对误差取了平方,大的误差会被放大,模型会特别努力地避免出现大的错误,但这也使它对异常值比较敏感。平均绝对误差(MAE):取预测值与真实值之差的绝对值,再求平均。它对异常值不那么敏感,更加稳健。Huber 损失:结合了两者的优点,误差小的时候像均方误差,误差大的时候像平均绝对误差。
分类任务中常用的损失函数
交叉熵损失:分类任务中最常用的损失函数。分类模型通常会输出样本属于各个类别的概率,交叉熵衡量的是模型给出的概率分布与真实答案之间的差距。如果正确的答案是“猫”,模型给“猫”这个类别的概率越高,损失就越小;如果模型非常自信地给出了错误的答案,损失就会非常大。它在二分类中也叫对数损失。铰链损失:支持向量机使用的损失函数,它不仅要求分类正确,还要求有足够的“把握”,也就是间隔。
大模型的损失函数
大语言模型在预训练时使用的损失函数,就是“预测下一个 token”的交叉熵损失:给定前面的文字,模型预测下一个 token 是词表中每一个 token 的概率,真实的下一个 token 得到的概率越高,损失就越小。这个看似简单的损失函数,在海量文本上进行优化之后,让模型学到了语言、知识和推理能力。研究者发现,随着模型规模、数据量和计算量的增加,这个损失会按照可以预测的规律下降,这就是缩放定律。此外,还有很多为特定任务设计的损失函数,比如对比学习中的对比损失、目标检测中衡量边界框位置的损失、生成对抗网络中的对抗损失等。
如何选择损失函数
损失函数的选择直接决定了模型会学习什么、优化什么。选择时需要考虑任务的类型、数据的特点,比如是否有很多异常值、类别是否严重不平衡,以及实际的业务目标。有时,我们真正关心的评价指标,比如准确率、F1 分数,并不适合直接作为损失函数来优化,因为它们不连续、无法求导,这时就需要用一个可以求导的损失函数来代替它。