如何在机器学习模型中诱导“均匀”稀疏性/稀疏编码?

我有一个机器学习模型(即自编码器),它通过在目标函数中添加一个简单的L1惩罚项,试图学习输入信号的稀疏表示。这确实有助于促进稀疏向量表示,因为在学习的向量表示中,大多数元素都是零。然而,我需要这种稀疏性具有结构,使得非零元素在向量中“分散”/分布/均匀。具体来说,对于给定的输入信号,我的模型生成的稀疏表示如下所示:

当前的稀疏编码:[...,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,...]

你可以看到,大多数元素是零,夹杂着小簇的非零元素。相反,我希望稀疏性使得非零元素彼此“排斥”,从而使每个非零元素周围至少有一个或多个零,并且向量中很少或没有相邻的非零元素;具体来说,它应该更像这样:

期望的稀疏编码:[...,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,...]

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

有没有一种直接的目标函数惩罚方法可以诱导这种形式的稀疏性?


回答:

库尔贝克-莱布勒散度测量目标分布与样本分布之间的距离,是潜在空间模型/变分自编码器的标准做法。它在多个库中有多种实现。它可以让你在输出上强制执行均匀分布,这在一定程度上会导致更均匀分布的值。此外,额外的硬编码约束也可以在这里帮助你;即,惩罚你输出向量切片之和之间的均方差会惩罚不均匀分布的值。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注