有哪些方法可以设计具有以下限制的神经网络输出值的范数必须小于或等于 1?特别是,我将如何为这个网络执行反向传播?
我在想一定有一些“惩罚”方法,就像在数学优化问题中一样,你可以引入一个对数障碍函数作为“惩罚函数”
有哪些方法可以设计具有以下限制的神经网络输出值的范数必须小于或等于 1?特别是,我将如何为这个网络执行反向传播?
我在想一定有一些“惩罚”方法,就像在数学优化问题中一样,你可以引入一个对数障碍函数作为“惩罚函数”
惩罚(障碍函数)是单纯形类型约束的完全有效且最简单的方法(L1 范数是对绝对值的单纯形约束)。任何类型的障碍函数都可以工作,对数、倒数或二次。任何主要框架(pytorch、tensorflow)都支持它们,只需将它们添加到损失函数中即可。您需要对惩罚的比例因子进行一些超参数调整。
有更有效但更复杂的方法来做到这一点。您可以自动输出满足单纯形约束的值,而不是放置约束:
假设 L1 范数约束是,
最后一步的反向传播可能需要可微分排序,这在大多数框架中都没有,您可能必须寻找开源实现,例如从这里提取或使用一些自动微分包。两者都需要大量的代码阅读/调试。但是根据我的经验,假设不变在许多情况下也适用,在这种情况下不需要可微分排序。常数背后的直觉 就是它 可以选择这样的方式,即它的值不会影响排序顺序的一些间隔。
术语“大小”不适用于网络或网络的张量输出。这些就是品质。
问题可能是指最后一种品质。
对在用作最后一个激活函数的输出的数字类型范围内但不在所需训练函数的允许输出范围内的值施加惩罚以有限的方式起作用。它使输出分布相对于可能的学习状态的自然分布倾斜,因此很容易干扰收敛质量或速度或两者兼而有之。
有许多技术可以映射具有约束范围的自然输出分布,但必须在不使所用技术上游的分布倾斜的情况下完成,以避免对人工网络的有利收敛特性产生负面影响。
这里可以描述的一个简单情况是,当可能的输出状态的数量在在哪里{正整数}。在这种情况下,网络的最后一层可以是阈值激活函数以 1 或 -1 作为可能的输出值。
在这种情况下,序数变为
在哪里是激活函数索引的输出.