逻辑回归的损失函数(或称为代价函数)是用于衡量模型预测结果和真实结果之间差距的一个函数。它通常采用对数似然损失函数(Log-Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。我们通过最大化似然函数来推导它,并将其转化为最小化损失函数的形式。
1. 逻辑回归的目标
逻辑回归是一种用于二分类任务的线性模型,它的目标是估计给定输入特征 x 属于类 1 的概率 P ( y = 1 ∣ x ) P(y=1 |x) P(y=1∣x)。
给定一个输入 x x x,逻辑回归模型的输出是一个概率值,表示属于类 1 的概率:
h θ ( x ) = P ( y = 1 ∣ x ) = 1 1 + e − θ T x h_{\theta}(\mathbf{x}) = P(y=1 | \mathbf{x}) = \frac{1}{1 + e^{-\theta^T \mathbf{x}}} hθ(x)=P(y=1∣x)=1+e−θTx1
其中, θ \theta θ 是模型的参数向量, θ T x \theta^T \mathbf{x} θTx 是输入特征的线性组合。
2. 似然函数
在逻辑回归中,我们希望通过最大化似然函数来找到最优参数 θ \theta θ。对于一组训练数据 { ( x i , y i ) } \{ (\mathbf{x}_i, y_i) \} {(xi,yi)},每个样本 x i \mathbf{x}_i xi 对应的真实标签 y i y_i yi 是 0 或 1。
假设所有样本是独立同分布的,整个数据集的似然函数可以表示为:
L ( θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) L(\theta) = \prod_{i=1}^m P(y_i | \mathbf{x}_i; \theta) L(θ)=∏i=1mP(yi∣xi;θ)
根据 y i y_i yi 的取值(0 或 1),我们可以写成:
L ( θ ) = ∏ i = 1 m h θ ( x i ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod_{i=1}^m h_{\theta}(\mathbf{x}i)^{y_i} (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} L(θ)=∏i=1mhθ(xi)yi(1−hθ(xi))1−yi
这个公式表示,当 y i = 1 y_i = 1 yi=1 时,选择 h θ ( x i ) h_{\theta}(\mathbf{x}i) hθ(xi),而当 y i = 0 y_i = 0 yi=0 时,选择 1 − h θ ( x i ) 1 - h{\theta}(\mathbf{x}_i) 1−hθ(xi)。
3. 对数似然函数
由于似然函数是多个概率的连乘,直接求解比较困难。为简化计算,我们取对数(因为对数函数是单调递增的,最大化对数似然等价于最大化似然函数本身):
ℓ ( θ ) = log L ( θ ) = ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] \ell(\theta) = \log L(\theta) = \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=logL(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
这就是对数似然函数。我们的目标是最大化它,即: max θ ℓ ( θ ) \max_{\theta} \ell(\theta) maxθℓ(θ)
为了方便,我们可以将最大化对数似然函数转化为最小化它的负对数似然函数,这样问题就转化为一个最小化问题:
J ( θ ) = − ℓ ( θ ) = − ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] J(\theta) = - \ell(\theta) = - \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−ℓ(θ)=−∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
这个 J ( θ ) J(\theta) J(θ) 就是逻辑回归的损失函数。
4. 我们来详细推导:
ℓ ( θ ) = log L ( θ ) = ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] \ell(\theta) = \log L(\theta) = \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=logL(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
1. 取对数
由于似然函数是多个概率的连乘形式,直接优化这种乘法形式的函数在计算上比较复杂。我们可以通过对数变换将乘法转换为加法,使得优化问题更容易处理。具体来说,对似然函数 ( L(\theta) ) 取对数,得到对数似然函数(log-likelihood function):
ℓ ( θ ) = log L ( θ ) \ell(\theta) = \log L(\theta) ℓ(θ)=logL(θ)
将似然函数代入,取对数:
ℓ ( θ ) = log ( ∏ i = 1 m h θ ( x i ) y i ⋅ ( 1 − h θ ( x i ) ) 1 − y i ) \ell(\theta) = \log \left( \prod_{i=1}^{m} h_{\theta}(\mathbf{x}i)^{y_i} \cdot (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} \right) ℓ(θ)=log(∏i=1mhθ(xi)yi⋅(1−hθ(xi))1−yi)
利用对数的乘法性质: log ( a ⋅ b ) = log a + log b \log (a \cdot b) = \log a + \log b log(a⋅b)=loga+logb,可以将乘法转换为加法:
ℓ ( θ ) = ∑ i = 1 m log ( h θ ( x i ) y i ⋅ ( 1 − h θ ( x i ) ) 1 − y i ) \ell(\theta) = \sum_{i=1}^{m} \log \left( h_{\theta}(\mathbf{x}i)^{y_i} \cdot (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} \right) ℓ(θ)=∑i=1mlog(hθ(xi)yi⋅(1−hθ(xi))1−yi)
接下来,利用对数的幂法则: log ( a b ) = b log a \log (a^b) = b \log a log(ab)=bloga,我们进一步分解每一项:
ℓ ( θ ) = ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] \ell(\theta) = \sum_{i=1}^{m} \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
这就是对数似然函数的完整形式。
5. 损失函数
我们最终得到的对数似然函数是一个用于衡量模型表现的函数。为了最小化损失,我们通常最大化对数似然函数(最大似然估计)。但更常见的做法是取负号,将最大化问题转化为最小化问题:
J ( θ ) = − ℓ ( θ ) = − ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] J(\theta) = - \ell(\theta) = - \sum_{i=1}^{m} \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−ℓ(θ)=−∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
这个 J ( θ ) J(\theta) J(θ) 就是逻辑回归的损失函数。通过最小化它,我们可以找到最优的参数 θ \theta θ,使模型的预测最接近真实标签。
6. 梯度下降算法
最小化逻辑回归的损失函数 ( J(\theta) ) 的过程通常通过 梯度下降算法 或其变种来完成。以下是具体步骤和方法。
1. 梯度下降算法
梯度下降是一种用于优化目标函数的迭代算法。其基本思想是:通过不断更新参数,使得损失函数逐渐减小,最终找到损失函数的最小值。在逻辑回归中,我们的目标是最小化损失函数 ( J(\theta) )。
梯度下降的更新公式如下:
θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)
其中:
- θ j \theta_j θj 是逻辑回归模型的参数(特征对应的权重), j ∈ { 0 , 1 , ... , n } j \in \{0, 1, \dots, n\} j∈{0,1,...,n};
- α \alpha α 是学习率(决定每次更新的步长);
- ∂ J ( θ ) ∂ θ j \frac{\partial J(\theta)}{\partial \theta_j} ∂θj∂J(θ) 是损失函数 J ( θ ) J(\theta) J(θ)对参数 θ j \theta_j θj 的偏导数。
2. 损失函数的梯度推导
为了使用梯度下降,我们首先需要计算损失函数 ( J(\theta) ) 对每个参数 ( \theta_j ) 的偏导数。损失函数的形式为:
J ( θ ) = − 1 m ∑ i = 1 m [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] J(\theta) = - \frac{1}{m} \sum_{i=1}^{m} \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−m1∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
其中, h θ ( x i ) = 1 1 + e − θ T x i h_{\theta}(\mathbf{x}_i) = \frac{1}{1 + e^{-\theta^T \mathbf{x}_i}} hθ(xi)=1+e−θTxi1 是逻辑回归模型的输出,即第 i i i 个样本属于类别 1 的概率。
为了方便计算,我们对 J ( θ ) J(\theta) J(θ) 的偏导数进行推导。
好的,我们详细讲解通过 链式法则 来推导逻辑回归损失函数的偏导数,进而得到梯度的过程。
2.1 通过链式法则推导偏导数
为了推导损失函数 J ( θ ) J(\theta) J(θ) 对参数 θ j \theta_j θj 的偏导数,我们使用 链式法则。这里,我们将逐步推导出偏导数公式。
2.1.1 损失函数对 θ j \theta_j θj 的偏导数
首先,我们需要对损失函数 J ( θ ) J(\theta) J(θ) 对 θ j \theta_j θj 求偏导。对第 i i i 个样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi) 的损失函数项:
J i ( θ ) = − [ y i log h θ ( x i ) + ( 1 − y i ) log ( 1 − h θ ( x i ) ) ] J_i(\theta) = - \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] Ji(θ)=−[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
求其关于 θ j \theta_j θj 的偏导数:
∂ J i ( θ ) ∂ θ j \frac{\partial J_i(\theta)}{\partial \theta_j} ∂θj∂Ji(θ)
为了简化推导,我们先对两个部分分别求导。
2.1.2 对 log h θ ( x i ) \log h_{\theta}(\mathbf{x}_i) loghθ(xi) 的偏导
我们首先对 log h θ ( x i ) \log h_{\theta}(\mathbf{x}_i) loghθ(xi) 的部分求导:
∂ ∂ θ j ( log h θ ( x i ) ) \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}_i) \right) ∂θj∂(loghθ(xi))
根据链式法则,我们知道:
∂ ∂ θ j log h θ ( x i ) = 1 h θ ( x i ) ⋅ ∂ h θ ( x i ) ∂ θ j \frac{\partial}{\partial \theta_j} \log h_{\theta}(\mathbf{x}i) = \frac{1}{h{\theta}(\mathbf{x}i)} \cdot \frac{\partial h{\theta}(\mathbf{x}_i)}{\partial \theta_j} ∂θj∂loghθ(xi)=hθ(xi)1⋅∂θj∂hθ(xi)
接下来,我们需要计算 h θ ( x i ) h_{\theta}(\mathbf{x}i) hθ(xi) 对 θ j \theta_j θj的导数。由于 h θ ( x i ) h{\theta}(\mathbf{x}_i) hθ(xi) 是 sigmoid 函数,即:
h θ ( x i ) = 1 1 + e − θ T x i h_{\theta}(\mathbf{x}_i) = \frac{1}{1 + e^{-\theta^T \mathbf{x}_i}} hθ(xi)=1+e−θTxi1
使用链式法则对 θ j \theta_j θj 求导,首先对内层的 θ T x i = ∑ k = 0 n θ k x i k \theta^T \mathbf{x}i = \sum{k=0}^{n} \theta_k x_{ik} θTxi=∑k=0nθkxik 求导,结果是:
∂ ∂ θ j ( θ T x i ) = x i j \frac{\partial}{\partial \theta_j} \left( \theta^T \mathbf{x}i \right) = x{ij} ∂θj∂(θTxi)=xij
接下来,sigmoid 函数的导数是:
∂ h θ ( x i ) ∂ z = h θ ( x i ) ( 1 − h θ ( x i ) ) \frac{\partial h_{\theta}(\mathbf{x}i)}{\partial z} = h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}_i)) ∂z∂hθ(xi)=hθ(xi)(1−hθ(xi))
其中, z = θ T x i z = \theta^T \mathbf{x}_i z=θTxi。
因此:
∂ h θ ( x i ) ∂ θ j = h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial h_{\theta}(\mathbf{x}i)}{\partial \theta_j} = h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂hθ(xi)=hθ(xi)(1−hθ(xi))xij
现在我们可以将它代入先前的结果中:
∂ ∂ θ j ( log h θ ( x i ) ) = 1 h θ ( x i ) ⋅ h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}i) \right) = \frac{1}{h{\theta}(\mathbf{x}i)} \cdot h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(loghθ(xi))=hθ(xi)1⋅hθ(xi)(1−hθ(xi))xij
简化为:
∂ ∂ θ j ( log h θ ( x i ) ) = ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}i) \right) = (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(loghθ(xi))=(1−hθ(xi))xij
2.1.3 对 log ( 1 − h θ ( x i ) ) \log (1 - h_{\theta}(\mathbf{x}_i)) log(1−hθ(xi)) 的偏导
接下来,我们对 log ( 1 − h θ ( x i ) ) \log (1 - h_{\theta}(\mathbf{x}_i)) log(1−hθ(xi)) 求偏导:
∂ ∂ θ j log ( 1 − h θ ( x i ) ) \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}_i)) ∂θj∂log(1−hθ(xi))
同样应用链式法则:
∂ ∂ θ j log ( 1 − h θ ( x i ) ) = 1 1 − h θ ( x i ) ⋅ ∂ ( 1 − h θ ( x i ) ) ∂ θ j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = \frac{1}{1 - h{\theta}(\mathbf{x}i)} \cdot \frac{\partial (1 - h{\theta}(\mathbf{x}_i))}{\partial \theta_j} ∂θj∂log(1−hθ(xi))=1−hθ(xi)1⋅∂θj∂(1−hθ(xi))
对 1 − h θ ( x i ) 1 - h_{\theta}(\mathbf{x}_i) 1−hθ(xi) 求导:
∂ ( 1 − h θ ( x i ) ) ∂ θ j = − h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial (1 - h_{\theta}(\mathbf{x}i))}{\partial \theta_j} = - h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(1−hθ(xi))=−hθ(xi)(1−hθ(xi))xij
因此:
∂ ∂ θ j log ( 1 − h θ ( x i ) ) = − h θ ( x i ) 1 − h θ ( x i ) ⋅ ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = - \frac{h{\theta}(\mathbf{x}i)}{1 - h{\theta}(\mathbf{x}i)} \cdot (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂log(1−hθ(xi))=−1−hθ(xi)hθ(xi)⋅(1−hθ(xi))xij
简化为:
∂ ∂ θ j log ( 1 − h θ ( x i ) ) = − h θ ( x i ) x i j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = - h{\theta}(\mathbf{x}i) x{ij} ∂θj∂log(1−hθ(xi))=−hθ(xi)xij
2.1.4 组合偏导数
现在我们可以将偏导数组合在一起,得到损失函数对 ( \theta_j ) 的总偏导数:
∂ J i ( θ ) ∂ θ j = − [ y i ⋅ ( 1 − h θ ( x i ) ) x i j + ( 1 − y i ) ⋅ ( − h θ ( x i ) x i j ) ] \frac{\partial J_i(\theta)}{\partial \theta_j} = - \left[ y_i \cdot (1 - h_{\theta}(\mathbf{x}i)) x{ij} + (1 - y_i) \cdot (- h_{\theta}(\mathbf{x}i) x{ij}) \right] ∂θj∂Ji(θ)=−[yi⋅(1−hθ(xi))xij+(1−yi)⋅(−hθ(xi)xij)]
简化为:
∂ J i ( θ ) ∂ θ j = ( h θ ( x i ) − y i ) x i j \frac{\partial J_i(\theta)}{\partial \theta_j} = (h_{\theta}(\mathbf{x}i) - y_i) x{ij} ∂θj∂Ji(θ)=(hθ(xi)−yi)xij
2.1.5 总损失函数的梯度
将所有样本的偏导数相加得到总损失函数 J ( θ ) J(\theta) J(θ) 对 θ j \theta_j θj 的偏导数:
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(\mathbf{x}i) - y_i) x{ij} ∂θj∂J(θ)=m1∑i=1m(hθ(xi)−yi)xij
7. 梯度更新公式
现在我们有了损失函数的梯度,可以使用梯度下降法更新参数 θ j \theta_j θj:
θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)
即:
θ j : = θ j − α ⋅ 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \theta_j := \theta_j - \alpha \cdot \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(\mathbf{x}i) - y_i) x{ij} θj:=θj−α⋅m1∑i=1m(hθ(xi)−yi)xij
通过不断迭代更新参数,损失函数逐渐减小,最终找到参数 θ \theta θ 的最优解。
-----以上推导来自gpt4-o模型问答