全文共15000余字,预计阅读时间约30~50分钟 | 满满干货,建议收藏!
一、前言
本篇文章将聚焦于逻辑回归的参数估计过程,我们将通过深入讨论极大似然估计和交叉熵损失函数,来理解这一关键步骤。
二、什么是参数估计
从专业的角度来说,参数估计是通过最优化方法(如最大似然估计)来确定最佳拟合数据的模型参数。l例如我们上一篇文章中最后一部分模拟案例中的w0
、w1
和w2
,这些参数定义了特征x1
和``x2如何与目标
y`相关联。我们的目标是找到一组参数,使得模型对数据的预测与实际的目标值尽可能地接近。
从通俗的角度来解释,我们可以将参数估计看作是一个尝试找到最佳解决方案的过程。例如,假设你正在试图预测一个人是否会购买一款产品,你可能有各种各样的信息,如他们的年龄、收入等。这里的参数(w0
,w1
,w2
…Wn
)可以看作是你赋予这些信息的“重要性”。通过参数估计,你试图找出哪些信息更重要,或者更具预测力,以便于你更准确地预测一个人是否会购买该产品。
换句话说,参数估计就像是在尝试找出“规则”,这些“规则”(参数)定义了输入(特征)和输出(预测目标)之间的关系。一旦找到了这些“规则”,就可以用它们来预测新的、未知的情况。
在逻辑回归中,我们通常通过最大似然估计来确定这些参数的值。最大似然估计的核心思想是找到一组参数值,使得在这组参数下观测到我们有的数据的可能性最大。
三、极大似然估计在逻辑回归中的应用
在解释极大似然估计这个概念的时候,直接提概念理解起来是一头雾水的,至少我当初学的的时候是这样的,所以我想换一种思路,先不提极大似然估计是什么,我们通过解析逻辑回归使用极大似然估计拟合参数的过程,来一步一步的引出极大似然估计的。
3.1 数据解释
首先,我们模拟一个小型的数据集,其中 x
是我们的输入值(特征),y
是我们要预测的输出值(目标)。
x | y |
---|---|
1 | 0 |
2 | 0 |
3 | 1 |
4 | 1 |
5 | 1 |
数据集是一个简单的二分类问题数据集。它包含了五个样本,每个样本都有一个特征 x
和一个对应的目标值 y
。x
的取值在 1 到 5 之间,而 y
是二分类目标,只能取 0 或 1。
在这个例子中,我们可以看到当 x
较小(1 和 2)时,y
的值为 0,而当 x
较大(3,4,5)时,y
的值为 1。我们可以假设在这个数据集中存在一种趋势,即 x
值越大,y
为 1 的概率也越大。这种趋势是逻辑回归试图学习的。
所以,我们可以使用逻辑回归模型来拟合这些数据,通过学习 x
和 y
之间的关系,从而可以预测在给定 x
值的情况下,y
为 1 的概率。在逻辑回归模型中,这个预测的概率是由 Sigmoid 函数得到的,而模型的目标就是找到最佳的参数 w
和 b
,使得预测的 y
值尽可能地接近真实的 y
值。我们接下来的步骤是用极大似然估计法来找到这些参数。
3.2 构建似然函数
3.2.1 逻辑回归的概率表示
我们在之前的文章中也讲过机器学习的基本建模流程,对于逻辑回归也是一样,要求解模型参数,就要先构造损失函数。
在逻辑回归模型中,我们采用的是概率模型。对于二分类问题,我们有 P ( y = 1 ∣ x ; w ) P(y=1|x;w) P(y=1∣x;w) 和 P ( y = 0 ∣ x ; w ) P(y=0|x;w) P(y=0∣x;w)。我们假设 P ( y = 1 ∣ x ; w ) P(y=1|x;w) P(y=1∣x;w) 的形式是 Sigmoid 函数,即
y = 1 1 + e − ( w T ⋅ x + b ) (1) y = \frac{1}{1 + e^{-(w^T \cdot x + b)}} \\ \tag{1} y=1+e−(wT⋅x+b)1(1)
其中 w
和 b
是我们需要找到的模型参数。
因为是二分类,
P
(
y
=
1
∣
x
;
w
)
P(y=1|x;w)
P(y=1∣x;w) 和
P
(
y
=
0
∣
x
;
w
)
P(y=0|x;w)
P(y=0∣x;w) 必然满足:
P
(
y
=
1
∣
x
;
w
)
+
P
(
y
=
0
∣
x
;
w
)
=
1
P(y=1|x;w) + P(y=0|x;w) = 1
P(y=1∣x;w)+P(y=0∣x;w)=1。因此,可以推导出
P
(
y
=
0
∣
x
;
w
)
P(y=0|x;w)
P(y=0∣x;w) 的形式为
1
−
P
(
y
=
1
∣
x
;
w
)
1 - P(y=1|x;w)
1−P(y=1∣x;w),这样可以确保
P
(
y
=
1
∣
x
;
w
)
P(y=1|x;w)
P(y=1∣x;w) 和
P
(
y
=
0
∣
x
;
w
)
P(y=0|x;w)
P(y=0∣x;w) 的概率总和为1,符合概率的基本属性。即:
当
y
=
1
时:
P
(
y
=
1
∣
x
;
w
)
=
1
1
+
e
−
(
w
0
+
w
1
x
)
\begin{equation} \text{当} y = 1时:P(y=1|x;w) = \frac{1}{1 + e^{-(w_0 + w_1 x)}} \\ \tag{2} \end{equation}
当y=1时:P(y=1∣x;w)=1+e−(w0+w1x)1(2)
当 y = 0 时: P ( y = 0 ∣ x ; w ) = e − ( w 0 + w 1 x ) 1 + e − ( w 0 + w 1 x ) \begin{equation} \text{当} y = 0时:P(y=0|x;w) = \frac{e^{-(w_0 + w_1 x)}}{1 + e^{-(w_0 + w_1 x)}} \tag{3} \end{equation} 当y=0时:P(y=0∣x;w)=1+e−(w0+w1x)e−(w0+w1x)(3)
其中,w
是模型的参数,需要从数据中估计得到。这两个公式分别表示了在给定模型参数和输入x的条件下,观察到
y
=
1
y=1
y=1和
y
=
0
y=0
y=0的概率。
3.2.2 构建似然项
在知道了如何用逻辑回归表示y=1
和y=0
的概率表示形式后,我们接下来可以带入数据:
-
对于 x = 1 , y = 0 x=1, y=0 x=1,y=0:
P ( y = 0 ∣ x = 1 ) = e − ( w 0 + w 1 × 1 ) 1 + e − ( w 0 + w 1 × 1 ) \begin{equation} P(y=0|x=1) = \frac{e^{-(w_0 + w_1 \times 1)}}{1 + e^{-(w_0 + w_1 \times 1)}} \tag{4} \end{equation} P(y=0∣x=1)=1+e−(w0+w1×1)e−(w0+w1×1)(4) -
对于 x = 2 , y = 0 x=2, y=0 x=2,y=0:
P ( y = 0 ∣ x = 2 ) = e − ( w 0 + w 1 × 2 ) 1 + e − ( w 0 + w 1 × 2 ) \begin{equation} P(y=0|x=2) = \frac{e^{-(w_0 + w_1 \times 2)}}{1 + e^{-(w_0 + w_1 \times 2)}} \tag{5} \end{equation} P(y=0∣x=2)=1+e−(w0+w1×2)e−(w0+w1×2)(5) -
对于 x = 3 , y = 1 x=3, y=1 x=3,y=1:
P ( y = 1 ∣ x = 3 ) = 1 1 + e − ( w 0 + w 1 × 3 ) \begin{equation} P(y=1|x=3) = \frac{1}{1 + e^{-(w_0 + w_1 \times 3)}} \tag{6} \end{equation} P(y=1∣x=3)=1+e−(w0+w1×3)1(6)
- 对于 x = 4 , y = 1 x=4, y=1 x=4,y=1:
P ( y = 1 ∣ x = 4 ) = 1 1 + e − ( w 0 + w 1 × 4 ) \begin{equation} P(y=1|x=4) = \frac{1}{1 + e^{-(w_0 + w_1 \times 4)}} \tag{7} \end{equation} P(y=1∣x=4)=1+e−(w0+w1×4)1(7)
- 对于 x = 5 , y = 1 x=5, y=1 x=5,y=1:
P ( y = 1 ∣ x = 5 ) = 1 1 + e − ( w 0 + w 1 × 5 ) \begin{equation} P(y=1|x=5) = \frac{1}{1 + e^{-(w_0 + w_1 \times 5)}} \tag{8} \end{equation} P(y=1∣x=5)=1+e−(w0+w1×5)1(8)
这五个公式即为逻辑回归模型在给定 w 0 w_0 w0 和 w 1 w_1 w1 下,各个样本 x x x 对应 y = 0 y=0 y=0 和 y = 1 y=1 y=1 的概率表达式。
那什么是似然项?似然项其实和数据是一一对应的,带入多少条数据进行建模,似然函数中就有多少个似然项。上面的5个样本,就分别对应5个似然项。
我们把上述过程转化成通用表达形式,为后面的推导做准备。
逻辑回归模型预测"事件发生的概率( y = 1 y=1 y=1)"和"事件不发生的概率( y = 0 y=0 y=0)"的公式 ( 2 ) (2) (2)和 ( 3 ) (3) (3)
首先,我们定义
P
(
y
=
1
∣
x
;
w
)
P(y=1|x;w)
P(y=1∣x;w)的值为
P
1
(
x
;
w
)
P_1(x;w)
P1(x;w),那么
P
(
y
=
0
∣
x
;
w
)
P(y=0|x;w)
P(y=0∣x;w)的值就是
1
−
P
1
(
x
;
w
)
1-P_1(x;w)
1−P1(x;w)。这是因为,
P
(
y
=
1
∣
x
;
w
)
P(y=1|x;w)
P(y=1∣x;w)和
P
(
y
=
0
∣
x
;
w
)
P(y=0|x;w)
P(y=0∣x;w)在给定
x
x
x的条件下的概率和必须为1。也就是说,
y
y
y的取值只能是0或1,所以在给定
x
x
x的情况下,事件
y
=
1
y=1
y=1和事件
y
=
0
y=0
y=0的概率和为1。即:
P
1
(
x
;
w
)
+
(
1
−
P
1
(
x
;
w
)
)
=
1
(9)
P_1(x;w) + (1-P_1(x;w)) = 1 \\ \tag{9}
P1(x;w)+(1−P1(x;w))=1(9)
接着,我们希望将 P ( y ∣ x ; w ) P(y|x;w) P(y∣x;w)表达成一个通用形式,它可以处理 y = 1 y=1 y=1和 y = 0 y=0 y=0两种情况。这可以通过将 P ( y ∣ x ) P(y|x) P(y∣x)写为:
P ( y ∣ x ; w ) = ( P 1 ( x ; w ) ) y ( 1 − P 1 ( x ; w ) ) ( 1 − y ) (10) P(y|x;w) = (P_1(x;w))^{y}(1-P_1(x;w))^{(1-y)} \tag{10} P(y∣x;w)=(P1(x;w))y(1−P1(x;w))(1−y)(10)
这个公式在 y = 1 y=1 y=1和 y = 0 y=0 y=0的情况下都能成立。当 y = 1 y=1 y=1时, ( 1 − y ) (1-y) (1−y)为0,所以 ( 1 − P 1 ( x ; w ) ) ( 1 − y ) (1-P_1(x;w))^{(1-y)} (1−P1(x;w))(1−y)为1,公式就简化为 P 1 ( x ; w ) P_1(x;w) P1(x;w),这正是我们定义的 P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x)。相反,当 y = 0 y=0 y=0时, y y y为0,所以 ( P 1 ( x ) ) y (P_1(x))^{y} (P1(x))y为1,公式就简化为 1 − P 1 ( x ) 1-P_1(x) 1−P1(x),这正是我们定义的 P ( y = 0 ∣ x ) P(y=0|x) P(y=0∣x)。
然后我们把公式(10)中的 y y y和 x x x替换为 y i y_i yi和 x i x_i xi,得到第i个样本点的似然项:
P ( y i ∣ x i ; w ) = P 1 ( x i ; w ) y i ( 1 − P 1 ) ( x i ; w ) ( 1 − y i ) (11) P(y_i|x_i;w) = P_1(x_i;w)^{y_i}(1-P_1)(x_i;w)^{(1-y_i)} \tag{11} P(yi∣xi;w)=P1(xi;w)yi(1−P1)(xi;w)(1−yi)(11)
这个公式(11)表示在参数 w 0 w_0 w0和 w 1 w_1 w1给定的情况下,观测到数据 y i y_i yi的概率。
3.2.3 构建似然函数
在统计学中,似然函数就是由一系列的似然项(即每个样本点的概率)组成的。我们上一步根据数据,得到了全部数据(5条样本)的似然项,似然函数就是所有这些似然项的乘积。
我们的似然函数就是5个样本的似然项的乘积,所以我们可以写为:
L ( w 0 , w 1 ) = P ( y = 0 ∣ x = 1 ) ⋅ P ( y = 0 ∣ x = 2 ) ⋅ P ( y = 1 ∣ x = 3 ) ⋅ P ( y = 1 ∣ x = 4 ) ⋅ P ( y = 1 ∣ x = 5 ) (12) L(w_0, w_1) = P(y=0|x=1) \cdot P(y=0|x=2) \cdot P(y=1|x=3) \cdot P(y=1|x=4) \cdot P(y=1|x=5) \tag{12} L(w0,w1)=P(y=0∣x=1)⋅P(y=0∣x=2)⋅P(y=1∣x=3)⋅P(y=1∣x=4)⋅P(y=1∣x=5)(12)
然后,我们把具体的概率表达式代入,得到似然函数的具体形式:
L ( w 0 , w 1 ) = ( e − ( w 0 + w 1 ⋅ 1 ) 1 + e − ( w 0 + w 1 ⋅ 1 ) ) ⋅ ( e − ( w 0 + w 1 ⋅ 2 ) 1 + e − ( w 0 + w 1 ⋅ 2 ) ) ⋅ ( 1 1 + e − ( w 0 + w 1 ⋅ 3 ) ) ⋅ ( 1 1 + e − ( w 0 + w 1 ⋅ 4 ) ) ⋅ ( 1 1 + e − ( w 0 + w 1 ⋅ 5 ) ) (13) L(w_0, w_1) = \left(\frac{e^{-(w_0 + w_1 \cdot 1)}}{1 + e^{-(w_0 + w_1 \cdot 1)}}\right) \cdot \left(\frac{e^{-(w_0 + w_1 \cdot 2)}}{1 + e^{-(w_0 + w_1 \cdot 2)}}\right) \cdot \left(\frac{1}{1 + e^{-(w_0 + w_1 \cdot 3)}}\right) \cdot \left(\frac{1}{1 + e^{-(w_0 + w_1 \cdot 4)}}\right) \cdot \left(\frac{1}{1 + e^{-(w_0 + w_1 \cdot 5)}}\right) \tag{13} L(w0,w1)=(1+e−(w0+w1⋅1)e−(w0+w1⋅1))⋅(1+e−(w0+w1⋅2)e−(w0+w1⋅2))⋅(1+e−(w0+w1⋅3)1)⋅(1+e−(w0+w1⋅4)1)⋅(1+e−(w0+w1⋅5)1)(13)
换成通用的表示方法:
L
(
w
)
=
∏
i
=
1
n
(
P
1
(
x
i
;
w
)
)
y
i
(
1
−
P
1
(
x
i
;
w
)
)
(
1
−
y
i
)
(14)
L(w) = \prod_{i=1}^n (P_1(x_i;w))^{y_i}(1-P_1(x_i;w))^{(1-y_i)} \tag{14}
L(w)=i=1∏n(P1(xi;w))yi(1−P1(xi;w))(1−yi)(14)
这里, n n n是样本的数量。这个公式表示了在给定的模型参数下,得到观测数据的概率。
然而,直接优化这个乘积形式的似然函数在实际操作中可能会遇到困难,因为很多小的概率值乘在一起,可能会导致数值上的不稳定。因此,通常会对这个似然函数取对数,得到对数似然函数:
我们知道,对数函数具有以下的性质:
- ln ( a b ) = ln ( a ) + ln ( b ) \ln(ab) = \ln(a) + \ln(b) ln(ab)=ln(a)+ln(b)
- ln ( a b ) = b ln ( a ) \ln(a^b) = b\ln(a) ln(ab)=bln(a)
我们可以使用这些性质来将乘积转换为求和。对公式(14)两边取对数:
ln L ( w ) = ln ∏ i = 1 n ( P 1 ( x i ; w ) ) y i ( 1 − P 1 ( x i ; w ) ) ( 1 − y i ) (15) \ln L(w) = \ln \prod_{i=1}^n (P_1(x_i;w))^{y_i}(1-P_1(x_i;w))^{(1-y_i)} \tag{15} lnL(w)=lni=1∏n(P1(xi;w))yi(1−P1(xi;w))(1−yi)(15)
使用对数函数的第一个性质,将乘积转换为求和:
ln L ( w ) = ∑ i = 1 n ln ( ( P 1 ( x i ; w ) ) y i ( 1 − P 1 ( x i ; w ) ) ( 1 − y i ) ) (16) \ln L(w) = \sum_{i=1}^n \ln \left((P_1(x_i;w))^{y_i}(1-P_1(x_i;w))^{(1-y_i)}\right) \tag{16} lnL(w)=i=1∑nln((P1(xi;w))yi(1−P1(xi;w))(1−yi))(16)
然后使用对数函数的第二个性质,将幂运算转换为乘法:
ln L ( w ) = ∑ i = 1 n [ y i ln ( P 1 ( x i ; w ) ) + ( 1 − y i ) ln ( 1 − P 1 ( x i ; w ) ) ] (17) \ln L(w) = \sum_{i=1}^n \left[ y_i \ln (P_1(x_i;w)) + (1-y_i) \ln (1-P_1(x_i;w)) \right] \tag{17} lnL(w)=i=1∑n[yiln(P1(xi;w))+(1−yi)ln(1−P1(xi;w))](17)
至此,我们从原始的似然函数得到了对数似然函数,这个对数似然函数的形式就是我们常说的交叉熵损失函数。然而,在实际的优化过程中,我们通常需要将问题转化为最小化问题,因为我们常用的优化算法,如梯度下降,是用于最小化函数的。因此,我们将对数似然函数取负,得到负对数似然函数,即:
L l o s s ( w ) = − ∑ i = 1 n [ y i ln ( P 1 ( x i ; w ) ) + ( 1 − y i ) ln ( 1 − P 1 ( x i ; w ) ) ] (18) L_{loss}(w) = - \sum_{i=1}^n \left[ y_i \ln (P_1(x_i;w)) + (1-y_i) \ln (1-P_1(x_i;w)) \right] \tag{18} Lloss(w)=−i=1∑n[yiln(P1(xi;w))+(1−yi)ln(1−P1(xi;w))](18)
我们的目标就是寻找一组参数使得这个负对数似然函数(也就是损失函数)最小。
3.3 极大似然估计(MLE)
在了解了上述的推导后,我们再来谈一下什么是极大似然估计
极大似然估计(Maximum Likelihood Estimation, MLE)是一种基于概率统计的参数估计方法。它的基本思想是:在已知某个参数能使得数据出现的概率最大的情况下,我们就可以认为这个参数就是最优参数。
换句话说,给定一个模型和一组观测数据,我们可以计算出在不同参数值下得到这组数据的概率。这个概率被称为似然函数。我们的目标就是找到使得这个概率(即似然函数)最大的参数值,这个参数值就是极大似然估计的结果。
然而,直接优化似然函数可能在实际操作中遇到困难,因为这个函数通常是一些概率值的乘积,可能导致数值计算上的问题。因此,我们通常会对似然函数取对数,得到对数似然函数。由于对数函数是单调递增函数,所以优化对数似然函数得到的结果与优化原始的似然函数是一样的。
在上述的过程中,我们将对数似然函数转化为了一个求和的形式,这是由对数函数的性质决定的。在实际的优化过程中,我们通常需要将问题转化为最小化问题,因为我们常用的优化算法,如梯度下降,是用于最小化函数的。因此,我们将对数似然函数取负,得到负对数似然函数,也就是我们常说的损失函数,我们的目标就是寻找一组参数使得这个负对数似然函数(损失函数)最小。这个过程就是极大似然估计的过程。
四、交叉熵损失函数
在二分类问题中,负对数似然函数正是我们所说的交叉熵损失函数。然而,交叉熵损失函数的构建并非只能通过似然函数,它也可以通过KL散度得到。KL散度,源自信息论,被广泛用于量化两个概率分布的相异度。接下来,我们将从KL散度的视角去探索交叉熵损失函数的构造过程。
4.1 熵
在信息论中,熵被用来描述信息的不确定度。信息的熵越大,意味着信息的不确定性越大,反之亦然。一个离散随机变量 X X X的熵( H ( X ) H(X) H(X))被定义为其所有可能结果的概率质量函数(PMF)的期望的负对数。如果 X X X有 n n n个可能的取值,数学表达式如下:
H ( X ) = − ∑ i = 1 n P ( x i ) log 2 P ( x i ) (19) H(X) = - \sum_{i=1}^{n} P(x_i) \log_2 P(x_i) \tag{19} \\ H(X)=−i=1∑nP(xi)log2P(xi)(19)
在这个公式中:
- H ( X ) H(X) H(X) 是随机变量 X X X的熵。
- ∑ i = 1 n \sum_{i=1}^{n} ∑i=1n 表示对所有随机变量 X X X的可能值 x i x_i xi进行求和,这些可能值 x i x_i xi来自定义域 X \mathcal{X} X,且 X \mathcal{X} X有 n n n个元素。
- P ( x i ) P(x_i) P(xi) 是随机变量 X X X取某个特定值 x i x_i xi的概率。
- log 2 \log_2 log2 是以2为底的对数。在信息论中通常使用这个,因为信息通常以比特为单位度量。
这个公式基本上说明了:为了量化信息的不确定性,我们对每个可能的事件 x i x_i xi,计算它的概率 P ( x i ) P(x_i) P(xi)乘以它的对数概率的负数,然后把这些值加起来。
假设我们有一个天气预报系统,预测的天气有晴天、雨天、多云三种可能结果,其对应的概率分别为0.5、0.2和0.3。我们可以计算这个系统的信息熵。
事件(天气) | 概率 P ( x i ) P(x_i) P(xi) | P ( x i ) log 2 P ( x i ) P(x_i) \log_2 P(x_i) P(xi)log2P(xi) |
---|---|---|
晴天 | 0.5 | -0.5 * log2(0.5) = 0.5 |
雨天 | 0.2 | -0.2 * log2(0.2) ≈ 0.464 |
多云 | 0.3 | -0.3 * log2(0.3) ≈ 0.521 |
我们使用下面的公式来计算熵:
H ( X ) = − ∑ i = 1 n P ( x i ) log 2 P ( x i ) (20) H(X) = - \sum_{i=1}^{n} P(x_i) \log_2 P(x_i) \tag{20} \\ H(X)=−i=1∑nP(xi)log2P(xi)(20)
代入表中的值,我们有:
H ( X ) = 0.5 + 0.464 + 0.521 = 1.485 (21) H(X) = 0.5 + 0.464 + 0.521 = 1.485 \tag{21} H(X)=0.5+0.464+0.521=1.485(21)
所以,这个天气预报系统的信息熵是1.485比特。这意味着如果我们要预测天气的结果,我们平均需要1.485比特的信息。
4.2 相对熵(KL 散度)
相对熵(Relative Entropy),也被称为Kullback-Leibler(KL)散度,是衡量同一随机变量在两个不同概率分布下差异的度量。数学定义如下:
假设有两个离散概率分布 P P P和 Q Q Q,定义在同一概率空间上的随机变量 X X X的取值集合上,那么, P P P相对于 Q Q Q的相对熵(或KL散度)定义为:
D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) log P ( x i ) Q ( x i ) (22) D_{KL}(P||Q) = \sum_{i=1}^n P(x_i) \log \frac{P(x_i)}{Q(x_i)} \tag{22} \\ DKL(P∣∣Q)=i=1∑nP(xi)logQ(xi)P(xi)(22)
直观上看,如果 P P P和 Q Q Q是相同的分布,那么他们的相对熵为0,表示没有差异。如果 P P P和 Q Q Q的差异增大,那么他们的相对熵也会增大。需要注意的是,相对熵并不是对称的,即 D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P||Q) \neq D_{KL}(Q||P) DKL(P∣∣Q)=DKL(Q∣∣P)。
在机器学习和统计中,KL散度常被用来衡量生成模型产生的数据分布与真实数据分布的差异。一般令Q为模型输出结果,而P为数据集标签真实结果,以此来判断模型输出结果是否足够接近真实情况。
4.3 从相对熵推导交叉熵
交叉熵(Cross-Entropy)是一个常用于机器学习中的损失函数,特别是在分类问题中。它可以通过Kullback-Leibler散度(KL散度)推导得到。首先,我们回顾一下KL散度的定义,见公式(22)
我们将这个表达式分解为两部分:
D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) log P ( x i ) − ∑ i = 1 n P ( x i ) log Q ( x i ) (23) D_{KL}(P||Q) = \sum_{i=1}^{n} P(x_i) \log P(x_i) - \sum_{i=1}^{n} P(x_i) \log Q(x_i) \tag{23} DKL(P∣∣Q)=i=1∑nP(xi)logP(xi)−i=1∑nP(xi)logQ(xi)(23)
这里的第一部分就是熵 H ( P ) H(P) H(P)的负值:
H ( P ) = − ∑ i = 1 n P ( x i ) log P ( x i ) (24) H(P) = -\sum_{i=1}^{n} P(x_i) \log P(x_i) \tag{24} H(P)=−i=1∑nP(xi)logP(xi)(24)
而第二部分则是交叉熵 C E ( P , Q ) CE(P,Q) CE(P,Q):
C E ( P , Q ) = − ∑ i = 1 n P ( x i ) log Q ( x i ) (25) CE(P,Q) = -\sum_{i=1}^{n} P(x_i) \log Q(x_i) \tag{25} CE(P,Q)=−i=1∑nP(xi)logQ(xi)(25)
我们可以将KL散度表示为熵和交叉熵的差:
D K L ( P ∣ ∣ Q ) = − H ( P ) + C E ( P , Q ) (26) D_{KL}(P||Q) = -H(P) + CE(P, Q) \tag{26} DKL(P∣∣Q)=−H(P)+CE(P,Q)(26)
最后,我们可以得到交叉熵 C E ( P , Q ) CE(P,Q) CE(P,Q)是熵 H ( P ) H(P) H(P)与KL散度 D K L ( P ∣ ∣ Q ) D_{KL}(P||Q) DKL(P∣∣Q)的和:
C E ( P , Q ) = H ( P ) + D K L ( P ∣ ∣ Q ) (27) CE(P,Q) = H(P) + D_{KL}(P||Q) \tag{27} CE(P,Q)=H(P)+DKL(P∣∣Q)(27)
所以,我们就得到了交叉熵的定义。
4.2 交叉熵损失应用示例
在机器学习中,交叉熵通常被用作损失函数,而不是KL散度,主要有以下两个原因:
- 计算简便:在许多情况下,我们的目标是让预测的分布尽可能接近真实的分布。在这种情况下,KL散度和交叉熵只有一个常数项的差别,即熵项 H ( P ) H(P) H(P)。因为熵项是基于真实分布的,对于给定的数据集,它是一个常数,不会影响优化过程(优化器主要关注的是可以改变的部分,即模型参数)。因此,我们通常会忽略这个常数项,直接计算交叉熵,这样计算起来更加简便。
- 数值稳定性:在实际的计算过程中,直接计算交叉熵通常更稳定。特别是当预测的概率接近0或1时,直接计算KL散度可能会导致数值问题(例如除以零或对零取对数)。而计算交叉熵时,我们只需要计算针对预测分布的负对数概率,这在数值上通常更稳定。
因此,虽然KL散度在理论上提供了一种衡量两个概率分布之间差异的方法,但在实际的机器学习应用中,我们通常使用交叉熵作为损失函数。
还是使用和极大似然估计构建损失函数一样的数据来说明:假设我们有以下的数据集,其中 x x x表示输入特征, y y y表示对应的标签,P1(x;w)是预测的概率:
x | y | P1(x;w) |
---|---|---|
1 | 0 | 0.1 |
2 | 0 | 0.2 |
3 | 1 | 0.8 |
4 | 1 | 0.9 |
5 | 1 | 0.7 |
回顾一下交叉熵的计算公式(25),对于第一条样本来说,它为正样本的概率是0.1,那么为负样本的概率就等于 1 - 0.1 = 0.9, 代入公式,计算得:
C E ( P , Q ) = − 0 ∗ log ( 0.9 ) − 1 ∗ log ( 0.1 ) (28) CE(P, Q) = -0 * \log(0.9) - 1 * \log(0.1) \tag{28} CE(P,Q)=−0∗log(0.9)−1∗log(0.1)(28)
这就是第一条样本的交叉熵损失计算过程,现在我们来推导出一般形式。
4.4 一般形式推导
对于一条样本 x i x_i xi:
-
如果 y i = 0 y_i = 0 yi=0,即样本属于负类,那么真实分布 P ( x i ) P(x_i) P(xi) 是 ( 1 , 0 ) (1, 0) (1,0),因为它100%属于负类,0%属于正类。此时,模型预测的分布 Q ( x i ) Q(x_i) Q(xi) 是 ( P 1 ( x i ; w ) , 1 − P 1 ( x i ; w ) ) (P_1(x_i;w), 1-P_1(x_i;w)) (P1(xi;w),1−P1(xi;w)),其中 P 1 ( x i ; w ) P_1(x_i;w) P1(xi;w) 是模型预测的正类概率。因此,对于这条样本,我们的交叉熵就是 − 1 ⋅ log ( 1 − P 1 ( x i ; w ) ) − 0 ⋅ log ( P 1 ( x i ; w ) ) -1 \cdot \log(1-P_1(x_i;w)) - 0 \cdot \log(P_1(x_i;w)) −1⋅log(1−P1(xi;w))−0⋅log(P1(xi;w)),简化之后就是 − log ( 1 − P 1 ( x i ; w ) ) -\log(1-P_1(x_i;w)) −log(1−P1(xi;w))。
-
如果 y i = 1 y_i = 1 yi=1,即样本属于正类,那么真实分布 P ( x i ) P(x_i) P(xi) 是 ( 0 , 1 ) (0, 1) (0,1),因为它100%属于正类,0%属于负类。此时,模型预测的分布 Q ( x i ) Q(x_i) Q(xi) 仍然是 ( P 1 ( x i ; w ) , 1 − P 1 ( x i ; w ) ) (P_1(x_i;w), 1-P_1(x_i;w)) (P1(xi;w),1−P1(xi;w))。因此,对于这条样本,我们的交叉熵就是 − 0 ⋅ log ( 1 − P 1 ( x i ; w ) ) − 1 ⋅ log ( P 1 ( x i ; w ) ) -0 \cdot \log(1-P_1(x_i;w)) - 1 \cdot \log(P_1(x_i;w)) −0⋅log(1−P1(xi;w))−1⋅log(P1(xi;w)),简化之后就是 − log ( P 1 ( x i ; w ) ) -\log(P_1(x_i;w)) −log(P1(xi;w))。
结合上述两种情况,我们可以将交叉熵的计算公式写为一个统一的形式,即
C E ( P , Q ) = − [ y i ⋅ log ( P 1 ( x i ; w ) ) + ( 1 − y i ) ⋅ log ( 1 − P 1 ( x i ; w ) ) ] (29) CE(P, Q) = -[y_i \cdot \log(P_1(x_i;w)) + (1 - y_i) \cdot \log(1 - P_1(x_i;w))] \tag{29} \\ CE(P,Q)=−[yi⋅log(P1(xi;w))+(1−yi)⋅log(1−P1(xi;w))](29)
这就是单样本的交叉熵损失函数的一般形式。
在机器学习中,我们通常会有多个样本用于训练模型,所以损失函数通常是针对所有样本的损失的总和或平均值。 公式(29)是对单个样本的交叉熵损失。如果我们有一个包含 n 个样本的训练集,我们会对所有样本的损失求和,然后取平均,这样得到的损失函数可以更好地反映模型在整个训练集上的表现。
所以对于包含 n 个样本的训练集,交叉熵损失函数通常表示为:
C E ( P , Q ) = − 1 n ∑ i = 1 n [ y i ⋅ log ( P 1 ( x i ; w ) ) + ( 1 − y i ) ⋅ log ( 1 − P 1 ( x i ; w ) ) ] (30) CE(P, Q) = -\frac{1}{n}\sum_{i=1}^{n}[y_i \cdot \log(P_1(x_i;w)) + (1 - y_i) \cdot \log(1 - P_1(x_i;w))] \tag{30} CE(P,Q)=−n1i=1∑n[yi⋅log(P1(xi;w))+(1−yi)⋅log(1−P1(xi;w))](30)
求和并取平均是为了让损失函数的值不会因为训练集的大小而发生大的变化,从而使模型的训练更稳定。
五、两种形式的对比
先看一下极大似然估计与KL散度推导交叉熵损失函数的一般形式:
极大似然估计:
L
l
o
s
s
(
w
)
=
−
∑
i
=
1
n
[
y
i
ln
(
P
1
(
x
i
;
w
)
)
+
(
1
−
y
i
)
ln
(
1
−
P
1
(
x
i
;
w
)
)
]
(31)
\text 极大似然估计:L_{loss}(w) = - \sum_{i=1}^n \left[ y_i \ln (P_1(x_i;w)) + (1-y_i) \ln (1-P_1(x_i;w)) \right] \tag{31}
极大似然估计:Lloss(w)=−i=1∑n[yiln(P1(xi;w))+(1−yi)ln(1−P1(xi;w))](31)
相对熵
(
K
L
)
:
C
E
(
P
,
Q
)
=
−
1
n
∑
i
=
1
n
[
y
i
log
(
P
1
(
x
i
;
w
)
)
+
(
1
−
y
i
)
log
(
1
−
P
1
(
x
i
;
w
)
)
]
(32)
\text 相对熵(KL):CE(P, Q) = -\frac{1}{n}\sum_{i=1}^{n}[y_i \log(P_1(x_i;w)) + (1 - y_i)\log(1 - P_1(x_i;w))] \tag{32}
相对熵(KL):CE(P,Q)=−n1i=1∑n[yilog(P1(xi;w))+(1−yi)log(1−P1(xi;w))](32)
实际上,这两个公式描述的是相同的交叉熵损失函数,只是他们的来源不同。一个是通过极大似然估计推导出来的,另一个是通过KL散度推导出来的。
两个公式的区别主要体现在以下几个方面:
- 形式上,极大似然估计得出的损失函数没有显式的 1 n \frac{1}{n} n1 项。这是因为极大似然似然估计最大化的是所有样本的联合概率,因此会考虑所有样本,但是没有除以样本总数来取平均。然而,实际操作时,我们通常会除以样本数来计算平均损失,因此两个公式在实际应用中是相同的。
- 另一个区别是使用的对数函数的基数不同。交叉熵损失函数通常使用的是自然对数(底数为 e e e),这就是 ln \ln ln 符号;而在机器学习和深度学习中,通常使用的是以2为底或者以10为底的对数,因为这可以将连乘运算转化为连加运算,从而降低计算复杂度。但是由于对数函数的性质,不同底数的对数之间可以通过换底公式转换,因此这个差别在实际应用中并不重要。
所以,总结起来,这两个公式实质上是描述了同一个损失函数,只是形式上略有不同。
六、结语
在本篇文章中,我们深入探讨了逻辑回归的核心概念:极大似然估计和交叉熵损失函数。我们通过实例逐步解释了如何从这两种不同的角度来推导出逻辑回归的损失函数,并实现了整个过程的详细数学推导。
尽管这两种方法的出发点和推导过程不同,但它们都是以最大化样本数据似然性或最小化预测与真实标签之间的差异为目标,从而得到最优的模型参数。这不仅揭示了不同统计学习方法的内在联系,也让我们对逻辑回归模型有了更深入的理解。
最后,感谢您阅读这篇文章!如果您觉得有所收获,别忘了点赞、收藏并关注我,这是我持续创作的动力。您有任何问题或建议,都可以在评论区留言,我会尽力回答并接受您的反馈。如果您希望了解某个特定主题,也欢迎告诉我,我会乐于创作与之相关的文章。谢谢您的支持,期待与您共同成长!
期待与您在未来的学习中共同成长。