gpt4 book ai didi

tensorflow - Keras/Tensorflow 中的 L1 正则化 *真的* L1 正则化吗?

转载 作者:行者123 更新时间:2023-11-30 08:22:50 26 4
gpt4 key购买 nike

我使用 keras.regularizers.l1(0.01) 对 Keras 中的神经网络参数进行 L1 正则化,以获得稀疏模型。我发现,虽然我的许多系数接近为零,但其中很少有实际上为零。

查看 the source code for the regularization 后,这表明 Keras 只是将参数的 L1 范数添加到损失函数中。

这是不正确的,因为参数几乎肯定永远不会按照 L1 正则化的预期达到零(在浮点误差内)。当参数为零时,L1 范数不可微,因此如果优化例程中参数足够接近零,则需要使用次梯度方法,将参数设置为零。请参阅软阈值运算符 max(0, ..) here .

Tensorflow/Keras 会这样做吗?还是说这对于随机梯度下降来说不切实际?

编辑:另外here是一篇精彩的博客文章,解释了 L1 正则化的软阈值运算符。

最佳答案

因此,尽管@Joshua 给出了答案,但还有其他三件事值得一提:

  1. 0 中的渐变没有问题。与 relu 情况类似,keras 自动将其设置为 1
  2. 请记住,小于 1e-6 的值实际上等于 0,因为这是 float32 精度。
  3. 由于基于梯度下降的算法的性质(以及设置较高的 l1 值),因为梯度不连续性可能会发生振荡。为了理解,想象一下对于给定的权重 w = 0.005,您的学习率等于 0.01 并且主要损失的梯度等于 0 w.r.t.到w。因此您的体重将按以下方式更新:

    w = 0.005 - 1 * 0.01 = -0.05 (because gradient is equal to 1 as w > 0),

    第二次更新后:

    w = -0.005 + 1 * 0.01 = 0.05 (because gradient is equal to -1 as w < 0).

    正如您所见,即使您应用了 l1 正则化,w 的绝对值也没有减少,这是由于基于梯度的算法的性质而发生的。当然,这是简化的情况,但在使用 l1 范数正则化器时,您可能会经常遇到这种振荡行为。

关于tensorflow - Keras/Tensorflow 中的 L1 正则化 *真的* L1 正则化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com