如何在 ANN 中只保留重要的权重

数据挖掘 神经网络
2022-03-03 03:09:26

我的权重存储在二维矩阵中。第 i 行是指前一层中的节点 i,该行中的列是节点 i 连接到的神经元。我只想保留一些节点。如何选择 3 个最大权重并将其存储在单独的数组中,同时跟踪它属于哪个神经元。此外,是否在理论上测试了某些权重的贡献大于其他权重?

3个回答

我先解决你的最后一个问题:

是否在理论上测试了某些权重的贡献大于其他权重?

在学习 NN 时,我认为在第一个隐藏层中拥有大量节点会更好,然后在随后的隐藏层中减少。可以想象,这种配置中的许多权重都接近于零,但这忽略了两个主要思想:发送到激活函数的值是相加的,因此如果输入很大,即使很小的值仍然可以产生影响,而 0乘以任何东西都是 0;这些节点不具有代表性或没有分配特定的职责,因此我假设,除非您从完全相同的初始权重开始,否则每次训练模型时节点可能会学习不同的特征。

随后,我得出的结论是,如果许多权重接近于零,我的隐藏层中可能有太多节点。这不一定会考虑激活函数,但这是我处理模型架构的方式。

涵盖了这一点,您可以将矩阵转换为稀疏矩阵,根据值对稀疏矩阵进行排序并删除截止值以下的所有内容。这将完成你所要求的我相信。

但是,我会问你为什么只想保存三个权重?我无法想象减小权重矩阵的大小有什么好处。如果您可以在此概念下获得相同的性能,我认为您应该解决您的模型架构。我不知道有任何具体的研究可以解决这是否是一种可接受的做法,但训练模型然后丢弃大部分模型似乎是浪费精力。简化模型。

高温高压

是的,一些权重比其他权重贡献更多,但是你将如何获得每个神经元的重要性及其节点权重?

我相信有一个简单的解决方案可以从任何 ANN 架构中学习并获得重要的权重矩阵。这可以通过使用 L1 正则化来训练您的 ANN 模型来实现。L1 正则化通过将权重分配给输入矩阵中最重要的特征来保持权重矩阵稀疏,方法是在需要时增强权重值的重要性并减少非重要特征的其他权重值。

内置特征选择1 它经常被提及为 L1-norm 的一个有用属性,而 L2-norm 没有。这实际上是 L1 范数的结果,它往往会产生稀疏系数(解释如下)。假设模型有 100 个系数,但其中只有 10 个具有非零系数,这实际上是在说“其他 90 个预测变量在预测目标值时无用”。L2-norm 产生非稀疏系数,因此不具有此属性。

L1正则化解释2

换句话说,具有 L1 正则化的神经元最终仅使用其最重要输入的稀疏子集,并且对“嘈杂”输入几乎保持不变。相比之下,来自 L2 正则化的最终权重向量通常是分散的、小的数字。在实践中,如果您不关心显式特征选择,则可以预期 L2 正则化会提供优于 L1 的性能。

The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks是几年前的一篇开创性论文,它表明在任何神经网络中都有一个小得多的子网络来完成大部分工作。他们在论文中描述了他们修剪神经网络的方法。但是,它们保持最佳权重,而不是最佳节点。

影响神经元输出的重要因素不是权重,而是权重平衡(即每个输入相对于其他输入如何加权)。

我建议,如果您希望保留最重要的权重,请采用上述论文中的方法。如果你想保留最好的神经元,通过查看下一层神经元分配给它的相对权重来查看每个神经元的相对重要性。