keras.regularizers.l1(0.01)
在神经网络参数上应用L1正则化,以获得稀疏模型。我发现,虽然我的许多系数非常接近于零,但实际上只有很少的系数为零。查看正则化的源代码后,它表明Keras简单地将参数的L1范数添加到损失函数中。
这是不正确的,因为参数几乎肯定永远不会达到零(在浮点误差内),这是使用L1正则化时预期的。当参数为零时,L1范数不可微分,因此需要使用子梯度方法,在优化过程中如果参数足够接近零,则将其设置为零。请参见软阈值操作符
max(0, ..)
此处。Tensorflow/Keras是否这样做,或者使用随机梯度下降来实现这一点是否不切实际?
编辑:此外,这里有一篇非常出色的博客文章,解释了L1正则化的软阈值操作符。
L1
正则化很好。L1 比 L2 更鼓励稀疏性,但并不保证它。Theano 和 TensorFlow 都经过了充分的测试,并且当然可以在不可微分点周围很好地处理梯度。 - yhenon