如何在机器学习模型中引入"uniform"sparsity/sparse编码?

How to induce "uniform" sparsity/sparse coding in machine learning model?

我有一个机器学习模型(即自动编码器),它试图通过添加到 objective 函数的简单 l1 惩罚项来学习输入信号的稀疏表示。这确实有助于促进稀疏向量表示,因为学习向量表示中的大多数元素都是零。但是,我需要稀疏度的结构使得非零元素在向量上 "spread out"/distributed/uniform 。具体来说,对于给定的输入信号,我的模型会生成如下所示的稀疏表示:

当前稀疏代码: [...,0,0,0,0,0,0,0,0,0,0,0,0.2,0.3,0.5,0.9,0.3,0.2,0.1,0,0,0,0,0,0,0,0,0,0,0,0,...]

您会发现大多数元素都是零,只有一小群非零元素。相反,我希望稀疏性使得非零元素彼此 "repelled" ,因此使所有非零元素都被至少 1 个或多个零和很少或没有非零包围零个元素在向量中相邻;具体来说,它应该看起来更像这样:

所需的稀疏代码: [...,0,0,0,0,0,0.2,0,0,0,0,0.9,0,0,0,0,0.5,0,0,0,0,0,0,0.7,0,0,0,0.4,0,0,0.6,...]

在后一种稀疏代码中,非零元素的个数可能与前者相似,但每个非零元素之间由一定数量的零隔开。

是否有直接的 objective 函数惩罚可以用来引发这种形式的稀疏性?

Kullback Leibler 散度测量目标分布和样本分布之间的距离,是潜在 space 模型/变分自动编码器的标准做法。它的许多实现存在于多个库中。它将允许您对输出强制执行统一分布,这将(在一定程度上)导致更均匀的 spaced 值。额外的 hard-coded 约束也可以帮助你;即惩罚输出向量切片总和之间的均方差将惩罚不均匀分布的值。