[TensorFlow] [Keras] kernel_regularizer、bias_regularizer 和 activity_regularizer

前言

在设计深度学习模型的时候,我们经常需要使用正则化(Regularization)技巧来减少模型的过拟合效果,例如 L1 正则化、L2 正则化等。在Keras中,我们可以方便地使用三种正则化技巧:

  • keras.regularizers.l1
  • keras.regularizers.l2
  • keras.regularizers.l1_l2

那么,我们应该如何使用这三种正则化技巧呢?以Keras中的Dense层为例,我们发现有以下三个参数:

  • kernel_regularizer
  • bias_regularizer
  • activity_regularizer

这三个参数代表什么含义,我们该使用哪一个呢?国内论坛鲜少有相关讨论,写此文以记之。

三个参数的异同

kernel_regularizer:初看似乎有点费解,kernel代表什么呢?其实在旧版本的Keras中,该参数叫做weight_regularizer,即是对该层中的权值进行正则化,亦即对权值进行限制,使其不至于过大。
bias_regularizer:与权值类似,限制该层中 biases 的大小。
activity_regularizer:更让人费解,activity又代表什么?其实就是对该层的输出进行正则化。由此可见Keras的命名团队各个都是鬼才。

现在我们知道了这三个参数的异同,那么,我们该在什么时候使用哪一个参数呢?网友 Bloc97 [1] 如是说:

  1. 大多数情况下,使用kernel_regularizer就足够了;
  2. 如果你希望输入和输出是接近的,你可以使用bias_regularizer
  3. 如果你希望该层的输出尽量小,你应该使用activity_regularizer

实验

我们使用一个简单的模型来测试以下正则化的效果,基准代码如下:

from tensorflow.python import keras


mnist = keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)
model.evaluate(x_test, y_test)

实验结果如下:

参数结果
no regularizer0.9770
kernel_regularizer=l1(0.001)0.9421
kernel_regularizer=l2(0.001)0.9690
kernel_regularizer=l2(0.0001)0.9785
kernel_regularizer=l1_l2(l1=0.0001, l2=0.0001)0.9753
bias_regularizer=l2(0.0001)0.9755
activity_regularizer=l2(0.0001)0.9764
kernel_regularizer=l2(0.0001)
bias_regularizer=l2(0.0001)
0.9771
activity_regularizer=l2(0.0001)0.9783
activation=‘linear’0.9233
activation='linear’
kernel_regularizer=l2(0.0001)
bias_regularizer=l2(0.0001)
0.9225
activation='linear’
activity_regularizer=l2(0.0001)
0.9199

实验结果(初步分析,并不绝对)说明:

  1. 正则化系数的选择很重要,选的不对容易有负面影响,选的好的话实验效果有提升;
  2. 实验四、五、六说明,在当前实验环境下,无论是 L1L2,还是 L1_L2,对实验结果影响都不大;

可能是由于 MNIST 任务太过于简单,实验结果区别都不是很大。具体使用哪种方法,只能由各位看官自己探索了。

Reference

  1. Bloc97. (December 17, 2018). Difference between kernel, bias, and activity regulizers in Keras. Retrieved from https://stats.stackexchange.com/questions/383310/difference-between-kernel-bias-and-activity-regulizers-in-keras
### 回答1: Keras正则化器是一种用于控制模型复杂度的技术,它可以在训练期间对模型的权重进行约束,以避免过拟合。常见的Keras正则化器包括L1正则化、L2正则化弹性网络正则化等。这些正则化器可以通过在模型中添加相应的正则化项来实现。 ### 回答2: Keras.regularizers 是一个用于正则化(regularization)的工具库,它用于在训练神经网络时对模型进行约束,以防止过拟合(overfitting)。 正则化是一种常用的机器学习技术,用于避免模型在训练数据上过度拟合,并提高模型的泛化能力。Keras.regularizers 提供了几种不同的正则化方法,包括L1正则化、L2正则化L1-L2混合正则化。 L1正则化通过在模型的损失函数中添加权重的L1范数作为正则化项,使得模型的权重更加稀疏。这样可以减少模型中不相关或不重要的特征的影响,提高模型的泛化能力。 L2正则化通过在模型的损失函数中添加权重的平方作为正则化项,使得模型的权重更加平滑。这样可以减少模型中权重过大的情况,防止模型对训练数据的噪声过度敏感。 L1-L2混合正则化是将L1正则化L2正则化结合起来使用,既能提高模型的稀疏性,也能保持模型的平滑性。 Keras.regularizers 还提供了一些额外的参数,如正则化因子(regularization factor)偏置正则化bias regularization),用于进一步调节正则化的效果。 总而言之,Keras.regularizers 是一个用于正则化神经网络的工具库,通过不同的正则化方法,帮助我们防止过拟合,提高模型的泛化能力。 ### 回答3: Keras.regularizers是Keras框架中用于正则化模型参数的方法之一。正则化是一种用于控制模型复杂度的方法,以防止过拟合问题的出现。在使用神经网络进行训练时,如果模型的参数过多,很容易导致过拟合,即在训练集上的表现良好但在测试集上不好的现象。 Keras.regularizers提供了几种常用的正则化方法,包括L1正则化、L2正则化L1_L2正则化。这些正则化方法可以通过在模型的层或参数上使用相应的正则化器来实现。其中,L1正则化可以使模型的参数变得稀疏,即将某些权重设置为0;L2正则化可以使模型的参数权重趋向于较小的值,防止过拟合;而L1_L2正则化则结合了两者的优点。 使用Keras.regularizers时,可以在模型的层上设置相应的正则化器参数,例如kernel_regularizerbias_regularizer。这些参数可以传入L1、L2或L1_L2正则化器对象,以对指定的层或参数进行正则化。在模型训练过程中,正则化方法会将正则化项添加到损失函数中,从而进行参数更新。通过调整正则化参数的大小,可以控制正则化的强度。 总而言之,Keras.regularizers是Keras中用于正则化模型参数的工具库,提供了多种常用的正则化方法,能够有效地控制模型的复杂度,防止过拟合问题的发生。它是深度学习模型中非常重要的一部分,能够提升模型的泛化能力性能。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xovee

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值