如何添加约束以确保张量流中的权重尽可能接近 0?
how to add constraint to make sure weights toward to 0 as much as possible in tensorflow?
假设我们有一个具有 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 < 15,因此我们将第 4 组视为 4 组中最优先的。
我们知道 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]
提前致谢。
so that we can make sure most of them are 0
如果对 0 的数量没有 strict 要求(正如您可能在单列示例中建议的那样),您正在寻找 Lasso regression(所以称为 L1 正则化),简而言之,它会惩罚每个权重的大小。权重只有在对推理绝对至关重要的情况下才会大。
在 tensorflow 2.x 中,这可以通过 kernel regularizer 完成。现在,这会强制权重变小,但不能保证权重为 0。此外,如果滥用,它会严重影响性能。
附带说明一下,您可能试图解决的问题与机器学习interpretability/explainability有关,虽然您的方法很有趣,但可能值得查看 methods/models 专为此目的构建(有些模型能够产生特征重要性等)
您可以使用 L1 和 L2 损失。
具有 L1 损失的权重变得稀疏。许多元素将是0。具有L2损失的权重没有很多零,但L2范数很小。
假设我们有一个具有 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 < 15,因此我们将第 4 组视为 4 组中最优先的。
我们知道 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]
提前致谢。
so that we can make sure most of them are 0
如果对 0 的数量没有 strict 要求(正如您可能在单列示例中建议的那样),您正在寻找 Lasso regression(所以称为 L1 正则化),简而言之,它会惩罚每个权重的大小。权重只有在对推理绝对至关重要的情况下才会大。
在 tensorflow 2.x 中,这可以通过 kernel regularizer 完成。现在,这会强制权重变小,但不能保证权重为 0。此外,如果滥用,它会严重影响性能。
附带说明一下,您可能试图解决的问题与机器学习interpretability/explainability有关,虽然您的方法很有趣,但可能值得查看 methods/models 专为此目的构建(有些模型能够产生特征重要性等)
您可以使用 L1 和 L2 损失。 具有 L1 损失的权重变得稀疏。许多元素将是0。具有L2损失的权重没有很多零,但L2范数很小。