一,损失函数概述
大多数深度学习算法都会涉及某种形式的优化,所谓优化指的是改变 \(x\) 以最小化或最大化某个函数 \(f(x)\) 的任务,我们通常以最小化 \(f(x)\) 指代大多数最优化问题。
在机器学习中,损失函数是代价函数的一部分,而代价函数是目标函数的一种类型。
- 损失函数(
loss function
): 用于定义单个训练样本预测值与真实值之间的误差 - 代价函数(
cost function
): 用于定义单个批次/整个训练集样本预测值与真实值之间的累计误差。 - 目标函数(
objective function
): 泛指任意可以被优化的函数。
损失函数定义:损失函数是深度学习模型训练过程中关键的一个组成部分,其通过前言的内容,我们知道深度学习算法优化的第一步首先是确定目标函数形式。
损失函数大致可分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)。
常用的减少损失函数的优化算法是“梯度下降法”(Gradient Descent)。
二,交叉熵函数-分类损失
交叉熵损失(Cross-Entropy Loss
) 又称为对数似然损失(Log-likelihood Loss)、对数损失,二分类时还可称之为逻辑斯谛回归损失(Logistic Loss)。
2.1,交叉熵(Cross-Entropy)的由来
交叉熵损失的由来参考文档 AI-EDU: 交叉熵损失函数。
1,信息量
信息论中,信息量的表示方式:
\[I(x_j) = -\log (p(x_j)) \]《深度学习》(花书)中称为自信息(self-information) 。
在本文中,我们总是用 \(\text{log}\) 来表示自然对数,其底数为 \(e\)。
- \(x_j\):表示一个事件
- \(p(x_j)\):表示事件 \(x_j\) 发生的概率
- \(I(x_j)\):信息量,\(x_j\) 越不可能发生时,它一旦发生后的信息量就越大
2,熵
信息量只处理单个的输出。我们可以用熵(也称香农熵 Shannon entropy
)来对整个概率分布中的不确定性总量进行量化:
则上面的问题的熵是:
\[\begin{aligned} H(p)&=-[p(x_1) \ln p(x_1) + p(x_2) \ln p(x_2) + p(x_3) \ln p(x_3)] \\\ &=0.7 \times 0.36 + 0.2 \times 1.61 + 0.1 \times 2.30 \\\ &=0.804 \end{aligned} \]3,相对熵(KL散度)
相对熵又称 KL
散度,如果对于同一个随机变量 \(x\) 有两个单独的概率分布 \(P(x)\) 和 \(Q(x)\),则可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异,这个相当于信息论范畴的均方差。
KL散度的计算公式:
\[D_{KL}(p||q)=\sum_{j=1}^m p(x_j) \log {p(x_j) \over q(x_j)} \]\(m\) 为事件的所有可能性(分类任务中对应类别数目)。\(D\) 的值越小,表示 \(q\) 分布和 \(p\) 分布越接近。
4,交叉熵
把上述交叉熵公式变形:
\[\begin{aligned} D_{KL}(p||q)&=\sum_{j=1}^m p(x_j) \log {p(x_j)} - \sum_{j=1}^m p(x_j) \log q(x_j) \\\ &=- H(p(x)) + H(p,q) \end{aligned} \]等式的前一部分恰巧就是 \(p\) 的熵,等式的后一部分,就是交叉熵(机器学习中 \(p\) 表示真实分布(目标分布),\(q\) 表示预测分布):
\[H(p,q) =- \sum_{j=1}^m p(x_j) \log q(x_j) \]在机器学习中,我们需要评估标签值 \(y\) 和预测值 \(a\) 之间的差距熵(即两个概率分布之间的相似性),使用 KL 散度 \(D_{KL}(y||a)\) 即可,但因为样本标签值的分布通常是固定的,即 \(H(a)\) 不变。因此,为了计算方便,在优化过程中,只需要关注交叉熵就可以了。所以,在机器学习中一般直接用交叉熵做损失函数来评估模型。
\[loss = \sum_{j = 1}^{m}y_{j}\text{log}(a_{j}) \]上式是单个样本的情况,\(m\) 并不是样本个数,而是分类个数。所以,对于批量样本的交叉熵损失计算公式(很重要!)是:
\[J = -\frac{1}{n}\sum_{i=1}^n \sum_{j=1}^{m} y_{ij} \log a_{ij} \]其中,\(n\) 是样本数,\(m\) 是分类数。
公式参考文章-AI-EDU: 交叉熵损失函数,但是将样本数改为 \(n\),类别数改为 \(m\)。
有一类特殊问题,就是事件只有两种情况发生的可能,比如“是狗”和“不是狗”,称为 \(0/1\) 分类或二分类。对于这类问题,由于 \(m=2,y_1=1-y_2,a_1=1-a_2\),所以二分类问题的单个样本的交叉熵可以简化为:
\[loss =-[y \log a + (1-y) \log (1-a)] \]二分类对于批量样本的交叉熵计算公式是:
\[J= -\frac{1}{n} \sum_{i=1}^n [y_i \log a_i + (1-y_i) \log (1-a_i)] \]为什么交叉熵的代价函数是求均值而不是求和?
标签:loss,函数,交叉,sum,部件,损失,神经网络,详解,log From: https://www.cnblogs.com/armcvai/p/17050740.html
Cross entropy loss is defined as the “expectation” of the probability distribution of a random variable