代码之家  ›  专栏  ›  技术社区  ›  Brandon Brown

如何在机器学习模型中引入“一致”稀疏/稀疏编码?

  •  0
  • Brandon Brown  · 技术社区  · 7 年前

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

    您可以了解到,大多数元素都是零,只有非零元素的小簇。相反,我希望稀疏性是这样的,即非零元素彼此“排斥”,从而使所有非零元素被至少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 ,...]

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

    是否有一个简单的目标函数惩罚可以用来诱导这种形式的稀疏性?

    1 回复  |  直到 7 年前
        1
  •  0
  •   KonstantinosKokos    7 年前

    Kullback-Leibler散度测量目标分布和样本分布之间的距离,是潜在空间模型/变分自动编码器的标准实践。许多it实现跨越多个库。它将允许您在输出上强制执行均匀分布,这将(在一定程度上)导致更均匀分布的值。其他硬编码约束也可以在这方面帮助您;i、 e.惩罚输出向量切片和之间的均方差将惩罚不均匀分布的值。