神经网络(损失函数)
损失函数,也称为代价函数或目标函数,是一个用于量化神经网络预测值与真实值之间差异的函数。
-
输入:模型的预测输出和真实的标签。
-
输出:一个标量值(一个数字),这个值代表了模型在当前参数下“犯错”的严重程度。
-
核心思想:损失值越低,说明模型的预测越准确;损失值越高,说明预测越糟糕。
损失函数的核心作用
1. 为模型提供学习和优化的目标
2. 为模型参数更新提供方向和幅度(指南针+尺子)
神经网络是通过梯度下降算法来学习的。而梯度下降的关键就是计算梯度。
-
梯度是什么? 梯度是损失函数对于每个模型参数的偏导数的集合。它指出了损失函数在当前位置增长最快的方向。
-
损失函数的作用:为了找到下降的方向,我们计算损失函数关于权重的梯度:
∇L(w)。这个梯度明确地告诉我们:-
方向:为了减小损失,每个参数应该向哪个方向调整(增加还是减少)。
-
幅度:梯度的大小也暗示了调整的幅度应该有多大。梯度大的地方,说明参数稍微改动一点,损失就会变化很大,因此需要更大的调整步伐。
-
没有损失函数,梯度下降法就无从谈起。
评估模型性能的衡量标准
在训练过程中和训练结束后,我们需要一个客观的标准来评判模型的好坏。损失函数就是这个标准。
-
训练监控:通过观察训练集上的损失随着训练轮数(epoch)的下降情况,我们可以判断模型是否正在学习,以及学习速度如何。
-
模型选择与比较:
-
在验证集上计算损失,可以帮助我们进行超参数调优(例如,选择学习率、网络层数等)。选择在验证集上损失最小的那组超参数。
-
在测试集上计算损失(以及其他相关指标,如准确率),可以最终、客观地评估模型的泛化能力,并与其他模型进行比较。
-
常见的损失函数
不同的任务需要不同的损失函数,选择正确的损失函数至关重要。
1. 回归任务(预测一个连续值)
-
均方误差(MSE)
-
公式:
MSE = (1/n) * Σ(预测值 - 真实值)² -
特点:对异常值敏感,因为误差被平方了。惩罚大的错误非常严厉。
-
适用场景:大部分回归问题,如预测房价、温度等。
-
-
平均绝对误差(MAE)
-
公式:
MAE = (1/n) * Σ|预测值 - 真实值| -
特点:对异常值不如MSE敏感,更加稳健。
-
适用场景:当数据中含有较多异常值时。
-
2. 分类任务(预测一个离散类别)
-
交叉熵损失
-
这是分类任务中最最重要和常用的损失函数。
-
思想:衡量模型输出的概率分布与真实的概率分布(通常是one-hot编码)之间的差异。
-
二分类交叉熵损失:用于输出是0/1的问题(如判断垃圾邮件)。
-
多分类交叉熵损失:用于输出有多个类别的问题(如手写数字识别、图像分类)。
-
特点:当模型的预测概率与真实标签完全一致时,损失为0;差异越大,损失越高。它非常鼓励模型对自己的正确预测拥有高置信度。
-
-
Hinge Loss(合页损失)
-
主要用于支持向量机(SVM),但也可以在神经网络中使用。
-
特点:不仅要求分类正确,还要求正确类别的置信度要比其他类别高出一个间隔(margin)。
-
四、总结
将训练一个神经网络想象成训练一个盲人射手打靶:
-
射手:神经网络模型。
-
弓箭和姿势:模型的参数(权重和偏置)。
-
靶心:完美的预测(真实标签)。
-
射箭:模型进行一次预测。
-
损失函数:报靶员。每次射箭后,报靶员会告诉射手:
-
你射得有多偏?(损失值)
-
偏向哪个方向?(梯度的方向)
-
偏了多少厘米?(梯度的大小)
-
-
梯度下降算法:射手根据报靶员的信息,系统地调整他的姿势(模型参数),目标是让下一箭射得更准(损失更低)。
如果没有这个报靶员(损失函数),射手就永远不知道自己射得怎么样,也就无法通过练习来进步。
因此,损失函数是连接模型“当前表现”与“理想表现”之间的桥梁,是驱动整个机器学习过程的核心引擎。
更多推荐
所有评论(0)