Loss
January 2023 (408 Words, 3 Minutes)
在不同任务中的Loss函数
Loss函数即损失函数,用于衡量模型预测结果与真实标签之间的差异,是模型训练过程中的重要指标。
分类任务
- 交叉熵损失函数(Cross-Entropy Loss)
- 公式:$L = - \sum_{i = 1}^{n} y_{i}\log(\hat{y}_{i})$,其中$y_i$是真实标签,$\hat{y}_i$是预测概率。
- 原理:衡量两个概率分布之间的差异,在分类任务中,模型预测的概率分布与真实标签的分布差异越小,损失越小。
- 应用:广泛应用于多分类问题,如手写数字识别、图像分类等。
- 二分类交叉熵损失函数(Binary Cross-Entropy Loss)
- 公式:$L = - [y\log(\hat{y})+(1 - y)\log(1-\hat{y})]$,$y$为真实标签(0或1),$\hat{y}$为预测为正类的概率。
- 原理:是交叉熵损失函数在二分类问题中的特殊形式,用于衡量二分类模型预测结果与真实标签的差异。
- 应用:常见于垃圾邮件分类、疾病检测等二分类场景。
- 焦点损失函数(Focal Loss)
- 公式:$L = - \sum_{i = 1}^{n} \alpha_{i}(1 - \hat{y}{i})^{\gamma}y{i}\log(\hat{y}_{i})$,$\alpha_i$是平衡正负样本的权重,$\gamma$是调节因子。
- 原理:通过降低容易分类样本的权重,聚焦于难分类的样本,解决类别不平衡问题。
- 应用:在目标检测、医学图像分析等存在类别不平衡的任务中表现出色。
回归任务
- 均方误差损失函数(Mean Squared Error, MSE)
- 公式:$L=\frac{1}{n}\sum_{i = 1}^{n}(y_{i}-\hat{y}_{i})^{2}$,$y_i$是真实值,$\hat{y}_i$是预测值。
- 原理:计算预测值与真实值之间差值的平方的平均值,直观地反映了预测值与真实值的偏离程度。
- 应用:广泛应用于各种回归问题,如房价预测、股票价格预测等。
- 平均绝对误差损失函数(Mean Absolute Error, MAE)
- 公式:$L=\frac{1}{n}\sum_{i = 1}^{n}\vert y_{i}-\hat{y}_{i}\vert$。
- 原理:计算预测值与真实值之间差值的绝对值的平均值,对异常值的敏感度低于MSE。
- 应用:在一些对异常值敏感的回归任务中,如时间序列预测,MAE可能更合适。
- Huber损失函数
- 公式:$L(y,\hat{y})=\begin{cases}\frac{1}{2}(y - \hat{y})^{2}&\vert y - \hat{y}\vert\leq\delta\\delta\vert y - \hat{y}\vert-\frac{1}{2}\delta^{2}&\vert y - \hat{y}\vert>\delta\end{cases}$,$\delta$是超参数。
- 原理:结合了MSE和MAE的优点,当预测值与真实值的差值较小时,采用MSE,梯度变化较为平缓;当差值较大时,采用MAE,对异常值更鲁棒。
- 应用:常用于数据中存在一定比例异常值的回归问题。
其他
- 对比损失函数(Contrastive Loss)
- 公式:$L = \frac{1}{2n}\sum_{i = 1}^{n}[yD^{2}(x_{i},x_{j})+(1 - y)\max(m - D^{2}(x_{i},x_{j}),0)^{2}]$,$y$表示样本对的类别关系,$D(x_i,x_j)$是样本$x_i$和$x_j$之间的距离,$m$是边界值。
- 原理:用于度量两个样本之间的相似度或差异度,通过最大化不同类样本之间的距离,最小化同类样本之间的距离,使模型学习到样本的特征表示。
- 应用:在图像检索、人脸识别等任务中广泛应用。
- 三元组损失函数(Triplet Loss)
- 公式:$L=\max(d(a,p)-d(a,n)+m,0)$,$d(a,p)$是锚点样本$a$与正样本$p$之间的距离,$d(a,n)$是锚点样本$a$与负样本$n$之间的距离,$m$是边界值。
- 原理:通过让模型学习到锚点样本与正样本之间的距离小于锚点样本与负样本之间的距离加上一个边界值,来学习到具有区分性的特征表示。
- 应用:在人脸识别、行人重识别等任务中取得了良好的效果。
损失函数
softmax损失
一、定义
Softmax是一种函数,主要用于多分类问题中,将一个含有任意实数的K维向量“压缩”(或归一化)到另一个K维实向量中,使得每一个元素的范围都在$(0,1)$之间,并且所有元素的和为1。这样输出的向量可以被解释为一个概率分布。
设输入向量为$z = [z_1,z_2,\cdots,z_K]$,经过softmax函数转换后的输出向量为$y = [y_1,y_2,\cdots,y_K]$,则softmax函数的计算公式为:
[y_i=\frac{e^{z_i}}{\sum_{j = 1}^{K}e^{z_j}}]
其中,$i = 1,2,\cdots,K$,$e$是自然常数,约等于2.71828。
二、作用原理及示例
- 原理
- 以神经网络的输出层为例,假设神经网络的最后一层输出了一个向量$z$,这个向量的每个元素代表了对应类别(假设有$K$个类别)的得分。但是这些得分可能是任意实数,范围也没有限制。通过softmax函数,将这些得分转换为概率。这样就可以根据概率来判断输入数据属于哪一个类别,概率最高的类别就是模型预测的类别。
- 示例
- 假设神经网络输出一个三维向量$z=[3,1, - 1]$。
- 首先计算指数:$e^{z_1}=e^{3}\approx20.0855$,$e^{z_2}=e^{1}\approx2.7183$,$e^{z_3}=e^{- 1}\approx0.3679$。
- 然后计算分母$\sum_{j = 1}^{3}e^{z_j}=e^{3}+e^{1}+e^{-1}\approx20.0855 + 2.7183+0.3679=23.1717$。
- 最后计算softmax输出:$y_1=\frac{e^{z_1}}{\sum_{j = 1}^{3}e^{z_j}}=\frac{20.0855}{23.1717}\approx0.867$,$y_2=\frac{e^{z_2}}{\sum_{j = 1}^{3}e^{z_j}}=\frac{2.7183}{23.1717}\approx0.117$,$y_3=\frac{e^{z_3}}{\sum_{j = 1}^{3}e^{z_j}}=\frac{0.3679}{23.1717}\approx0.016$。
- 可以看到,输出向量$y = [0.867,0.117,0.016]$,这些值在$(0,1)$之间,且它们的和为1,现在就可以将其看作是输入数据属于这三个类别(假设类别1、类别2、类别3)的概率。
三、在机器学习和深度学习中的应用场景
- 神经网络的输出层
- 在图像分类任务中,如使用卷积神经网络(CNN)对MNIST手写数字数据集(包含0 - 9十个数字类别)进行分类。神经网络最后一层输出一个10维向量,经过softmax函数后,将这个向量转换为每个数字类别对应的概率,从而预测输入图像最可能是哪个数字。
- 自然语言处理中的文本分类
- 例如在情感分析任务中,将文本分为正面、负面、中性三种情感类别。神经网络输出一个3维向量,通过softmax函数得到每种情感的概率,进而判断文本的情感倾向。
- 生成模型中的概率分布计算
- 在生成对抗网络(GAN)和变分自编码器(VAE)等生成模型中,softmax函数也可以用于计算生成数据所属类别的概率分布,辅助模型生成更符合真实分布的数据。
基于欧几里德距离的损失 (Euclidean distance based loss)
对比损失(contrastive loss)
对比损失(Contrastive Loss)是一种在机器学习和深度学习中常用的损失函数,用于度量两个样本之间的相似度或差异度,以下是其详细介绍:
公式及参数
- 公式:(L = \frac{1}{2n}\sum_{i = 1}^{n}[yD^{2}(x_{i},x_{j})+(1 - y)\max(m - D^{2}(x_{i},x_{j}),0)^{2}])
- 参数含义
- (n):表示样本对的数量。
- (y):是一个指示变量,用于表示样本对((x_i, x_j))的类别关系。通常,当(x_i)和(x_j)属于同一类时,(y = 1);当它们属于不同类时,(y = 0)。
- (D(x_i, x_j)):是一个距离函数,用于计算样本(x_i)和(x_j)之间的距离,常见的选择包括欧几里得距离、余弦距离等。
- (m):是一个边界值(margin),用于控制不同类样本之间的最小距离。
原理
- 同类样本:当(y = 1)时,即样本对((x_i, x_j))属于同一类,对比损失函数希望(D^{2}(x_{i},x_{j}))尽可能小,也就是希望同类样本之间的距离越近越好,此时损失函数主要惩罚那些距离较远的同类样本对。
- 不同类样本:当(y = 0)时,即样本对((x_i, x_j))属于不同类,对比损失函数希望(D^{2}(x_{i},x_{j}))尽可能大,并且要大于边界值(m)。(\max(m - D^{2}(x_{i},x_{j}),0)^{2})这一项会在(D^{2}(x_{i},x_{j}))小于(m)时产生非零的损失,从而促使不同类样本之间的距离拉开,大于边界值(m)。
应用
- 图像检索:将图像映射到一个特征空间中,通过对比损失函数使相似的图像在特征空间中的距离更近,不相似的图像距离更远,以便在进行图像检索时能够快速准确地找到相似图像。
- 人脸识别:用于学习人脸特征表示,使得同一个人的不同照片在特征空间中距离较近,而不同人的照片距离较远,从而实现准确的人脸识别和验证。
- 词向量学习:在自然语言处理中,对比损失可以用于学习词向量,使得语义相近的词在向量空间中的距离较近,语义不同的词距离较远,从而得到具有良好语义表示能力的词向量。
- 度量学习:作为度量学习的一种重要损失函数,用于学习数据的度量标准,使得在学习到的度量空间中,数据的相似性能够更好地反映其真实的语义或类别关系。
优势与局限性
- 优势
- 灵活性:可以根据具体任务和数据特点选择不同的距离函数(D(x_i, x_j))和边界值(m),以适应不同的问题需求。
- 可解释性:损失函数的形式直观地反映了对同类样本和不同类样本距离的要求,具有较好的可解释性。
- 适用于多种任务:在图像、语音、文本等多种类型的数据处理任务中都有广泛的应用,能够有效地学习到数据的特征表示。
- 局限性
- 对超参数敏感:边界值(m)等超参数的选择对模型性能有较大影响,需要通过大量实验进行调优。
- 计算复杂度:在处理大规模数据时,计算所有样本对之间的距离可能会导致较高的计算复杂度,影响训练效率。
- 样本对选择:样本对的选择方式会影响模型的训练效果,如果样本对选择不合理,可能会导致模型学习到不准确的特征表示。
三重损失(triplet loss)
三重损失(Triplet Loss)是一种在深度学习中广泛应用于度量学习的损失函数,旨在学习一种特征表示,使得相似样本的特征在特征空间中距离更近,不相似样本的特征距离更远。
公式及参数
- 公式:(L=\sum_{i}^{N}\max(d(f(x_{i}^{a}),f(x_{i}^{p}))-d(f(x_{i}^{a}),f(x_{i}^{n}))+\alpha,0))
- 参数含义
- (N):表示训练集中三元组的数量。
- (x_{i}^{a}):表示第(i)个三元组中的锚点样本(Anchor)。
- (x_{i}^{p}):是与(x_{i}^{a})属于同一类别的正样本(Positive)。
- (x_{i}^{n}):是与(x_{i}^{a})属于不同类别的负样本(Negative)。
- (f(\cdot)):是将样本映射到特征空间的函数,通常是神经网络模型。
- (d(\cdot,\cdot)):是计算特征空间中两个特征向量之间距离的函数,常见的有欧几里得距离、余弦距离等。
- (\alpha):是一个大于零的边界值(Margin),用于控制正样本和负样本之间的最小距离间隔。
原理
- 三重损失的核心思想是通过构建三元组((x_{i}^{a},x_{i}^{p},x_{i}^{n})),使得锚点样本(x_{i}^{a})与正样本(x_{i}^{p})在特征空间中的距离(d(f(x_{i}^{a}),f(x_{i}^{p})))尽可能小,同时与负样本(x_{i}^{n})的距离(d(f(x_{i}^{a}),f(x_{i}^{n})))尽可能大,并且两者之间的差距要大于边界值(\alpha)。
- 当(d(f(x_{i}^{a}),f(x_{i}^{p}))-d(f(x_{i}^{a}),f(x_{i}^{n}))+\alpha>0)时,损失函数会产生非零值,这意味着模型当前的特征表示没有满足要求,需要通过反向传播来调整模型参数,使得正样本和负样本之间的距离差距增大,满足(d(f(x_{i}^{a}),f(x_{i}^{p}))\lt d(f(x_{i}^{a}),f(x_{i}^{n}))-\alpha)。
应用
- 人脸识别:通过三重损失学习到的特征表示可以更好地区分不同人的面部特征,使得同一个人的不同面部图像在特征空间中距离很近,而不同人的面部图像距离较远,从而提高人脸识别的准确率。
- 图像检索:可以将图像映射到特征空间中,使得相似内容的图像在特征空间中距离较近,不相似的图像距离较远,方便用户根据查询图像快速找到相似的图像。
- 语音识别:在语音特征学习中,利用三重损失可以使相似语音样本的特征更紧凑,不同语音样本的特征更分散,有助于提高语音识别的精度。
- 推荐系统:用于学习用户和物品的特征表示,使得相似用户或相似物品的特征在空间中距离较近,从而实现更准确的推荐。
优势与局限性
- 优势
- 直接优化距离关系:能够直接对样本之间的距离关系进行优化,使模型学习到更具判别性的特征表示,更符合度量学习的目标。
- 灵活性高:可以根据不同的任务和数据特点选择合适的距离函数和边界值,适应多种应用场景。
- 可扩展性强:容易与其他损失函数或正则化项结合使用,进一步提高模型的性能和泛化能力。
- 局限性
- 样本选择问题:三元组的选择对模型训练效果影响很大。如果选择不当,可能会导致模型过拟合或学习到不准确的特征表示。
- 计算复杂度高:在处理大规模数据时,计算所有可能的三元组损失计算量巨大,会增加训练时间和资源消耗。
- 对超参数敏感:边界值(\alpha)等超参数的选择需要大量实验来确定,不合适的超参数可能会导致模型性能下降。
中心损失(center loss)
中心损失(Center Loss)是一种用于深度学习的损失函数,主要用于学习具有判别性的特征表示,其相关信息如下:
公式及参数
- 公式:(L_c=\frac{1}{2}\sum_{i = 1}^{m}|x_i - c_{y_i}|^2)
- 参数含义
- (m):表示小批量样本的数量。
- (x_i):是第(i)个样本的特征向量。
- (y_i):是样本(x_i)的类别标签。
- (c_{y_i}):是类别(y_i)所对应的类中心向量。
原理
- 中心损失的基本原理是希望每个样本的特征向量(x_i)与其所属类别的类中心向量(c_{y_i})之间的距离尽可能小。通过最小化中心损失,模型会学习到将同一类别的样本特征映射到特征空间中靠近其类中心的位置,从而使同类样本的特征更加紧凑。
- 在训练过程中,类中心向量(c_{y_i})会根据样本的特征不断更新,以反映当前类别样本特征的中心位置。这样,模型能够学习到更具判别性的特征表示,使得不同类别的样本特征在特征空间中能够更好地被区分开来。
应用
- 人脸识别:在人脸识别任务中,中心损失可以使同一个人的不同面部图像的特征向量更靠近其对应的类中心,不同人的特征向量则远离其他类的中心,提高人脸识别的准确率。
- 图像分类:帮助模型学习到更具代表性和区分度的图像特征,使得不同类别的图像在特征空间中能够清晰地分开,提升图像分类的性能。
- 语音识别:在语音特征学习中,将相同语音类别(如同一发音、同一词汇等)的特征向量聚集在各自的类中心附近,有助于提高语音识别系统对不同语音类别的区分能力。
- 医学图像分析:对于医学图像的分类和特征提取任务,中心损失可以使同类疾病或组织的图像特征更集中,不同类别的特征更分散,辅助医生更准确地进行疾病诊断和分析。
优势与局限性
- 优势
- 增强特征判别性:能够有效引导模型学习到更具判别力的特征,使同类样本的特征更加紧凑,不同类样本的特征更加分离,从而提高模型的分类性能。
- 计算简单:公式相对简单,计算复杂度较低,易于在深度学习模型中实现和优化。
- 可与其他损失函数结合:可以方便地与其他常见的损失函数(如交叉熵损失)结合使用,进一步提升模型的性能。
- 局限性
- 类中心更新问题:类中心的更新方式可能会影响模型的训练效果。如果类中心更新过于频繁或不合理,可能导致模型收敛不稳定或陷入局部最优。
- 对样本分布敏感:当样本的类别分布不均衡时,中心损失可能会受到少数类样本的影响,导致类中心偏移,影响模型对多数类和少数类的特征学习。
- 缺乏全局信息利用:主要关注样本与所属类中心的局部距离,可能忽略了样本之间的全局关系和结构信息,在一些复杂的任务中可能限制模型的性能。
基于角度/余弦边界的损失(Angular/cosine-margin-based loss)
基于角度/余弦边界的损失(Angular/Cosine-Margin-Based Loss)是一类用于深度学习的损失函数,通过引入角度或余弦边界的概念,使模型学习到更具判别性的特征表示,在人脸识别、图像分类等领域有广泛应用。以下是其详细介绍:
常见类型及公式
- 大间隔余弦损失(Large Margin Cosine Loss,LMCL)
- 公式:(L = -\frac{1}{N}\sum_{i = 1}^{N}\log\frac{e^{s(\cos(\theta_{y_{i}})-m)}}{e^{s(\cos(\theta_{y_{i}})-m)}+\sum_{j\neq y_{i}}e^{s\cos\theta_{j}}})
- 参数含义:(N)是批量样本数量,(s)是一个缩放因子,用于调整特征空间的尺度,(\theta_{y_{i}})是样本特征与对应类别权重向量之间的夹角,(m)是余弦边界值,控制类间间隔大小。
- 加性角度边界损失(Additive Angular Margin Loss,AAML)
- 公式:(L = -\frac{1}{N}\sum_{i = 1}^{N}\log\frac{e^{s\cos(\theta_{y_{i}}+m)}}{e^{s\cos(\theta_{y_{i}}+m)}+\sum_{j\neq y_{i}}e^{s\cos\theta_{j}}})
- 参数含义:参数意义与LMCL类似,不同之处在于AAML直接在角度上加上边界值(m),对角度进行更直接的约束。
原理
- 此类损失函数的核心原理是在特征空间中,通过对样本特征与类别权重向量之间的角度或余弦值施加边界约束,来增大类间距离、缩小类内距离。
- 以大间隔余弦损失为例,它要求属于同一类别的样本特征与对应类别权重向量的夹角余弦值在经过缩放和边界调整后,在分类时具有更大的优势,使得分类决策边界更加清晰,从而提高模型的判别能力。加性角度边界损失则是直接在角度上添加边界,更直观地控制类间角度间隔,使不同类别的特征在角度空间中分得更开。
应用
- 人脸识别:通过引入角度/余弦边界的损失函数,可使模型学习到的人脸特征具有更强的判别性,不同人的人脸特征在角度或余弦空间中能够更清晰地分开,提高人脸识别的准确率和鲁棒性。
- 图像分类:帮助模型更好地区分不同类别的图像特征,尤其是对于一些类别相似、特征差异较小的图像,能够通过角度或余弦边界的约束,使模型学习到更具区分度的特征表示,提升图像分类的性能。
- 细粒度分类:在对具有细微差异的物体进行分类任务中,如鸟类、汽车型号等的分类,基于角度/余弦边界的损失函数可以更好地捕捉到这些细微的特征差异,实现更准确的分类。
优势与局限性
- 优势
- 强判别性:通过对角度或余弦值施加边界约束,能够有效增大类间差异、缩小类内差异,使模型学习到的特征具有更强的判别能力,提高分类准确率。
- 对旋转和光照变化鲁棒:在一些涉及图像旋转、光照变化等情况的任务中,基于角度/余弦的度量方式相对欧氏距离等更具鲁棒性,能够更好地保持特征的稳定性,提升模型的泛化能力。
- 可解释性强:从角度或余弦的角度来理解模型的学习过程和分类决策,具有一定的直观性和可解释性,有助于分析模型的性能和优化方向。
- 局限性
- 超参数敏感:损失函数中的缩放因子(s)、边界值(m)等超参数对模型性能影响较大,需要通过大量实验进行调优,合适的超参数组合往往依赖于具体的数据集和任务,调参成本较高。
- 计算复杂度较高:在计算过程中涉及到角度或余弦值的计算,相比于一些简单的损失函数,计算复杂度有所增加,可能会导致模型训练时间延长。
- 对数据分布要求较高:为了使角度或余弦边界的约束能够有效发挥作用,对数据的分布有一定要求,当数据分布不均衡或存在噪声时,可能会影响模型的训练效果和性能。
L1和L2详解(范数、损失函数、正则化)
易混淆距离概念
欧式距离
X和Y都是一个n维的向量,$X = (x_1,x_2,x_3,…,x_n)$,$Y = (y_1,y_2,y_3,…,y_n)$,则欧式距离$D\left( X,Y \right) = \sqrt{\sum_{i = 1}^{n}\left( x_{i} - y_{i} \right)^{2}}$。
L2范数
X是n维的特征,$X = (x_1,x_2,x_3,…,x_n)$。L2范数为${\left |X\right |}{2} = \sqrt{\sum{i = 1}^{n}x_{i}^{2}}$
闵可夫斯基距离
这里的p值是一个变量,当p=2的时候就得到了欧氏距离。
\[D\left( X,Y \right) = \left( \sum_{i = 1}^{n}\left| x_{i} - y_{i} \right|^{p} \right)^{\frac{1}{p}}\]曼哈顿距离
来源于美国纽约市的曼哈顿区是方方正正的城市。
\[D\left( X,Y \right) = \sum_{i = 1}^{n}\left| x_{i} - y_{i} \right|\]损失函数
L1和L2都可以做损失函数使用。
L2损失函数
L2范数损失函数,也被称为最小平方误差(LSE)。它是把目标值yi与估计值f(xi) 的差值的平方和最小化。一般回归问题会使用此损失,离群点对次损失影响较大。
\[L = \sum_{i = 1}^{n}\left( y_{i} - f\left( x_{i} \right) \right)^{2}\]L1损失函数
也被称为最小绝对值偏差(LAD),绝对值损失函数(LAE)。总的说来,它是把目标值 yi 与估计值f(xi) 的绝对差值的总和最小化。
\[L = \sum_{i = 1}^{n}\left| y_{i} - f\left( x_{i} \right) \right|\]L1和L2对比
L1损失函数相比于L2损失函数的鲁棒性更好。L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数大的多,因此模型会对这种类型的样本更加敏感,这就需要调整模型来最小化误差。但是很大可能这种类型的样本是一个异常值,模型就需要调整以适应这种异常值,那么就导致训练模型的方向偏离目标了。
正则化
正则化为什么可以避免过拟合?
正则化是防止过拟合的一种重要技巧。正则化通过降低模型的复杂行,缓解过拟合。过拟合时,拟合函数考虑到了每一个样本点,最终形成的拟合函数波动非常大,即在某些很小的去区间里,函数值的变化很剧烈,拟合函数的系数(即模型中的w)往往非常大。
L1正则
L1正则通常用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,我们可以将0对应的特征遗弃,进而用来选择特征。一定程度上,L1也可以防止模型过拟合。
假设L(W)是未增加正则项的损失,λ是一个超参,控制正则化项的大小。
对应的损失函数:$L = L\left( W \right) + \lambda\sum_{i = 1}^{n}\left | w_{i} \right | $ |
L2正则
主要用来防止模型过拟合,直观上理解就是L2正则化是对于大数值的权重向量进行严厉惩罚。鼓励参数是较小值,如果 w 小于1,那么w2会更小。
对应的损失函数:$L = L\left( W \right) + \lambda\sum_{i = 1}^{n}w_{i}^{2}$
L1为什么会产生稀疏解?
稀疏性:很多参数值为0。