神經網絡中的回歸詳解
引言
神經網絡(NeuralNetworks)是一種強大的機器學習模型,可用于分類和回歸任務。本文聚焦于神經網絡中的回歸(Regression),即預測連續輸出值(如房價、溫度)。
回歸問題:給定輸入特征x?\vec{x}x,預測連續目標yyy。神經網絡通過多層非線性變換學習復雜映射f:x??yf:\vec{x}\mapsto yf:x?y。
基本概念回顧
神經元與層
-
神經元(Neuron):基本單元。輸入x?=(x1,…,xn)\vec{x}=(x_1,\dots,x_n)x=(x1?,…,xn?),權重w?=(w1,…,wn)\vec{w}=(w_1,\dots,w_n)w=(w1?,…,wn?),偏置bbb。
計算:線性組合z=w??x?+b=∑i=1nwixi+bz=\vec{w}\cdot\vec{x}+b=\sum_{i=1}^nw_ix_i+bz=w?x+b=∑i=1n?wi?xi?+b。
然后激活:a=σ(z)a=\sigma(z)a=σ(z),σ\sigmaσ為激活函數。 -
層(Layer):多個神經元組成。
- 輸入層:原始特征。
- 隱藏層:中間變換。
- 輸出層:最終預測y^\hat{y}y^?(回歸中通常1個神經元,無激活或線性激活)。
-
前饋神經網絡(FeedforwardNeuralNetwork,FNN):信息從輸入到輸出單向流動。也稱多層感知機(MLP)。
激活函數
激活引入非線性。常見:
- Sigmoid:σ(z)=1/(1+e?z)\sigma(z)=1/(1+e^{-z})σ(z)=1/(1+e?z),輸出[0,1]。
- Tanh:σ(z)=(ez?e?z)/(ez+e?z)\sigma(z)=(e^z-e^{-z})/(e^z+e^{-z})σ(z)=(ez?e?z)/(ez+e?z),輸出[-1,1]。
- ReLU:σ(z)=max?(0,z)\sigma(z)=\max(0,z)σ(z)=max(0,z),簡單高效,避免梯度消失。
- Linear:σ(z)=z\sigma(z)=zσ(z)=z,用于回歸輸出層。
隱藏層常用ReLU,輸出層線性以輸出任意實數。
神經網絡回歸模型結構
數學表示
假設網絡有LLL層。第lll層有mlm_lml?個神經元。
-
輸入:a?(0)=x?∈Rm0\vec{a}^{(0)}=\vec{x}\in\mathbb{R}^{m_0}a(0)=x∈Rm0?。
-
第lll層:
z?(l)=W(l)a?(l?1)+b?(l) \vec{z}^{(l)}=W^{(l)}\vec{a}^{(l-1)}+\vec{b}^{(l)} z(l)=W(l)a(l?1)+b(l)
a?(l)=σ(l)(z?(l)) \vec{a}^{(l)}=\sigma^{(l)}(\vec{z}^{(l)}) a(l)=σ(l)(z(l))
其中W(l)∈Rml×ml?1W^{(l)}\in\mathbb{R}^{m_l\times m_{l-1}}W(l)∈Rml?×ml?1?為權重矩陣,b?(l)∈Rml\vec{b}^{(l)}\in\mathbb{R}^{m_l}b(l)∈Rml?為偏置。 -
輸出:y^=a?(L)\hat{y}=\vec{a}^{(L)}y^?=a(L)(標量)。
整個網絡:y^=f(x?;θ)\hat{y}=f(\vec{x};\theta)y^?=f(x;θ),θ={W(l),b?(l)}l=1L\theta=\{W^{(l)},\vec{b}^{(l)}\}_{l=1}^Lθ={W(l),b(l)}l=1L?為參數。
示例結構
簡單回歸網絡:輸入2維,1隱藏層(3神經元),輸出1維。
- 輸入層:x?=(x1,x2)\vec{x}=(x_1,x_2)x=(x1?,x2?)。
- 隱藏層:W(1)∈R3×2W^{(1)}\in\mathbb{R}^{3\times2}W(1)∈R3×2,b?(1)∈R3\vec{b}^{(1)}\in\mathbb{R}^3b(1)∈R3,激活ReLU。
- 輸出層:W(2)∈R1×3W^{(2)}\in\mathbb{R}^{1\times3}W(2)∈R1×3,b?(2)∈R\vec{b}^{(2)}\in\mathbb{R}b(2)∈R,激活線性。
損失函數
回歸常用均方誤差(MeanSquaredError,MSE):
L(y^,y)=12(y^?y)2 \mathcal{L}(\hat{y},y)=\frac{1}{2}(\hat{y}-y)^2 L(y^?,y)=21?(y^??y)2
批次樣本:$ \mathcal{L}=\frac{1}{N}\sum_{i=1}N\frac{1}{2}(\hat{y}_i-y_i)2 $
其他:MAE(L=∣y^?y∣\mathcal{L}=|\hat{y}-y|L=∣y^??y∣),HuberLoss(對異常值魯棒)。
訓練過程:反向傳播與梯度下降
前向傳播
從輸入計算到輸出,得到y^\hat{y}y^?和L\mathcal{L}L。
反向傳播(Backpropagation)
計算梯度?L/?θ\partial\mathcal{L}/\partial\theta?L/?θ。
- 輸出層誤差:δ(L)=?L/?z?(L)=(y^?y)?σ(L)′(z?(L))\delta^{(L)}=\partial\mathcal{L}/\partial\vec{z}^{(L)}=(\hat{y}-y)\cdot\sigma^{(L)'}(\vec{z}^{(L)})δ(L)=?L/?z(L)=(y^??y)?σ(L)′(z(L))(線性激活時σ′=1\sigma'=1σ′=1,故δ(L)=y^?y\delta^{(L)}=\hat{y}-yδ(L)=y^??y)。
- 向后傳播:δ(l)=(W(l+1))Tδ(l+1)⊙σ(l)′(z?(l))\delta^{(l)}=(W^{(l+1)})^T\delta^{(l+1)}\odot\sigma^{(l)'}(\vec{z}^{(l)})δ(l)=(W(l+1))Tδ(l+1)⊙σ(l)′(z(l)),⊙\odot⊙為逐元素乘。
- 梯度:
?L?W(l)=δ(l)(a?(l?1))T \frac{\partial\mathcal{L}}{\partial W^{(l)}}=\delta^{(l)}(\vec{a}^{(l-1)})^T ?W(l)?L?=δ(l)(a(l?1))T
?L?b?(l)=δ(l) \frac{\partial\mathcal{L}}{\partial\vec{b}^{(l)}}=\delta^{(l)} ?b(l)?L?=δ(l)
優化:梯度下降
更新參數:θ:=θ?η?θL\theta:=\theta-\eta\nabla_\theta\mathcal{L}θ:=θ?η?θ?L,η\etaη為學習率。
變體:
- SGD:隨機梯度下降,每批次更新。
- Momentum:添加動量v:=βv?η?v:=\beta v-\eta\nablav:=βv?η?,θ:=θ+v\theta:=\theta+vθ:=θ+v。
- Adam:自適應學習率,結合動量和RMSProp。
完整訓練算法
- 初始化θ\thetaθ(e.g.,Xavier初始化)。
- 對于每個epoch:
a. 前向:計算y^\hat{y}y^?,L\mathcal{L}L。
b. 反向:計算梯度。
c. 更新θ\thetaθ。 - 監控驗證損失,早停防止過擬合。
數學推導示例:簡單網絡
假設單隱藏層,輸入1維xxx,隱藏1神經元,輸出y^\hat{y}y^?。
- 前向:
z(1)=w1x+b1z^{(1)}=w_1x+b_1z(1)=w1?x+b1?,a(1)=σ(z(1))a^{(1)}=\sigma(z^{(1)})a(1)=σ(z(1))(ReLU)。
z(2)=w2a(1)+b2z^{(2)}=w_2a^{(1)}+b_2z(2)=w2?a(1)+b2?,y^=z(2)\hat{y}=z^{(2)}y^?=z(2)(線性)。 - 損失:L=12(y^?y)2\mathcal{L}=\frac{1}{2}(\hat{y}-y)^2L=21?(y^??y)2。
- 梯度:
?L/?y^=y^?y\partial\mathcal{L}/\partial\hat{y}=\hat{y}-y?L/?y^?=y^??y。
?L/?w2=(y^?y)a(1)\partial\mathcal{L}/\partial w_2=(\hat{y}-y)a^{(1)}?L/?w2?=(y^??y)a(1)。
?L/?b2=y^?y\partial\mathcal{L}/\partial b_2=\hat{y}-y?L/?b2?=y^??y。
?L/?a(1)=(y^?y)w2\partial\mathcal{L}/\partial a^{(1)}=(\hat{y}-y)w_2?L/?a(1)=(y^??y)w2?。
?L/?z(1)=?L/?a(1)?σ′(z(1))\partial\mathcal{L}/\partial z^{(1)}=\partial\mathcal{L}/\partial a^{(1)}\cdot\sigma'(z^{(1)})?L/?z(1)=?L/?a(1)?σ′(z(1))(ReLU’:1 ifz(1)>0z^{(1)}>0z(1)>0,else0)。
?L/?w1=?L/?z(1)?x\partial\mathcal{L}/\partial w_1=\partial\mathcal{L}/\partial z^{(1)}\cdot x?L/?w1?=?L/?z(1)?x。
?L/?b1=?L/?z(1)\partial\mathcal{L}/\partial b_1=\partial\mathcal{L}/\partial z^{(1)}?L/?b1?=?L/?z(1)。
正則化與優化技巧
-
過擬合防治:
- L1/L2正則:添加λ∑∣w∣\lambda\sum|w|λ∑∣w∣或λ∑w2\lambda\sum w^2λ∑w2到損失。
- Dropout:訓練時隨機丟棄神經元(概率p)。
- 數據增強:增加訓練數據。
- 早停:驗證損失上升時停止。
-
初始化:He初始化forReLU:w~N(0,2/ml?1)w\sim\mathcal{N}(0,\sqrt{2/m_{l-1}})w~N(0,2/ml?1??)。
-
批標準化(BatchNormalization):在每層后標準化z?(l)\vec{z}^{(l)}z(l),加速訓練。
-
學習率調度:余弦退火或指數衰減。
-
超參數調優:層數、神經元數、學習率、批大小。用GridSearch或BayesianOptimization。
優點與缺點
-
優點:
- 處理非線性關系:通用函數逼近器。
- 自動特征提取:隱藏層學習高級表示。
- 可擴展:深層網絡捕捉復雜模式。
-
缺點:
- 計算密集:訓練需GPU。
- 黑箱:解釋性差(用SHAP或LIME改善)。
- 需大量數據:小數據集易過擬合。
- 梯度消失/爆炸:深層網絡問題(用ReLU、殘差連接緩解)。
應用場景
- 房價預測:輸入面積、位置等,輸出價格。
- 時間序列預測:RNN/LSTM變體,但基本FNN可用于簡單回歸。
- 圖像回歸:CNN提取特征,后接全連接回歸(如年齡估計)。
- 金融:股票價格預測。
實際例子
例子1:線性回歸模擬
用單層無激活網絡模擬線性回歸y=2x+1y=2x+1y=2x+1。
- 輸入xxx,輸出y^=wx+b\hat{y}=wx+by^?=wx+b。
- 損失MSE。
- 訓練后w≈2w\approx2w≈2,b≈1b\approx1b≈1。
例子2:非線性回歸
預測y=sin?(x)+噪聲y=\sin(x)+噪聲y=sin(x)+噪聲。
- 網絡:輸入1,隱藏[64,64]ReLU,輸出1線性。
- 數據:1000點x∈[?π,π]x\in[-π,π]x∈[?π,π]。
- 訓練:Adam,MSE,epochs=1000。
網絡學習正弦曲線。
代碼實現(Python with PyTorch)
import torch
import torch.nn as nn
import torch.optim as optimclass RegressionNet(nn.Module):def __init__(self):super().__init__()self.fc1 = nn.Linear(1, 64)self.fc2 = nn.Linear(64, 64)self.fc3 = nn.Linear(64, 1)def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))return self.fc3(x)# 數據
x = torch.randn(1000, 1) * 3.14
y = torch.sin(x) + 0.1 * torch.randn(1000, 1)# 訓練
model = RegressionNet()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)for epoch in range(1000):optimizer.zero_grad()output = model(x)loss = criterion(output, y)loss.backward()optimizer.step()
總結
神經網絡回歸通過多層變換、反向傳播和優化學習連續映射。