我并不完全是优化专家,但是:这取决于您所说的“不可微分”是什么意思。
对于许多使用的数学函数,“不可微”仅表示“并非处处可微”——但这仍然是“几乎处处可微,除了在可数的许多点上”(例如,abs
,relu
)。这些函数根本不是问题——你可以选择任何次梯度并应用任何正常的梯度方法。这就是基本上所有用于机器学习的 AD 系统所做的。无论如何,非奇异次梯度的情况发生的概率很小。某些形式的凸目标的替代方法是近端梯度方法,它以一种有效的方式“平滑”目标,保持最优(参见ProximalOperators.jl)。
然后是那些看起来根本无法区分的函数,因为它们看起来是“组合的”或离散的,但实际上是分段可微的(如果从正确的角度来看)。这包括排序和排名。但是你必须找到它们,并且描述和实现衍生物是相当复杂的。AD系统是否支持这些功能取决于其“标准库”的复杂程度。这种情况的一些变体,如“置换”,可能只是在控制结构上脱离 AD,而移动复杂的则需要手动定义原始伴随。
然而,对于某些类型的问题,我们只是在一个本质上离散的空间中工作——比如一些概率分布的整数参数。在这些情况下,区分是没有意义的,因此 AD 库将它们的原语定义为不适用于这些参数。可能的替代方法是使用(混合)整数规划、近似、搜索和模型选择。这种情况也发生在优化空间本身取决于所讨论的参数的问题上,例如fill
. 我们也有诸如ℓ0“范数”或矩阵秩之类的东西,其中存在众所周知的连续松弛,但这超出了 AD 的范围)。
(在 MCMC 用于离散或维度参数的特定情况下,还有其他方法可以解决这个问题,例如在 Gibbs 采样器中将 HMC 与其他 MC 方法组合,或者使用非参数模型。VI可以使用其他技巧。)
话虽如此,您在优化中很少会遇到复杂的无处可微连续函数。它们已经很难描述,只是不太可能出现在我们用于建模的那种数学中。