如何将两个已训练的神经网络权重矩阵合并为一个?

9
我有两个相同的神经网络在两台不同的计算机上运行(以减少训练时间),每个神经网络都有完整数据集MNIST的一个子集。
我的问题是:我是否可以将两个网络的权重矩阵合并为一个矩阵,同时保持正确的准确性?我已经看过几篇关于“批处理”或“随机梯度下降”的文章,但我不认为这适用于我的情况。
如果这是可能的,你能否提供一些伪代码呢?非常感谢!

你需要像集成学习或加权投票这样的东西。网上有很多相关资料。 - cs95
1
可能是重复的问题,与 https://dev59.com/L6jja4cB1Zd3GeqP92GH 相似。 - Andre Holzner
1
可能是[使用Tensorflow合并在两台不同计算机上训练的相同模型的权重]的重复问题(https://dev59.com/L6jja4cB1Zd3GeqP92GH)。 - Andre Holzner
@AndreHolzner 我认为这些问题不同,因为他描述了有两个不同的数据集,而我有同一数据集的两个子集。 - Gerrit Luimstra
2
从技术上讲,我并没有看到两个不同数据集(链接的问题)和两个不同数据子集(这个问题)之间的区别。来自其他问题的摘要:实际上,在训练后没有有意义的方式可以组合权重矩阵。您可以选择1)在训练期间使用数据并行性(需要在训练期间计算机之间进行通信),或者2)使用集成方法来组合单独训练分类器的输出。有关详细信息,请参见链接的问题。 - Andre Holzner
1
在训练过程中,如果您拥有像Facebook工程师这样的资源,可以使用梯度聚合来实现此目标:https://research.fb.com/wp-content/uploads/2017/06/imagenet1kin1h5.pdf - denfromufa
1个回答

9
一般来说,在训练完成后完全结合权重/偏差,这不太可能产生好的结果。但是,有些方法可以使其发挥作用。
结合权重的直觉:考虑以下简单示例:您有一个带有一个隐藏层的MLP。如果对隐藏层中的节点进行排列、输入->隐藏的权重以相同的方式进行排列,并使用反向置换排列隐藏->输出的权重,则MLP的任意两个实例都可以为相同的输入生成相同的输出。换句话说,即使最终得到的网络没有随机性,在特定的特征上,哪个隐藏节点对应于某个特定功能也将是随机的(并由初始化的噪声确定)。
如果像这样在不同数据上(或同一数据的随机子集上)训练两个MLP,则它们可能会以不同的隐藏节点的排列结束,即使初始化都相同,因为在训练期间的梯度噪声。
现在,如果特定属性的输入最强烈地激活网络A的第i个节点和网络B的第j个节点(通常i≠j),则平均A的第i个节点和B的第i个节点之间的权重(对应于不同的特征)可能会降低性能,甚至会产生输出荒谬的网络。
这里有两种可能的解决方案 - 您可以使用其中一个或两个一起。其思想是要么弄清楚两个网络之间哪些节点匹配,要么强制节点匹配。
解决方案A:在不同的数据上训练两个网络数次。平均两者的权重,并用平均权重替换两个网络。重复这个过程。这使得每个网络的第i个节点学习与另一个网络的匹配节点相同的特征,因为它们永远不会分散太远。它们经常从平均权重重新初始化,因此一旦确定排列,它很可能保持稳定。每个时期平均的合理值在每个小批量之间介于1次和几次之间。学习速度仍比顺序训练整个数据的一个网络快,虽然不会比2个网络快2倍。通信开销比每个小批量后平均权重(或梯度)低得多。这可以在集群中的不同机器上运行:传输权重并不是禁止性的,因为它相对较少。此外,同时训练的网络数(和数据拆分)的数量可以超过两个:在实践中,最多可以有10-20个。
(提示:为了获得更好的结果,在每个周期结束后,对您正在训练的网络之间的数据进行新的随机拆分)
这类似于此处提到的“梯度聚合”的效果,但聚合次数要少得多。可以将其视为“懒惰的聚合”。 解决方案B:尝试找出哪些隐藏层节点匹配,然后再进行平均。对权重计算一些相似性指标(可以是L2或其他类似的指标),并且将两个网络中最相似节点的权重进行平均。您还可以对多个节点进行加权平均;例如,您可以平均所有节点或k个最相似的节点,其中使用的权重是相似性的函数。

对于深度网络,您必须从输入开始跟踪配对,并根据较低级别的最高相似性配对对权重进行排列,然后在下一个级别上计算相似性(或者如果进行加权平均,则传播权重)。这可能适用于几层网络,但我认为对于非常深的网络,这不太可能完美地工作。它仍将在前几层中正常工作,但是跟踪置换将很可能无法在到达网络顶部时找到良好的匹配节点。

处理深度网络的另一种方法(除了从底部跟踪置换)是在测试数据集上运行两个网络,并记录每个输入的所有节点的激活,然后平均具有相似激活模式的节点的权重(即倾向于由相同输入强烈激活的节点)。同样,这可以基于仅对A和B中最相似的一对进行平均,或者对两个以上节点进行合适的加权平均。

您可以将此技术与上述“解决方案A”一起使用,以较少频繁地平均权重。您还可以使用节点相似性的加权平均来加速“解决方案A”的收敛。在这种情况下,如果“解决方案B”中的方法不完美也没关系,因为网络偶尔会被组合替换 - 但是如果由某种匹配方法而不是简单平均产生,则组合网络可能更好。额外计算是否值得,取决于您的网络架构等方面,与集群中的通信开销和更快的收敛相比。


@GerritLuimstra谢谢!我在原始答案之后添加了一种结合基于测试集上相似激活模式的权重的方法,并对其余部分进行了扩展。 - Alex I

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接