【问题标题】:how to add constraint to make sure weights toward to 0 as much as possible in tensorflow?如何在张量流中添加约束以确保权重尽可能接近 0?
【发布时间】:2021-05-22 10:42:33
【问题描述】:

假设我们有一个简单的神经网络,有 4 个Dense 层,Lin -> L1 -> L2 -> Lout;假设L2 = matrix[1x5],这5个值可以表示为[a1, a2, a3, a4, a5];当我们训练模型时,我们知道有很多组[a1, a2, a3, a4, a5]满足[1,2,3,4,5][1,0,4,5,5][0,0,15,0,0][0,0,0,5,0]等数据;

我的问题是如何为层权重添加约束,以便我们可以确保它们中的大多数为 0。例如,4组L2权重[1,2,3,4,5][1,0,4,5,5][0,0,15,0,0][0,0,0,5,0],其中第3和第4个有4个零;和 5

我们知道 TensorFlow Keras 具有以下功能:https://keras.io/api/layers/constraints/

但我的问题没有内置约束。关于如何编写这样一个约束的任何想法,或者可能有另一种方法来做到这一点?

更具体地说,我们有很多向量,我们想要对向量进行分类,我们想要一个层来识别哪些列是重要的(但我们不知道确切的列,比如词嵌入,我们需要将一个词转换为向量; 这里我们需要将向量转换为重要性位掩码,然后进行进一步处理),我们可以删除其他列。例如,我们有特征[x1, x2, x3, x4, x5],我们得到L2 [0,0,0,5,0],那么我们可以说,第4列很重要,因此我们可以将特征向量转换为[0, 0, 0, 5 * x4, 0]

提前谢谢。

【问题讨论】:

    标签: tensorflow constraints dropout


    【解决方案1】:

    这样我们就可以确保它们中的大多数都是 0

    如果对 0 的数量没有 严格 要求(正如您在单列示例中所建议的那样),您正在寻找 Lasso regression(所谓的 L1 正则化),简单地说,就是惩罚每个权重的大小。只有在对推理绝对至关重要的情况下,权重才会很大。

    在 tensorflow 2.x 中,这可以通过 kernel regularizer 完成。现在,这强制权重很小,但不保证它会为 0。此外,如果滥用,它会严重影响性能。

    作为旁注,您可能试图解决的问题与机器学习的可解释性/可解释性有关,虽然您的方法很有趣,但可能值得研究单独构建的方法/模型为此目的(有些模型能够产生特征重要性等)

    【讨论】:

      【解决方案2】:

      您可以使用 L1 和 L2 损失。 具有 L1 损失的权重变得稀疏。许多元素将为 0。具有 L2 损失的权重没有很多零,但 L2 范数很小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2018-10-18
        • 2018-01-09
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多