前言
在设计深度学习模型的时候,我们经常需要使用正则化(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] 如是说:
- 大多数情况下,使用
kernel_regularizer
就足够了; - 如果你希望输入和输出是接近的,你可以使用
bias_regularizer
; - 如果你希望该层的输出尽量小,你应该使用
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 regularizer | 0.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 |
实验结果(初步分析,并不绝对)说明:
- 正则化系数的选择很重要,选的不对容易有负面影响,选的好的话实验效果有提升;
- 实验四、五、六说明,在当前实验环境下,无论是
L1
、L2
,还是L1_L2
,对实验结果影响都不大;
可能是由于 MNIST 任务太过于简单,实验结果区别都不是很大。具体使用哪种方法,只能由各位看官自己探索了。
Reference
- 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