使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras

Posted

技术标签:

【中文标题】使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras【英文标题】:Porting sklearn MLPClassifier to Keras with L2 regularization 【发布时间】:2019-12-06 03:28:53 【问题描述】:

我想将以下 sklearn 模型移植到 keras:

model = MLPClassifier(activation='tanh', hidden_layer_sizes=(60,50), alpha=0.001, random_state=42)

到目前为止,我所拥有的是:

from keras.models import Sequential
from keras.layers import Dense
from keras import regularizers
from tensorflow import set_random_seed

set_random_seed(42)

model = Sequential([
  Dense(60, activation='tanh'),
  Dense(50, activation='tanh'),
  Dense(1, kernel_initializer='normal', activation='sigmoid') 
])

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

model.fit(
  x_train,
  y_train,
  epochs=200,
  batch_size=200,
  validation_data=(x_test, y_test)
)

但现在我正在为正则化术语而苦苦挣扎。 sklearn 文档对此并没有太多的表现力:

alpha : 浮点数,可选,默认 0.0001 L2 惩罚(正则化项)参数。

但在 keras 中,密集层有 3 个用于正则化的属性。

kernel_regularizer:应用于核权重矩阵的正则化函数(参见正则化)。 bias_regularizer:应用于偏置向量的正则化函数(参见正则化函数)。 activity_regularizer:应用于层输出的正则化函数(它的“激活”)。

哪一个实际上相当于sklearn正则化?

【问题讨论】:

【参考方案1】:

根据sklearn doc,alpha参数用于正则化权重

https://scikit-learn.org/stable/modules/neural_networks_supervised.html

MLPRegressor 和 MLPClassifier 都使用参数 alpha 正则化(L2 正则化)术语,有助于避免 通过惩罚大量权重来过度拟合。

Keras 允许您为权重、偏差和激活值指定不同的正则化。显然,您可以对所有三个使用相同的正则化器。

正则化也适用于每层,例如:

from keras import regularizers.l2
reg1 = l2(0.0001)
reg2 = l2(0.001)

model = Sequential([
  Dense(60, activation='tanh', kernel_regularizer=reg1, bias_regularizer=reg1, activity_regularizer=reg1),
  Dense(50, activation='tanh', kernel_regularizer=reg2, bias_regularizer=reg2, activity_regularizer=reg2),
  ...

【讨论】:

which helps in avoiding overfitting by penalizing weights 所以基本上你是说我需要使用偏差+内核正则化但没有活动正则化 不,这只是 sklearn 文档的摘录 :) 正则化激活很重要,这里有一篇关于该主题的好帖子:machinelearningmastery.com/… 但问题不在于如何使用正则化,而是如何在 keras 中实现与 sklearn 在 MLPClassifier 中完全相同的正则化行为。只需快速扫描您的链接部分“MLP Activity Regularization”,因此它实际上只是 activity_regularizer 查看 sklearn 代码,似乎正则化应用于权重:github.com/scikit-learn/scikit-learn/blob/master/sklearn/…

以上是关于使用 L2 正则化将 sklearn MLPClassifier 移植到 Keras的主要内容,如果未能解决你的问题,请参考以下文章

第十三节 岭回归(L2正则化)解决过拟合问题

在sklearn python中撤消L2规范化

ML_6机器学习重要概念补充

正则化项L1和L2的直观理解及L1不可导处理

Kaldi中的L2正则化

机器学习中正则化项L1和L2的直观理解