1. 常用损失函数
损失函数是机器学习和深度学习中的一个关键概念,用于衡量模型预测结果与实际标签之间的差异或误差。损失函数的设计目标是使其最小化,这样在训练过程中,优化算法可以通过调整模型参数来使损失函数达到最小值,从而提高模型的性能。损失函数通常是一个关于模型参数的函数,用数学公式表示。
1.1 回归损失
对于回归任务,损失函数衡量实际值与预测值之间的差异,回归任务中常见的损失函数如下表所示,其中,y是真实标签,是模型的预测值。
均方误差(Mean Squared Error,MSE)函数平滑可导,可以使用梯度下降等优化算法进行训练,但是对异常值敏感,适用于数据分布较平稳,异常值不频繁且对模型影响较小的任务。平均绝对误差(Mean Absolute Error,MAE)函数对异常值不敏感,鲁棒性较强,但不如均方误差在训练过程中提供平滑的梯度,可能导致优化过程相对较慢,适用数据中包含较多异常值的任务。Huber损失函数巧妙融合了均方误差和平均绝对误差两者的优势,对异常值有一定的鲁棒性,适用于数据中可能存在一些异常值,但不希望它们对模型训练产生过大影响的任务。Log-Cosh损失函数对异常值有一定的鲁棒性,相对平滑,避免了均方误差的过度敏感,但计算复杂度相对较高,可能增加训练时间,适用于在对异常值不敏感的同时,希望保留均方误差的平滑性。分位数损失函数允许在不同的分位数上对模型性能进行调优,对于不对称的误差成本有较好的适应性,但是选择合适的分位数需要一定的领域知识或者通过实验确定,训练过程相对复杂,适用于某些特殊场景,例如金融领域的风险管理。
1.2 分类损失
对于分类任务,损失函数通过对比模型的预测结果与实际标签,量化模型输出概率分布与真实标签之间的差异。分类任务中常见的损失函数如表2-3所示,包括交叉熵损失函数、Hinge损失函数、Logistic损失函数、指数损失函数、Focal Loss损失函数和Dice损失函数等,其中,y是真实标签,是模型的预测值。
交叉熵损失函数(Cross-Entropy Loss)适用于分类问题,尤其在深度学习中常用,训练过程中提供了梯度信息,有助于模型收敛,但是对异常值相对敏感。Hinge损失函数适用于支持向量机等模型,鼓励分类边界离决策边界足够远,对于异常值相对鲁棒。Logistic损失函数适用于逻辑回归等模型,提供类别概率估计,训练过程中提供的梯度信息有助于模型收敛,但其对异常值相对敏感,在类别不平衡时可能需要额外处理。指数损失函数用于Adaboost等模型,对误分类样本的惩罚较大,对异常值较为敏感。Focal Loss损失函数能够缓解类别不平衡问题,降低易分类样本对训练的影响,在存在大量负样本的情况下,可以有效提升模型性能,但计算相对复杂。Dice损失函数适用于图像分割任务,特别在类别不平衡的情况下效果较好,但对于类别平衡的问题,可能不如其他损失函数表现好。
2. 常用优化函数
在机器学习和深度学习中,优化算法通过调整模型的参数来最小化或最大化损失函数,不断迭代更新参数,使得损失函数达到最小值或最大值,让模型的预测结果逐渐逼近真实标签,从而提升模型的性能。常用的优化算法包括梯度下降及其变种,如随机梯度下降、批量梯度下降、小批量梯度下降、Adagrad(Adaptive Gradient Algorithm)算法以及Adam算法等。
梯度下降是最基本的优化算法,通过迭代调整参数以减小损失,在每次迭代中,计算损失函数对参数的梯度,然后按照负梯度的方向更新参数。对于参数θ,梯度下降算法的更新规则为:
其中,学习率α是优化算法中用于控制参数更新步长的一个关键因子,决定了模型在每次迭代中向损失函数最小值逼近的速度和稳定性。而则代表了损失函数关于参数θ的变化率,即模型在参数空间中的斜率或方向,它指导着优化算法如何调整参数以最小化损失函数。
随机梯度下降是梯度下降的变种,在每次迭代过程中并非使用全部样本,而是随机挑选一个样本进行梯度的计算和参数的更新。这样做可以加速训练,尤其在大规模数据集上。对于参数θ,随机梯度下降算法的更新规则为:
其中,是损失函数关于单个样本的梯度。由于每次迭代只使用一个样本,更新过于频繁,可能导致模型参数的不稳定性,同时单个样本可能包含噪声,导致参数更新的方向不稳定。
批量梯度下降在每次迭代中使用整个训练数据集计算梯度,通常会对数据进行随机排序,然后按照批次大小进行更新。对于参数θ,批量梯度下降算法的更新规则为:
其中,m是批次大小。相对于随机梯度下降,批量梯度下降由于每次迭代都使用整个数据集,有更好的全局收敛性,能够更准确地找到损失函数的最小值,更新更加稳定,减少了随机噪声的影响。但是在大规模数据集上,每次迭代都需要计算整个数据集的梯度,计算开销较大。
小批量梯度下降,作为梯度下降算法的一种变体,其特点在于每次迭代时仅使用一小部分样本来计算梯度并更新参数,这种方法既不同于批量梯度下降的全局计算,也不同于随机梯度下降的单一样本选择。通过小批量处理,该算法在保持一定计算效率的同时,也能够在一定程度上减少噪声影响,提高模型的收敛速度和稳定性。对于参数θ,批量梯度下降算法的更新规则为:
其中,B是小批量的大小。
Adagrad是一种自适应学习率的优化算法,旨在解决传统梯度下降中全局学习率过大或过小的问题,Adagrad的主要思想是对每个参数应用不同的学习率,根据其历史梯度的平方根进行缩放。对于参数θ,Adagrad算法的更新规则为:
其中,G是过去梯度平方的累积。每个参数都有自己的学习率,该学习率由过去的梯度平方的累积决定,因此采用了自适应的学习率调整策略,对于频繁更新的参数,适当减小学习率,以避免过度拟合和震荡;而对于不频繁更新的参数,则会相应增大学习率,以促进其快速收敛和优化。但它也有一些问题,比如在长时间运行中,学习率可能会变得太小,导致训练停滞。
Adam是一种结合了梯度一阶矩估计和二阶矩估计的自适应学习率优化算法,它在训练初期使用较大的学习率,逐渐减小,有效地处理不同特征尺度和稀疏梯度问题。对于参数θ,随机梯度下降算法的更新规则为:
其中,和分别是梯度的一阶矩和二阶矩的移动平均,是平滑项,α 是学习率。Adam算法具有自适应调整学习率的能力,能够针对不同参数的变化幅度进行有效处理,且引入了动量项,可以在梯度更新时考虑历史梯度,有助于平稳更新过程,所以它对于不同类型的网络和数据集都具有鲁棒性,但是它涉及一阶矩估计和二阶矩估计的计算,计算开销更大。
总而言之,损失函数衡量了模型对样本的预测与实际标签之间的差异,即模型输出与真实值的误差。优化算法通过最小化损失函数来调整模型参数,使得模型能够更准确地预测未见过的数据。