概念
正則化是一種用于控制模型復雜度并防止過擬合的技術,在機器學習和深度學習中廣泛應用。它通過在損失函數中添加一項懲罰項來限制模型的參數,從而使模型更傾向于選擇簡單的參數配置。
理解
L1 正則化(L1 Regularization):也稱為 Lasso 正則化,它在損失函數中添加參數的絕對值之和作為懲罰項。L1 正則化傾向于使某些參數變為零,從而實現特征選擇和稀疏性。
L2 正則化(L2 Regularization):也稱為 Ridge 正則化,它在損失函數中添加參數的平方和作為懲罰項。L2 正則化對參數的影響相對較小,但可以有效控制參數的大小。
彈性網正則化(Elastic Net Regularization):是 L1 和 L2 正則化的結合,它綜合了兩者的優勢,同時可以應對特征相關性較高的情況。
正則化的數學形式通常表示為:
L1 正則化:Loss = 原始損失函數 + λ * ∑|θi|
L2 正則化:Loss = 原始損失函數 + λ * ∑θi^2
其中,λ 是正則化參數,用于調節正則化的強度,θi 是模型的參數。
在深度學習中,正則化方法通常通過在模型的層中添加正則化項來實現,例如在全連接層中添加 L1 或 L2 正則化。正則化可以幫助模型更好地泛化到未見過的數據,減少過擬合問題。
代碼實現
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, regularizers# 加載數據
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28 * 28).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28 * 28).astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, num_classes=10)
y_test = keras.utils.to_categorical(y_test, num_classes=10)# 構建帶 L2 正則化的神經網絡模型
model = keras.Sequential([layers.Input(shape=(784,)), # 輸入層layers.Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.01)), # 隱藏層,添加 L2 正則化layers.Dense(10, activation='softmax') # 輸出層
])# 編譯模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 訓練模型
model.fit(x_train, y_train, batch_size=64, epochs=10, validation_split=0.1)# 評估模型
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print("Test Loss:", test_loss)
print("Test Accuracy:", test_accuracy)