训练神经网络时,最令人沮丧的事情之一是:模型结构设计得非常精巧,数据预处理也很完善,但训练结果却始终无法收敛,或者收敛到了一个糟糕的局部最优解。许多开发者在排错时首先怀疑的是模型架构、超参数或者数据质量,却往往忽略了深度学习中最基础也最重要的组件——损失函数。
损失函数不仅仅是一个衡量预测与真实值差距的数字,它直接决定了模型的学习方向。选择错误的损失函数,就像给一个要去北京的人指了一条去上海的路——无论走得多么认真,都不可能到达目的地。
损失函数的本质:为什么这个选择如此关键
在深入具体的损失函数之前,需要先厘清几个经常被混淆的概念。
graph LR
A[核心概念区分] --> B[损失函数 Loss]
A --> C[代价函数 Cost]
A --> D[性能指标 Metric]
B --> E[衡量单个样本误差]
C --> F[所有样本损失的平均]
D --> G[评估阶段的模型比较]
E --> H[训练时使用]
F --> H
G --> I[评估时使用]
损失函数(Loss Function)衡量的是单个样本的预测误差。代价函数(Cost Function)则是所有样本损失的平均值或总和,有时还会加入正则化项。在深度学习的实践中,这两个术语经常被混用,但严格来说,优化器最小化的是代价函数。
与损失函数容易混淆的还有性能指标(Performance Metric)。损失函数用于训练阶段的梯度计算和参数更新,必须是可微的,且通常需要与优化目标高度对齐;性能指标则用于评估阶段的模型比较,不要求可微,更注重可解释性。例如,分类任务中常用交叉熵作为损失函数,却用准确率、F1分数作为性能指标。
损失函数具有几个关键属性需要在选择时考虑:
graph TD
A[损失函数关键属性] --> B[凸性 Convexity]
A --> C[可微性 Differentiability]
A --> D[鲁棒性 Robustness]
A --> E[平滑性 Smoothness]
B --> B1[局部最小=全局最小]
B --> B2[深度网络中整体非凸]
C --> C1[梯度下降需要导数]
C --> C2[MAE零点不可微]
D --> D1[对异常值的不敏感程度]
D --> D2[MSE敏感/MAE稳健]
E --> E1[梯度连续程度]
E --> E2[影响优化轨迹稳定性]
理解这些属性后,接下来按照任务类型,系统梳理各类损失函数的原理与权衡。
回归任务:从MSE到Huber Loss的演进
回归任务预测连续值,如房价预测、温度预测、股票价格预测等。这类任务的损失函数设计,核心在于如何平衡对异常值的容忍度与对精确预测的追求。
均方误差(MSE):最经典但并非万能
均方误差(Mean Squared Error,MSE),也称为L2损失,是回归任务中最常用的损失函数。其数学表达式为:
$$L_{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$其中 $y_i$ 是真实值,$\hat{y}_i$ 是预测值,$n$ 是样本数量。
MSE的核心特性源于平方运算:大误差会被放大。如果预测误差是10,平方后损失就是100;如果误差是100,平方后损失变成10000。这种特性使得MSE对异常值极其敏感——一个极端异常值可能主导整个损失函数的值。
MSE的梯度为:
$$\frac{\partial L_{MSE}}{\partial \hat{y}_i} = \frac{2}{n}(\hat{y}_i - y_i)$$这个梯度直接与误差大小成正比,意味着大误差会产生大梯度,小误差产生小梯度。这在多数情况下是有益的,但当数据包含异常值时,异常值产生的大梯度可能导致参数更新幅度过大,破坏已学习到的模式。
平均绝对误差(MAE):对异常值更友好
平均绝对误差(Mean Absolute Error,MAE),也称为L1损失,提供了对异常值更稳健的选择:
$$L_{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i|$$MAE对误差进行线性惩罚,无论误差大小,惩罚力度相同。这使得异常值的影响被控制在一个合理范围内。
然而,MAE的梯度在零点不可微:
$$\frac{\partial L_{MAE}}{\partial \hat{y}_i} = \begin{cases} +\frac{1}{n} & \text{if } \hat{y}_i > y_i \\ -\frac{1}{n} & \text{if } \hat{y}_i < y_i \\ \text{undefined} & \text{if } \hat{y}_i = y_i \end{cases}$$这个梯度特性导致了一个问题:当预测接近真实值时,梯度仍然保持恒定大小,不会减小。这意味着在接近最优解时,优化可能会出现震荡,难以精确收敛。
graph LR
A[MSE vs MAE 对比] --> B[MSE 特性]
A --> C[MAE 特性]
B --> D[平方惩罚]
B --> E[处处可微]
B --> F[对异常值敏感]
C --> G[线性惩罚]
C --> H[零点不可微]
C --> I[对异常值稳健]
Huber Loss:两种策略的优雅融合
Huber Loss由Peter J. Huber在1964年提出,巧妙地结合了MSE和MAE的优势。其数学表达式为:
$$L_{Huber} = \begin{cases} \frac{1}{2}(y - \hat{y})^2 & \text{if } |y - \hat{y}| \leq \delta \\ \delta|y - \hat{y}| - \frac{1}{2}\delta^2 & \text{if } |y - \hat{y}| > \delta \end{cases}$$其中 $\delta$ 是一个可调的超参数,定义了从二次惩罚过渡到线性惩罚的阈值。
graph TD
A[Huber Loss 分段函数] --> B{误差大小判断}
B -->|误差 ≤ δ| C[MSE 区域]
B -->|误差 > δ| D[MAE 区域]
C --> E[二次惩罚]
C --> F[平滑梯度]
C --> G[精确收敛]
D --> H[线性惩罚]
D --> I[有界梯度]
D --> J[异常值稳健]
当误差小于 $\delta$ 时,Huber Loss表现得像MSE,提供平滑的梯度,有利于精确收敛;当误差大于 $\delta$ 时,它表现得像MAE,对异常值保持稳健。
Huber Loss的梯度为:
$$\frac{\partial L_{Huber}}{\partial \hat{y}} = \begin{cases} -(y - \hat{y}) & \text{if } |y - \hat{y}| \leq \delta \\ -\delta \cdot \text{sign}(y - \hat{y}) & \text{if } |y - \hat{y}| > \delta \end{cases}$$这个梯度特性非常优雅:小误差时梯度与误差成正比,大误差时梯度被限制在 $[-\delta, \delta]$ 范围内,防止异常值产生过大的参数更新。
在实际应用中,$\delta$ 通常通过交叉验证选择。PyTorch中默认值为1.0,但应根据数据尺度调整。
Log-Cosh Loss:更平滑的替代方案
Log-Cosh Loss是另一个结合MSE和MAE优势的损失函数,定义为:
$$L_{LogCosh} = \frac{1}{n}\sum_{i=1}^{n}\log(\cosh(y_i - \hat{y}_i))$$利用双曲余弦函数的性质:当 $x \to 0$ 时,$\log(\cosh(x)) \approx \frac{x^2}{2}$;当 $|x| \to \infty$ 时,$\log(\cosh(x)) \approx |x| - \log(2)$。
Log-Cosh Loss的优势在于它处处可微且二阶可导,这意味着可以使用牛顿法等需要二阶导数的优化算法。相比Huber Loss在 $\delta$ 点的梯度突变,Log-Cosh Loss提供了更平滑的过渡。
其梯度为:
$$\frac{\partial L_{LogCosh}}{\partial \hat{y}} = -\tanh(y - \hat{y})$$这个梯度被限制在 $[-1, 1]$ 范围内,天然具有防止梯度爆炸的特性。
回归损失函数的选择指南
| 损失函数 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| MSE | 数据干净、无异常值、误差近似高斯分布 | 处处可微、凸函数、梯度平滑 | 对异常值极其敏感 |
| MAE | 数据存在异常值、需要稳健回归 | 对异常值不敏感、凸函数 | 零点不可微、收敛可能震荡 |
| Huber Loss | 需要平衡精确性与稳健性 | 结合MSE和MAE优点、处处可微 | 需要调整 $\delta$ 参数 |
| Log-Cosh | 需要更平滑优化轨迹 | 处处可微、二阶可导、梯度有界 | 实现稍复杂 |
分类任务:超越交叉熵的思考
分类任务的损失函数设计面临着不同的挑战:如何处理类别不平衡、如何处理易分样本与难分样本的不同贡献。
交叉熵损失函数的原理已有专门文章深入讲解,这里重点讨论其他分类损失函数。
Hinge Loss:SVM的遗产
Hinge Loss主要用于支持向量机(SVM),其数学表达式为:
$$L_{Hinge} = \max(0, 1 - y \cdot \hat{y})$$其中 $y \in \{-1, +1\}$ 是真实标签,$\hat{y}$ 是预测值(未经过sigmoid或softmax的原始输出)。
Hinge Loss的核心思想是:只有当样本被正确分类且预测值有足够的置信度(距离决策边界至少为1)时,损失才为零。这种"间隔"概念促使模型学习到更鲁棒的决策边界。
Hinge Loss的梯度为:
$$\frac{\partial L_{Hinge}}{\partial \hat{y}} = \begin{cases} -y & \text{if } y \cdot \hat{y} < 1 \\ 0 & \text{otherwise} \end{cases}$$这个梯度特性意味着:一旦样本被正确分类且有足够置信度,它就不再参与参数更新。这与交叉熵形成对比——交叉熵会持续优化所有样本,使其预测概率尽可能接近1或0。
Hinge Loss在现代深度学习中应用较少,主要因为其不可微点可能导致优化不稳定。但在某些需要最大化间隔的场景,如人脸验证、相似性学习,它仍然有价值。
Focal Loss:解决类别不平衡的革命性方案
Focal Loss由Tsung-Yi Lin等人在2017年的论文《Focal Loss for Dense Object Detection》中提出,专门解决目标检测中极端前景-背景类别不平衡问题。
在目标检测中,一张图像可能包含数千到数万个候选框,但只有少数几个是真正包含目标的正样本。传统交叉熵损失对大量简单负样本的损失贡献求和,主导了训练过程。
标准交叉熵损失为:
$$CE(p, y) = \begin{cases} -\log(p) & \text{if } y = 1 \\ -\log(1-p) & \text{if } y = 0 \end{cases}$$Focal Loss通过添加调制因子 $(1-p_t)^\gamma$ 来降低易分样本的权重:
$$FL(p_t) = -(1-p_t)^\gamma \log(p_t)$$其中 $p_t$ 是正确类别的预测概率:
- 当 $y=1$ 时,$p_t = p$
- 当 $y=0$ 时,$p_t = 1-p$
参数 $\gamma \geq 0$ 控制调制强度:
- 当 $\gamma=0$ 时,Focal Loss退化为标准交叉熵
- 当 $\gamma=2$ 时(论文推荐值),一个预测概率为0.9的易分样本,其损失权重被降低为 $(1-0.9)^2 = 0.01$,即原来的1%
- 一个预测概率为0.5的难分样本,其损失权重为 $(1-0.5)^2 = 0.25$,仅降低到原来的25%
graph TD
A[Focal Loss 工作原理] --> B[标准交叉熵]
B --> C[添加调制因子]
C --> D[1-pt 的γ次方]
D --> E{样本难度判断}
E -->|易分样本 pt≈1| F[权重被大幅降低]
E -->|难分样本 pt≈0.5| G[权重降低较小]
F --> H[模型关注难分样本]
G --> H
H --> I[解决类别不平衡]
这种设计使得模型将注意力集中在难以分类的样本上,而不是被大量易分样本主导训练。
论文中还提出了一个额外的平衡因子 $\alpha$ 来处理类别不平衡:
$$FL(p_t) = -\alpha_t(1-p_t)^\gamma \log(p_t)$$在RetinaNet实验中,使用 $\gamma=2$ 和 $\alpha=0.25$ 的组合取得了最佳效果。
Focal Loss的影响远超目标检测领域。在医学图像分割、长尾分类、欺诈检测等存在严重类别不平衡的场景,Focal Loss都展现了显著效果。
度量学习:学习"相似性"的艺术
传统的分类和回归损失函数处理的是绝对预测:这个图像是猫还是狗?房价是多少?但在许多任务中,核心问题不是"这是什么",而是"这两个有多相似"。
人脸识别、图像检索、推荐系统、签名验证等任务都属于这一范畴。这类任务需要学习一个嵌入空间,使得相似样本在这个空间中靠近,不相似样本则远离。
Triplet Loss:三人行的智慧
Triplet Loss由Florian Schroff等人在2015年的FaceNet论文中提出,成为人脸识别领域的主流方法。
其核心思想是使用三元组进行训练:锚点、正样本、负样本。
- 锚点:一个参考样本
- 正样本:与锚点相似的样本(如同一个人的不同照片)
- 负样本:与锚点不相似的样本(如另一个人的照片)
Triplet Loss定义为:
$$L = \max(0, d(a, p) - d(a, n) + \alpha)$$其中 $d(\cdot, \cdot)$ 是距离度量(通常用欧氏距离),$\alpha$ 是间隔参数。
目标是让锚点与正样本的距离比锚点与负样本的距离至少小 $\alpha$。换句话说,即使最近的负样本,也应该比最远的正样本更远。
Triplet Loss的训练效率高度依赖于三元组的选择策略:
graph TD
A[Triplet Mining 策略] --> B[硬负样本 Hard]
A --> C[半硬负样本 Semi-Hard]
A --> D[易负样本 Easy]
B --> E[d an 小于 d ap]
B --> F[信息量大但可能不稳定]
C --> G[d ap 小于 d an 小于 d ap + margin]
C --> H[平衡效率与稳定性 推荐]
D --> I[d an 远大于 d ap + margin]
D --> J[几乎无信息量 不推荐]
硬负样本:对于给定锚点,选择距离最近的负样本。这些样本最难区分,信息量最大,但也可能导致训练不稳定。
半硬负样本:选择距离大于正样本但仍违反间隔条件的负样本。这些样本提供有用的梯度,同时避免了硬负样本可能带来的不稳定性。
易负样本:距离锚点很远的负样本。这些样本太容易区分,几乎不提供有用信息。
实际训练中,通常采用"在线半硬负样本挖掘"策略:在每个训练batch中动态选择半硬负样本,平衡训练效率与稳定性。
Contrastive Loss:成对比较的简洁
Contrastive Loss是Triplet Loss的前身,使用成对样本而非三元组:
$$L = \begin{cases} d^2(x_1, x_2) & \text{if similar} \\ \max(0, \alpha - d(x_1, x_2))^2 & \text{if dissimilar} \end{cases}$$对于相似样本对,损失是距离的平方,鼓励距离趋近于零;对于不相似样本对,损失仅在距离小于间隔 $\alpha$ 时非零,鼓励距离至少为 $\alpha$。
Contrastive Loss比Triplet Loss更简单,但有一个关键差异:它试图将所有相似样本对推到同一点,而Triplet Loss只要求相似样本比不相似样本更近,不要求它们聚集成簇。这使得Triplet Loss在人脸识别等需要区分大量身份的任务中表现更好。
SimCLR与对比学习的自监督范式
SimCLR(A Simple Framework for Contrastive Learning of Visual Representations)由Ting Chen等人在2020年提出,将对比学习推向了自监督学习的前沿。
SimCLR的核心思想是:对同一张图像应用不同的数据增强(裁剪、颜色变换、模糊等),得到两个"视图"。这两个视图应该比任何其他图像的视图更相似。
SimCLR使用的损失函数称为NT-Xent(Normalized Temperature-scaled Cross Entropy Loss):
$$\ell_{i,j} = -\log\frac{\exp(\text{sim}(z_i, z_j)/\tau)}{\sum_{k=1}^{2N}\mathbb{1}_{[k \neq i]}\exp(\text{sim}(z_i, z_k)/\tau)}$$其中 $\text{sim}(\cdot, \cdot)$ 是余弦相似度,$\tau$ 是温度参数,$N$ 是batch大小。
温度参数 $\tau$ 的作用至关重要:较小的 $\tau$ 使分布更尖锐,模型更关注困难负样本;较大的 $\tau$ 使分布更平滑,训练更稳定。论文推荐 $\tau=0.5$。
SimCLR的成功表明,对比学习可以在完全没有标签的情况下学习到强大的视觉表示。在ImageNet上,SimCLR学到的特征训练线性分类器可以达到76.5%的top-1准确率,与有监督预训练的ResNet-50相当。
语义分割:像素级预测的特殊挑战
语义分割需要为图像中的每个像素预测类别标签。这类任务面临特殊的挑战:类别不平衡极其严重(背景像素可能占99%以上)、边界区域难以处理、需要全局与局部信息的平衡。
Dice Loss:区域重叠的直接优化
Dice Loss直接优化Dice系数,也称为F1分数。Dice系数衡量两个集合的重叠程度:
$$Dice = \frac{2|A \cap B|}{|A| + |B|}$$在语义分割中,$A$ 是预测的正类区域,$B$ 是真实标注的正类区域。Dice Loss定义为:
$$L_{Dice} = 1 - Dice = 1 - \frac{2\sum_i p_i g_i}{\sum_i p_i + \sum_i g_i}$$其中 $p_i$ 是像素 $i$ 的预测概率,$g_i$ 是真实标签(0或1)。
Dice Loss的核心优势在于它对类别不平衡不敏感。即使正类像素只占总像素的0.1%,Dice Loss也会平等对待正类和负类的贡献,因为分母中的 $|A| + |B|$ 自动平衡了两类样本。
然而,Dice Loss的梯度推导较为复杂。当预测与真实完全一致时,Dice Loss为零,但梯度计算可能出现数值问题。实践中通常使用平滑版本:
$$L_{Dice} = 1 - \frac{2\sum_i p_i g_i + \epsilon}{\sum_i p_i + \sum_i g_i + \epsilon}$$其中 $\epsilon$ 是一个小的常数(如 $10^{-6}$)防止除零。
在实践中,Dice Loss常与交叉熵损失结合使用:
$$L_{total} = \lambda_1 L_{CE} + \lambda_2 L_{Dice}$$交叉熵损失提供稳定的像素级梯度,Dice Loss提供全局的区域级监督,两者互补。
损失函数选择的实践框架
面对具体任务时,如何系统地选择损失函数?以下是一个实用的决策框架:
第一步:明确任务类型
- 回归任务:预测连续值,选择MSE、MAE、Huber等
- 分类任务:预测离散类别,选择交叉熵、Focal Loss等
- 度量学习:学习相似性表示,选择Triplet Loss、Contrastive Loss等
- 分割任务:像素级分类,考虑Dice Loss、交叉熵组合等
第二步:分析数据特性
graph TD
A[数据特性分析] --> B{存在异常值?}
B -->|是| C[优先考虑MAE/Huber]
B -->|否| D[可使用MSE]
A --> E{类别是否平衡?}
E -->|不平衡| F[考虑Focal Loss/加权交叉熵]
E -->|平衡| G[标准交叉熵即可]
A --> H{样本难度分布?}
H -->|大量易分样本| I[Focal Loss降低易分样本权重]
H -->|难度均匀| J[标准损失函数]
- 异常值:数据是否包含噪声或异常值?如果是,优先考虑MAE或Huber Loss
- 类别平衡:类别分布是否均衡?不平衡时考虑Focal Loss或加权交叉熵
- 样本难度分布:是否存在大量易分样本占据主导?考虑Focal Loss
第三步:考虑优化约束
- 可微性要求:是否需要使用二阶优化方法?Log-Cosh Loss提供二阶可导
- 训练稳定性:是否需要避免梯度爆炸?Huber Loss、Log-Cosh Loss都有有界梯度
- 收敛精度:是否需要高精度收敛?MSE在接近最优时梯度更小,有利于精确收敛
第四步:实验验证
理论分析只能缩小选择范围,最终选择需要实验验证。建议:
- 从最简单的损失函数开始(MSE用于回归,交叉熵用于分类)
- 观察训练曲线:是否收敛?收敛速度如何?
- 分析预测误差分布:是否存在系统性偏差?
- 尝试替代损失函数,比较性能指标
graph TD
A[任务类型分析] --> B{回归/分类/其他?}
B -->|回归| C{存在异常值?}
C -->|是| D{需要精确收敛?}
D -->|是| E[Huber Loss]
D -->|否| F[MAE]
C -->|否| G[MSE]
B -->|分类| H{类别不平衡?}
H -->|严重| I[Focal Loss]
H -->|轻微| J{需要最大间隔?}
J -->|是| K[Hinge Loss]
J -->|否| L[交叉熵]
B -->|度量学习| M{样本对/三元组?}
M -->|三元组| N[Triplet Loss]
M -->|样本对| O[Contrastive Loss]
B -->|分割| P[Dice Loss + 交叉熵]
常见陷阱与最佳实践
在实践中,损失函数的使用存在一些常见陷阱:
graph TD
A[常见陷阱] --> B[混淆损失函数与性能指标]
A --> C[忽视数据预处理的影响]
A --> D[忽略损失的数值稳定性]
A --> E[忽视损失函数的物理意义]
A --> F[盲目追求新潮损失函数]
B --> B1[训练时最小化MSE]
B --> B2[评估时可看MAPE/F1]
C --> C1[数据尺度影响损失值]
C --> C2[训练前应标准化目标值]
D --> D1[交叉熵涉及log p]
D --> D2[使用数值稳定的实现]
E --> E1[MSE假设高斯分布误差]
E --> E2[MAE假设拉普拉斯分布]
F --> F1[新损失函数需验证场景]
F --> F2[优先选择经典损失函数]
陷阱一:混淆损失函数与性能指标
许多人认为训练时最小化MSE,评估时就只能看MSE。实际上,损失函数和性能指标可以不同。例如,回归任务可以用Huber Loss训练,但用MAPE(平均绝对百分比误差)评估。
陷阱二:忽视数据预处理的影响
损失函数的行为受数据尺度影响。如果目标值在 $[0, 1]$ 范围内,MSE的典型值可能只有 $10^{-3}$ 量级;如果目标值在 $[0, 1000]$ 范围内,MSE可能达到 $10^6$ 量级。这种差异会影响学习率的选择和梯度的量级。最佳实践是在训练前对目标值进行标准化。
陷阱三:忽略损失的数值稳定性
交叉熵损失涉及 $\log(p)$ 运算,当 $p$ 接近0时,$\log(p)$ 趋向负无穷。现代深度学习框架通常使用数值稳定的实现,将softmax和交叉熵合并计算,利用 $\log(\text{softmax}(x))$ 的等价形式避免中间步骤的数值问题。
陷阱四:忽视损失函数的物理意义
不同的损失函数隐含了对误差分布的不同假设。MSE假设误差服从高斯分布,MAE假设误差服从拉普拉斯分布。如果数据的真实误差分布与假设不符,可能导致次优结果。例如,对于重尾分布的误差,使用MAE或Huber Loss比MSE更合适。
陷阱五:盲目追求新潮损失函数
学术界每年都有新的损失函数提出,但并不意味着它们总是更好。新的损失函数通常在特定场景下有效,可能引入新的超参数需要调整。在实际项目中,应该优先选择经过广泛验证的经典损失函数,只有在明确需求时才考虑替代方案。
总结
损失函数是连接模型预测与优化目标的桥梁。选择正确的损失函数,需要理解任务的数学本质、数据的统计特性、以及优化过程的动态行为。
回归任务的核心权衡是精确性与稳健性:MSE追求精确但敏感于异常值,MAE稳健但收敛可能震荡,Huber Loss和Log-Cosh Loss提供了优雅的折中方案。
分类任务的核心挑战是类别不平衡与样本难度分布:交叉熵是通用选择,Focal Loss针对极端不平衡场景提供了有效的解决方案。
度量学习的核心目标是学习有判别性的嵌入空间:Triplet Loss通过三元组比较学习相对距离关系,Contrastive Loss通过成对比较简化了训练流程。
最终,损失函数的选择没有绝对的对错,只有在特定场景下的权衡。理解每个损失函数的设计动机和假设前提,才能在复杂的实际场景中做出明智的选择。
参考文献
- Huber, P. J. (1964). Robust Estimation of a Location Parameter. The Annals of Mathematical Statistics, 35(1), 73-101.
- Lin, T. Y., Goyal, P., Girshick, R., He, K., & Dollar, P. (2017). Focal Loss for Dense Object Detection. ICCV 2017.
- Schroff, F., Kalenichenko, D., & Philbin, J. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering. CVPR 2015.
- Chen, T., Kornblith, S., Norouzi, M., & Hinton, G. (2020). A Simple Framework for Contrastive Learning of Visual Representations. ICML 2020.
- Sudre, C. H., Li, W., Vercauteren, T., Ourselin, S., & Cardoso, M. J. (2017). Generalised Dice Overlap as a Deep Learning Loss Function for Highly Unbalanced Segmentations. DLMIA 2017.
- Loss Functions and Metrics in Deep Learning: A Comprehensive Survey. Artificial Intelligence Review, 2025.
- Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. Chapter 6.2.
- Ruder, S. (2016). An Overview of Gradient Descent Optimization Algorithms. arXiv:1609.04747.