混合正则化器有意义吗?
Does it make sense to mix regularizers?
混合正则项有意义吗?例如,在第一层使用 L1 到 select 特征,其余使用 L2?
我创建了这个模型:
model = Sequential()
# the input layer uses L1 to partially serve as a feature selection layer
model.add(Dense(10, input_dim = train_x.shape[1], activation = 'swish', kernel_regularizer=regularizers.l1(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(10, activation = 'softmax'))
但我不确定混合 L1 和 L2 是否是个好主意,对我来说,将 L1 作为特征 select 或在输入层中似乎是合乎逻辑的。但在任何地方,我都只看到对所有层使用相同正则化器的代码。
(该模型似乎给出了相当不错的结果,在多类分类问题中 >95% 的正确预测)
在不同层添加不同的正则化不是问题。有关于这个主题的论文Sparse input neural network。不过,这里有几点需要注意。
- 在第一层添加l1正则化本身不做特征选择。如果一个特征没有被选中,它就不能连接到下一层的任何节点。 l1 正则化将无法完全删除特征的连接。您将需要 group lasso regularization (also called the l_{1,p} norm)。
- keras 本身并没有很好地支持这些正则化的实现,尤其是对于稀疏性。您将需要在每次迭代中手动添加阈值函数。可以在 Sparse input neural network.
中找到算法
混合正则项有意义吗?例如,在第一层使用 L1 到 select 特征,其余使用 L2?
我创建了这个模型:
model = Sequential()
# the input layer uses L1 to partially serve as a feature selection layer
model.add(Dense(10, input_dim = train_x.shape[1], activation = 'swish', kernel_regularizer=regularizers.l1(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(20, activation = 'swish', kernel_regularizer=regularizers.l2(0.001)))
model.add(Dense(10, activation = 'softmax'))
但我不确定混合 L1 和 L2 是否是个好主意,对我来说,将 L1 作为特征 select 或在输入层中似乎是合乎逻辑的。但在任何地方,我都只看到对所有层使用相同正则化器的代码。
(该模型似乎给出了相当不错的结果,在多类分类问题中 >95% 的正确预测)
在不同层添加不同的正则化不是问题。有关于这个主题的论文Sparse input neural network。不过,这里有几点需要注意。
- 在第一层添加l1正则化本身不做特征选择。如果一个特征没有被选中,它就不能连接到下一层的任何节点。 l1 正则化将无法完全删除特征的连接。您将需要 group lasso regularization (also called the l_{1,p} norm)。
- keras 本身并没有很好地支持这些正则化的实现,尤其是对于稀疏性。您将需要在每次迭代中手动添加阈值函数。可以在 Sparse input neural network. 中找到算法