更新時間:2023-07-14 來源:黑馬程序員 瀏覽量:
在網(wǎng)絡(luò)訓(xùn)練過程中,正則化是一種用來防止過擬合(overfitting)的技術(shù)。過擬合指的是模型在訓(xùn)練集上表現(xiàn)很好,但在未見過的數(shù)據(jù)上表現(xiàn)較差的情況。正則化的目標(biāo)是使模型在訓(xùn)練集和測試集上都能有良好的性能。
正則化通過在損失函數(shù)中引入額外的懲罰項,以限制模型參數(shù)的大小,從而減少模型的復(fù)雜度。這樣可以使模型更加簡單,減少過擬合的風(fēng)險。
常見的正則化方法有以下幾種:
1.L1 正則化(L1 Regularization):在損失函數(shù)中添加模型參數(shù)的絕對值之和,即 L1 范數(shù)。這會促使模型的某些參數(shù)變?yōu)榱?,從而實現(xiàn)特征選擇(feature selection)的效果。
2.L2 正則化(L2 Regularization):在損失函數(shù)中添加模型參數(shù)的平方和的一半,即 L2 范數(shù)。L2 正則化會使模型參數(shù)盡量接近零,但不會等于零。它在訓(xùn)練過程中會使參數(shù)的值均勻分布在各個特征上。
3.Dropout:Dropout 是一種隨機(jī)正則化技術(shù),通過在訓(xùn)練過程中隨機(jī)將一部分神經(jīng)元的輸出置為零來減少神經(jīng)網(wǎng)絡(luò)的復(fù)雜性。這樣做可以減少神經(jīng)元之間的共適應(yīng)(co-adaptation),增加模型的魯棒性。
下面是一個使用PyTorch實現(xiàn)L2正則化的示例代碼:
import torch import torch.nn as nn import torch.optim as optim # 定義帶有 L2 正則化的模型 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.fc = nn.Linear(100, 10) # 假設(shè)輸入維度為 100,輸出維度為 10 def forward(self, x): x = self.fc(x) return x # 創(chuàng)建模型實例 model = Model() # 定義損失函數(shù)和優(yōu)化器,同時應(yīng)用 L2 正則化 criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001) # 訓(xùn)練過程 for epoch in range(num_epochs): # 正向傳播 outputs = model(inputs) loss = criterion(outputs, labels) # 反向傳播和優(yōu)化 optimizer.zero_grad() loss.backward() optimizer.step()
在上述代碼中,使用 weight_decay 參數(shù)來設(shè)置 L2 正則化的強(qiáng)度。較小的值會施加較小的懲罰,而較大的值會施加較大的懲罰。通過調(diào)整 weight_decay 的值,可以控制正則化對模型訓(xùn)練的影響程度。