3.7 正则化 (Regularization)


文档摘要

3.7 正则化 (Regularization) TensorFlow Keras 高级 API:3.7 正则化 (Regularization) 正则化是机器学习中一种至关重要的技术,用于防止模型过拟合。过拟合是指模型在训练数据上表现良好,但在未见过的新数据上表现不佳。正则化通过在损失函数中添加一个惩罚项,来约束模型的复杂度,从而提高模型的泛化能力。 正则化的原理 正则化的核心思想是鼓励模型学习更简单的解决方案。更简单的模型通常具有更小的权重,这意味着模型对输入数据的微小变化不太敏感,从而降低了过拟合的风险。 常见的正则化方法包括: L1 正则化 (Lasso Regression): 在损失函数中添加权重绝对值的和作为惩罚项。L1 正则化倾向于使某些权重变为零,从而实现特征选择。

3.7 正则化 (Regularization)

TensorFlow Keras 高级 API:3.7 正则化 (Regularization)

正则化是机器学习中一种至关重要的技术,用于防止模型过拟合。过拟合是指模型在训练数据上表现良好,但在未见过的新数据上表现不佳。正则化通过在损失函数中添加一个惩罚项,来约束模型的复杂度,从而提高模型的泛化能力。

1. 正则化的原理

正则化的核心思想是鼓励模型学习更简单的解决方案。更简单的模型通常具有更小的权重,这意味着模型对输入数据的微小变化不太敏感,从而降低了过拟合的风险。

常见的正则化方法包括:

  • L1 正则化 (Lasso Regression): 在损失函数中添加权重绝对值的和作为惩罚项。L1 正则化倾向于使某些权重变为零,从而实现特征选择。

  • L2 正则化 (Ridge Regression): 在损失函数中添加权重平方的和作为惩罚项。L2 正则化使权重变小,但不会使其变为零。

  • Elastic Net 正则化: 结合了 L1 和 L2 正则化,通过调整 L1 和 L2 的比例,可以灵活地控制模型的稀疏性和权重衰减。

2. Keras 中的正则化实现

Keras 提供了方便的方式来应用正则化。你可以在 Keras 层中指定 kernel_regularizerbias_regularizeractivity_regularizer 参数来应用正则化。

  • kernel_regularizer: 对层的权重矩阵 (kernel) 应用正则化。

  • bias_regularizer: 对层的偏置向量 (bias) 应用正则化。

  • activity_regularizer: 对层的输出 (activation) 应用正则化。

Keras 提供了以下正则化器:

  • tf.keras.regularizers.L1(l1=0.01): L1 正则化。

  • tf.keras.regularizers.L2(l2=0.01): L2 正则化。

  • tf.keras.regularizers.L1L2(l1=0.01, l2=0.01): Elastic Net 正则化。

3. 代码实践

下面是一些使用 Keras 实现正则化的代码示例。

示例 1: L2 正则化

import tensorflow as tf from tensorflow.keras import layers, models, regularizers # 定义模型 model = models.Sequential([ layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L2(0.01), input_shape=(784,)), layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L2(0.01)), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 打印模型概况 model.summary()

在这个例子中,我们在两个 Dense 层中都使用了 L2 正则化,正则化强度为 0.01。

示例 2: L1 正则化

import tensorflow as tf from tensorflow.keras import layers, models, regularizers # 定义模型 model = models.Sequential([ layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L1(0.01), input_shape=(784,)), layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L1(0.01)), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 打印模型概况 model.summary()

在这个例子中,我们使用了 L1 正则化,正则化强度为 0.01。

示例 3: Elastic Net 正则化

import tensorflow as tf from tensorflow.keras import layers, models, regularizers # 定义模型 model = models.Sequential([ layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L1L2(l1=0.01, l2=0.01), input_shape=(784,)), layers.Dense(64, activation='relu', kernel_regularizer=regularizers.L1L2(l1=0.01, l2=0.01)), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 打印模型概况 model.summary()

在这个例子中,我们使用了 Elastic Net 正则化,L1 和 L2 的正则化强度都为 0.01。

示例 4: 对 Bias 进行正则化

import tensorflow as tf from tensorflow.keras import layers, models, regularizers # 定义模型 model = models.Sequential([ layers.Dense(64, activation='relu', bias_regularizer=regularizers.L2(0.01), input_shape=(784,)), layers.Dense(64, activation='relu', bias_regularizer=regularizers.L2(0.01)), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 打印模型概况 model.summary()

在这个例子中,我们对 Dense 层的 bias 进行了 L2 正则化。

示例 5: 对 Activation 进行正则化

import tensorflow as tf from tensorflow.keras import layers, models, regularizers # 定义模型 model = models.Sequential([ layers.Dense(64, activation='relu', activity_regularizer=regularizers.L2(0.01), input_shape=(784,)), layers.Dense(64, activation='relu', activity_regularizer=regularizers.L2(0.01)), layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 打印模型概况 model.summary()

在这个例子中,我们对 Dense 层的 activation 进行了 L2 正则化。

4. 正则化强度的选择

正则化强度是一个重要的超参数,需要仔细调整。正则化强度过小,可能无法有效地防止过拟合;正则化强度过大,可能会导致模型欠拟合。

通常,可以使用交叉验证来选择合适的正则化强度。可以尝试不同的正则化强度,然后选择在验证集上表现最好的值。

5. 正则化的效果

正则化可以有效地提高模型的泛化能力。通过约束模型的复杂度,正则化可以减少模型对训练数据的过拟合,从而提高模型在未见过的新数据上的表现。

下图展示了正则化如何影响模型的决策边界:

  • Without Regularization (A): 模型可能会学习到非常复杂的决策边界 (B),从而导致过拟合 (E)。

  • With Regularization (C): 正则化可以约束模型的复杂度,使其学习到更简单的决策边界 (D),从而提高泛化能力 (F)。

6. 总结

正则化是防止模型过拟合的重要技术。Keras 提供了方便的方式来应用 L1、L2 和 Elastic Net 正则化。通过仔细选择正则化强度,可以有效地提高模型的泛化能力。

希望这篇文章能够帮助你理解和应用 Keras 中的正则化技术。记住,正则化是一个强大的工具,可以帮助你构建更健壮和泛化能力更强的机器学习模型。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U