稳健可靠地对程序进行平滑处理
1. 平滑解释概述
在某种程度上,平滑解释之于数值优化,就如同抽象之于模型检查,它是一种在程序衍生的搜索空间中近似处理具有挑战性的局部转换的机制。不过,我们所使用的平滑语义与抽象中使用的收集语义有很大不同。实际上,程序 P 的平滑语义可以看作是 P 的概率语义的期望。
具体来说,考虑程序 P 的输入 $x \in R^k$,在执行 P 之前,我们按照具有独立分量和标准差为 $\beta$ 的 $k$ 维正态分布对 $x$ 进行随机扰动。这样,P 的输入就变成了一个遵循正态分布 $N$(均值为 $x$,形状与扰动时使用的分布相似)的随机变量 $X$。接着,我们以清晰语义对 $X$ 执行 P,并考虑输出 $ [P] $ 的期望:$Exp [ [P] ] = \int_{-\infty}^{\infty} [P] N(x - r) dr = [P] $,这里的 $[[P]]$ 是使用高斯分布 $N$ 计算得出的。简单来讲,P 的平滑语义就是在对程序输入进行正态分布扰动的情况下,P 的期望清晰语义。
在明确了平滑解释器的行为方式后,我们面临的问题是如何通过算法实现这样一个解释器。对于任何输入 $x$,一个理想化的 P 的平滑解释器必须计算 $[[P]]_{\beta}(x)$,也就是在实数空间上对 P 的语义进行积分。但一般来说,这个问题是不可判定的,所以任何平滑解释器的算法实现都必然是近似的。那么
超级会员免费看
订阅专栏 解锁全文
3289

被折叠的 条评论
为什么被折叠?



