deepseek.com:邏輯回歸的目標函數,損失函數,梯度下降 標量和矩陣形式的數學推導,pytorch真實能跑的代碼案例以及模型,數據,預測結果的可視化展示, 模型應用場景和優缺點,及如何改進解決及改進方法數據推導。
邏輯回歸全面解析
一、數學推導
模型定義:
邏輯回歸模型為概率預測模型,輸出 P ( y = 1 ∣ x ) = σ ( w ? x + b ) P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x} + b) P(y=1∣x)=σ(w?x+b),其中 σ ( z ) = 1 1 + e ? z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e?z1?。
1. 目標函數與損失函數
-
損失函數(交叉熵):
單個樣本的損失:
L ( y , y ^ ) = ? y log ? ( y ^ ) ? ( 1 ? y ) log ? ( 1 ? y ^ ) \mathcal{L}(y, \hat{y}) = -y \log(\hat{y}) - (1-y) \log(1-\hat{y}) L(y,y^?)=?ylog(y^?)?(1?y)log(1?y^?)
其中 y ^ = σ ( w ? x + b ) \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b) y^?=σ(w?x+b)。所有樣本的平均損失(標量形式):
J ( w , b ) = ? 1 N ∑ i = 1 N [ y i log ? ( y ^ i ) + ( 1 ? y i ) log ? ( 1 ? y ^ i ) ] J(\mathbf{w}, b) = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i) \right] J(w,b)=?N1?i=1∑N?[yi?log(y^?i?)+(1?yi?)log(1?y^?i?)]矩陣形式( X \mathbf{X} X為設計矩陣, y \mathbf{y} y為標簽向量):
J ( w , b ) = ? 1 N [ y ? log ? ( σ ( X w + b ) ) + ( 1 ? y ) ? log ? ( 1 ? σ ( X w + b ) ) ] J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log(\sigma(\mathbf{X}\mathbf{w} + b)) + (1-\mathbf{y})^\top \log(1-\sigma(\mathbf{X}\mathbf{w} + b)) \right] J(w,b)=?N1?[y?log(σ(Xw+b))+(1?y)?log(1?σ(Xw+b))]
2. 梯度下降推導
-
標量形式梯度:
對 w j w_j wj?求偏導:
? L ? w j = ( y ^ ? y ) x j \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j ?wj??L?=(y^??y)xj?
對 b b b求偏導:
? L ? b = y ^ ? y \frac{\partial \mathcal{L}}{\partial b} = \hat{y} - y ?b?L?=y^??y -
矩陣形式梯度:
梯度矩陣為:
? w J = 1 N X ? ( σ ( X w + b ) ? y ) \nabla_{\mathbf{w}} J = \frac{1}{N} \mathbf{X}^\top (\sigma(\mathbf{X}\mathbf{w} + b) - \mathbf{y}) ?w?J=N1?X?(σ(Xw+b)?y)
? J ? b = 1 N ∑ i = 1 N ( y ^ i ? y i ) \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i) ?b?J?=N1?i=1∑N?(y^?i??yi?)
損失函數的設計是機器學習模型的核心環節,它決定了模型如何衡量預測值與真實值的差異,并指導參數優化方向。邏輯回歸的損失函數(交叉熵)設計并非偶然,而是基于概率建模、數學優化和信息論的深刻原理。以下從多個角度詳細解釋其設計邏輯:
一、損失函數的設計邏輯
1. 概率建模的視角
邏輯回歸的目標是預測樣本屬于某一類的概率(二分類)。
-
假設數據服從伯努利分布:
對單個樣本,標簽 y ∈ { 0 , 1 } y \in \{0,1\} y∈{0,1},模型預測的概率為:
{ P ( y = 1 ∣ x ) = y ^ = σ ( w ? x + b ) , P ( y = 0 ∣ x ) = 1 ? y ^ . \begin{cases} P(y=1 \mid \mathbf{x}) = \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b), \\ P(y=0 \mid \mathbf{x}) = 1 - \hat{y}. \end{cases} {P(y=1∣x)=y^?=σ(w?x+b),P(y=0∣x)=1?y^?.?
樣本的聯合似然函數為:
L ( w , b ) = ∏ i = 1 N y ^ i y i ( 1 ? y ^ i ) 1 ? y i . L(\mathbf{w}, b) = \prod_{i=1}^N \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i}. L(w,b)=i=1∏N?y^?iyi??(1?y^?i?)1?yi?. -
最大化對數似然:
為了便于優化,對似然函數取負對數(將乘法轉為加法,凸函數性質不變):
? log ? L ( w , b ) = ? ∑ i = 1 N [ y i log ? y ^ i + ( 1 ? y i ) log ? ( 1 ? y ^ i ) ] . -\log L(\mathbf{w}, b) = -\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]. ?logL(w,b)=?i=1∑N?[yi?logy^?i?+(1?yi?)log(1?y^?i?)].
最小化該式等價于最大化似然函數,此即 交叉熵損失。
2. 信息論視角
交叉熵(Cross-Entropy)衡量兩個概率分布 P P P(真實分布)和 Q Q Q(預測分布)的差異:
H ( P , Q ) = ? E P [ log ? Q ] . H(P, Q) = -\mathbb{E}_{P}[\log Q]. H(P,Q)=?EP?[logQ].
對于二分類問題:
- 真實分布 P P P:標簽 y y y是確定的(0或1),可視為一個 Dirac delta分布。
- 預測分布 Q Q Q:模型輸出的概率 y ^ \hat{y} y^?。
交叉熵的表達式與負對數似然一致,因此最小化交叉熵等價于讓預測分布逼近真實分布。
3. 優化視角:梯度性質
-
交叉熵 vs 均方誤差(MSE):
若使用 MSE 損失 L = 1 2 ( y ? y ^ ) 2 \mathcal{L} = \frac{1}{2}(y - \hat{y})^2 L=21?(y?y^?)2,其梯度為:
? L ? w j = ( y ? y ^ ) ? y ^ ( 1 ? y ^ ) ? x j . \frac{\partial \mathcal{L}}{\partial w_j} = (y - \hat{y}) \cdot \hat{y} (1 - \hat{y}) \cdot x_j. ?wj??L?=(y?y^?)?y^?(1?y^?)?xj?.
當 y ^ \hat{y} y^?接近 0 或 1 時(預測置信度高),梯度中的 y ^ ( 1 ? y ^ ) \hat{y}(1 - \hat{y}) y^?(1?y^?)趨近于 0,導致 梯度消失,參數更新緩慢。交叉熵的梯度為:
? L ? w j = ( y ^ ? y ) x j . \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j. ?wj??L?=(y^??y)xj?.
梯度直接正比于誤差 ( y ^ ? y ) (\hat{y} - y) (y^??y),無論預測值大小,梯度始終有效,優化更高效。
4. 數學性質
- 凸性:交叉熵損失函數在邏輯回歸中是凸函數(Hessian矩陣半正定),保證梯度下降能找到全局最優解。
- 概率校準性:交叉熵強制模型輸出具有概率意義(需配合 sigmoid 函數),而 MSE 無此特性。
二、為什么不是其他損失函數?
1. 均方誤差(MSE)的缺陷
- 梯度消失問題(如上述)。
- 對概率的懲罰不對稱:
當 y = 1 y=1 y=1時,預測 y ^ = 0.9 \hat{y}=0.9 y^?=0.9的 MSE 損失為 0.01 0.01 0.01,而交叉熵損失為 ? log ? ( 0.9 ) ≈ 0.105 -\log(0.9) \approx 0.105 ?log(0.9)≈0.105。
交叉熵對錯誤預測(如 y ^ = 0.1 \hat{y}=0.1 y^?=0.1時 y = 1 y=1 y=1)的懲罰更嚴厲( ? log ? ( 0.1 ) ≈ 2.3 -\log(0.1) \approx 2.3 ?log(0.1)≈2.3),符合分類任務需求。
2. 其他替代損失函數
- Hinge Loss(SVM使用):
適用于間隔最大化,但對概率建模不直接,且優化目標不同。 - Focal Loss:
改進交叉熵,解決類別不平衡問題,但需額外調整超參數。
三、交叉熵的數學推導
1. 從伯努利分布到交叉熵
假設樣本獨立,標簽 y ~ Bernoulli ( y ^ ) y \sim \text{Bernoulli}(\hat{y}) y~Bernoulli(y^?),其概率質量函數為:
P ( y ∣ y ^ ) = y ^ y ( 1 ? y ^ ) 1 ? y . P(y \mid \hat{y}) = \hat{y}^y (1 - \hat{y})^{1 - y}. P(y∣y^?)=y^?y(1?y^?)1?y.
對數似然函數為:
log ? P ( y ∣ y ^ ) = y log ? y ^ + ( 1 ? y ) log ? ( 1 ? y ^ ) . \log P(y \mid \hat{y}) = y \log \hat{y} + (1 - y) \log (1 - \hat{y}). logP(y∣y^?)=ylogy^?+(1?y)log(1?y^?).
最大化對數似然等價于最小化其負數,即交叉熵損失。
2. 梯度推導(矩陣形式)
設設計矩陣 X ∈ R N × D \mathbf{X} \in \mathbb{R}^{N \times D} X∈RN×D,權重 w ∈ R D \mathbf{w} \in \mathbb{R}^D w∈RD,偏置 b ∈ R b \in \mathbb{R} b∈R,預測值 y ^ = σ ( X w + b ) \hat{\mathbf{y}} = \sigma(\mathbf{X}\mathbf{w} + b) y^?=σ(Xw+b)。
交叉熵損失:
J ( w , b ) = ? 1 N [ y ? log ? y ^ + ( 1 ? y ) ? log ? ( 1 ? y ^ ) ] . J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log \hat{\mathbf{y}} + (1 - \mathbf{y})^\top \log (1 - \hat{\mathbf{y}}) \right]. J(w,b)=?N1?[y?logy^?+(1?y)?log(1?y^?)].
梯度計算:
? J ? w = 1 N X ? ( y ^ ? y ) , \frac{\partial J}{\partial \mathbf{w}} = \frac{1}{N} \mathbf{X}^\top (\hat{\mathbf{y}} - \mathbf{y}), ?w?J?=N1?X?(y^??y),
? J ? b = 1 N ∑ i = 1 N ( y ^ i ? y i ) . \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i). ?b?J?=N1?i=1∑N?(y^?i??yi?).
四、實際應用中的設計原則
- 任務需求匹配:分類任務需概率輸出,回歸任務用 MSE。
- 優化效率:梯度應穩定且易于計算。
- 概率解釋性:損失函數需與概率模型一致(如交叉熵配 sigmoid)。
- 魯棒性:對異常值的敏感程度(交叉熵比 MSE 更敏感,需數據清洗)。
五、總結
邏輯回歸的交叉熵損失函數是通過以下步驟設計的:
- 概率假設:假設數據服從伯努利分布。
- 最大似然估計:將參數估計問題轉化為優化問題。
- 數學簡化:取負對數似然,得到交叉熵形式。
- 優化驗證:選擇梯度性質更優的損失函數。
這種設計使得邏輯回歸在二分類任務中高效、穩定,且輸出具有概率意義,成為基礎且強大的模型。
二、PyTorch 代碼案例
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification# 生成數據
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1)
X = torch.tensor(X, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32).view(-1, 1)# 定義模型
class LogisticRegression(nn.Module):def __init__(self, input_dim):super().__init__()self.linear = nn.Linear(input_dim, 1)def forward(self, x):return torch.sigmoid(self.linear(x))model = LogisticRegression(2)
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)# 訓練
losses = []
for epoch in range(100):y_pred = model(X)loss = criterion(y_pred, y)loss.backward()optimizer.step()optimizer.zero_grad()losses.append(loss.item())# 可視化損失曲線
plt.plot(losses)
plt.title("Training Loss")
plt.show()# 決策邊界可視化
w = model.linear.weight.detach().numpy()[0]
b = model.linear.bias.detach().numpy()x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))
Z = model(torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)).detach().numpy()
Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y.squeeze(), edgecolors='k')
plt.title("Decision Boundary")
plt.show()
三、可視化展示
- 數據分布:二維散點圖展示類別分離情況。
- 損失曲線:訓練過程中損失值下降曲線。
- 決策邊界:等高線圖顯示模型預測分界線。
四、應用場景與優缺點
-
應用場景:
信用評分、垃圾郵件檢測、疾病預測(線性可分問題)。 -
優點:
- 計算高效,適合大規模數據。
- 輸出概率解釋性強。
-
缺點:
- 無法直接處理非線性關系。
- 對多重共線性敏感。
五、改進方法與數學推導
-
正則化:
- L2正則化:目標函數變為
J reg = J ( w , b ) + λ 2 ∥ w ∥ 2 J_{\text{reg}} = J(\mathbf{w}, b) + \frac{\lambda}{2} \|\mathbf{w}\|^2 Jreg?=J(w,b)+2λ?∥w∥2
梯度更新:
w ← w ? η ( ? w J + λ w ) \mathbf{w} \leftarrow \mathbf{w} - \eta \left( \nabla_{\mathbf{w}} J + \lambda \mathbf{w} \right) w←w?η(?w?J+λw)
- L2正則化:目標函數變為
-
特征工程:
添加多項式特征 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12?,x22?,x1?x2?等,將數據映射到高維空間。 -
核方法:
通過核技巧隱式映射到高維空間(需結合其他模型如SVM)。
六、總結
邏輯回歸通過概率建模解決二分類問題,代碼簡潔高效,但需注意其線性假設的限制。通過正則化、特征工程等手段可顯著提升模型性能。