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

我有一个机器学习模型(即自编码器),它通过在目标函数中添加一个简单的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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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