我们如何设计一个神经网络,使得大号1L1输出的范数小于或等于 1?

人工智能 神经网络 机器学习 反向传播 目标函数 约束优化
2021-10-23 15:17:01

有哪些方法可以设计具有以下限制的神经网络L1输出值的范数必须小于或等于 1?特别是,我将如何为这个网络执行反向传播?

我在想一定有一些“惩罚”方法,就像在数学优化问题中一样,你可以引入一个对数障碍函数作为“惩罚函数”

2个回答

惩罚(障碍函数)是单纯形类型约束的完全有效且最简单的方法(L1 范数是对绝对值的单纯形约束)。任何类型的障碍函数都可以工作,对数、倒数或二次。任何主要框架(pytorch、tensorflow)都支持它们,只需将它们添加到损失函数中即可。您需要对惩罚的比例因子进行一些超参数调整。

有更有效但更复杂的方法来做到这一点。您可以自动输出满足单纯形约束的值,而不是放置约束:

假设 L1 范数约束是v11,vRn

  1. sigmoid(vi)输出到规范元素到 [-1, 1] 的激活
  2. 添加松弛(假)变量元素vn+1=11nvi
  3. 新项目vRn+1,vi=|vi|,1in+1使用标准算法到单位单纯形(也在这里

最后一步的反向传播可能需要可微分排序,这在大多数框架中都没有,您可能必须寻找开源实现,例如从这里提取或使用一些自动微分包。两者都需要大量的代码阅读/调试。但是根据我的经验,假设不变Δ在许多情况下也适用,在这种情况下不需要可微分排序。常数背后的直觉Δ 就是它 Δ 可以选择这样的方式,即它的值不会影响排序顺序的一些间隔。

术语“大小”不适用于网络或网络的张量输出。这些就是品质。

  • N它定义了每个张量实例的等级RN
  • 索引到维度的范围从1N
  • 组成张量实例的标量值的范围——如果它们是离散的而不是实数(由浮点数或定点数近似),则范围是对允许的序数值的描述。

问题可能是指最后一种品质。

对在用作最后一个激活函数的输出的数字类型范围内但不在所需训练函数的允许输出范围内的值施加惩罚以有限的方式起作用。它使输出分布相对于可能的学习状态的自然分布倾斜,因此很容易干扰收敛质量或速度或两者兼而有之。

有许多技术可以映射具有约束范围的自然输出分布,但必须在不使所用技术上游的分布倾斜的情况下完成,以避免对人工网络的有利收敛特性产生负面影响。

这里可以描述的一个简单情况是,当可能的输出状态的数量在2i在哪里i{正整数}。在这种情况下,网络的最后一层可以是i阈值激活函数以 1 或 -1 作为可能的输出值。

在这种情况下,序数变为

o=n=0iyn+12,

在哪里yn是激活函数索引的输出n.