神经网络基础-神经网络补充概念-34-正则化

概念

正则化是一种用于控制模型复杂度并防止过拟合的技术,在机器学习和深度学习中广泛应用。它通过在损失函数中添加一项惩罚项来限制模型的参数,从而使模型更倾向于选择简单的参数配置。

理解

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)

你可能感兴趣的:(神经网络,神经网络补充,神经网络,人工智能,深度学习)