AquaSense:基于量化推理的概率程序自动化敏感性分析
1. 引言
概率编程(PP)为以程序形式编码统计模型提供了直观的方式,是一个快速兴起的领域,已在计算机视觉、机器人技术、科学模拟和数据科学等领域得到应用。在开发概率程序时,开发者需要对模型和推理所基于的数据做出假设,但这些假设的可靠性未知,错误的先验可能导致错误的结果。因此,对先验分布参数进行敏感性分析,以识别选择不当的先验并改进基础统计模型就显得尤为重要。
本文介绍了AquaSense,这是一个用于概率程序高效准确敏感性分析的自动化工具。它以概率程序为输入,为程序中的每个先验参数注入符号扰动ϵ,然后模拟由于ϵ值导致的后验分布变化。AquaSense核心采用了概率程序的量化推理,将连续随机变量的值划分为有限区间,从而解决了难以处理的积分问题。
评估结果显示,与基于完全符号推理的PSense系统相比,AquaSense能计算12个程序中45个参数的敏感性,而PSense只能计算11个。在连续分布的程序上,AquaSense平均比PSense快18.10倍,在离散程序上能产生精确结果。在91%的评估连续参数上,AquaSense能在40秒内以高精度(误差低于5%)计算出敏感性结果。
主要贡献如下:
1. 为现实世界的概率程序设计并构建了基于量化的敏感性分析器AquaSense,支持多种前端语言,利用量化推理分析现有工具无法处理的模型。
2. 正式证明了AquaSense在有界支持的连续程序上的分析结果逐点收敛到精确分析结果,并通过实验证明了其在离散程序上的精确性。
3. 实验表明,AquaSense支持更广泛的连续程序,比现有工具PSense实现了数量级的加速,同时在离散程序上具有相当的能力和速度。
AquaSense的最新源代码和工件可在https://github.com/uiuc-arc/aquasense获取。
2. 示例:敏感性驱动的开发
概率编程是将统计模型表示为计算机程序的直观方式。以下是一个简单的概率程序示例,用于表示回归模型:
# Data observations
vector x[N] = [3.0,...]
vector y[N] = [0.6094,...]
# Model
b0 ~ uniform(-1, 1)
b1 ~ uniform(-1, 1)
sigma ~ uniform(0, 2)
for (i in 1:N)
y[i] ~ normal(b0+x[i]*b1, sigma)
在这个程序中,我们观察到一组x和y的数据对,想要拟合一条直线y = b0 + x * b1。我们首先指定了截距b0、斜率b1和标准差sigma的先验分布为均匀分布,然后指定每个数据点y[i]来自均值为b0 + x[i] * b1、标准差为sigma的正态分布。最终,程序由联合后验概率密度f(b0, b1, sigma)表示。
在选择先验参数时,开发者可能不清楚这些临时决策会如何影响最终结果。AquaSense可以自动测试这些参数的敏感性,指导开发者调整先验分布/参数,使模型的敏感性合适。
具体步骤如下:
1.
预分析
:AquaSense对程序进行预分析,识别出三个随机变量及其六个先验参数。
2.
注入噪声
:为了测试每个参数的敏感性,AquaSense注入噪声。例如,为了测试b1的先验上限参数1受到扰动时其后验的变化,AquaSense注入扰动参数ϵ,并将先验更新为b1~uniform(-1, 1+ϵ)。
3.
测量敏感性
:AquaSense将敏感性测量为有扰动和无扰动的后验之间的距离,这里使用期望距离(ED),即后验期望的绝对差值。对于随机变量X,其敏感性为EDX(ϵ) = |EX∼P (0)[X] - EX∼P (ϵ)[X]|。
4.
运行程序
:AquaSense均匀采样一组ϵ值,调用量化推理算法AQUA运行有噪声和无噪声的程序,得到近似的后验分布密度函数。
5.
计算近似期望
:AquaSense对近似密度函数进行积分,得到近似的后验期望,由于AQUA输出的后验密度是分段常数函数,因此可以用求和代替积分。
6.
输出结果
:AquaSense将程序的敏感性输出为ϵ的插值函数,并可以可视化距离函数。
通过敏感性分析,如果发现选择的先验参数对扰动相对不敏感,例如在上述示例中,当ϵ为0.2时ED为0.01,说明改变先验对结果期望的影响可以忽略不计;如果敏感性较高,例如ED为1,则建议开发者修改先验以捕捉“缺失”的后验密度。
3. 背景:自动化推理算法
概率编程的目标是计算联合概率密度f,为此,概率编程语言(如AQUA、PSI、Stan)与自动化推理算法相结合,这些算法可以精确或近似地计算密度。
PSI使用计算机代数实现精确推理,通过p(b0, b1, sigma) = f(b0,b1,sigma) / ∫f(b0,b1,sigma)db0,b1,sigma符号地计算后验,但这需要处理难以处理的积分。PSense使用PSI计算概率程序的后验分布,因此也受到积分难处理的限制。
AquaSense基于AQUA的量化推理实现敏感性分析。AQUA通过将f的定义域和值域的量化存储在多维数组中,用量化样本近似符号联合概率密度f(b0, b1, sigma)。例如,当使用10个分割时,AQUA将b0、b1、sigma量化为均匀间隔的值,如[-1, -0.8, …, 0.8, 1],然后计算所有变量值组合下的f(b0, b1, sigma),得到一个三维数组,即密度立方体。在AQUA中,归一化简化为对密度立方体的求和,输出近似的联合后验密度函数ˆp(b0, b1, sigma)。
与AQUA不同的替代方法包括基于计算机代数的精确推理(如PSI)和基于采样的推理(如Stan)。精确推理受限于简单模型和少量连续分布,基于采样的推理对于敏感性分析不够准确,而量化推理在处理敏感性分析任务时,既能解决难处理的问题,又比基于采样的推理更准确。
4. AquaSense工作流程
AquaSense的工作流程如下:
graph LR
A[输入概率程序] --> B[噪声注入]
B --> C[AQUA推理]
C --> D[指标计算]
D --> E[输出程序敏感性]
- 输入:概率程序 :AquaSense接受任何由StormIR支持的概率编程语言编写的概率程序,包括Stan、PSI、Pyro或StormIR本身。
-
噪声注入
:
- 对输入程序P进行预分析,找出随机变量及其先验参数。
- 每个参数的噪声边界由用户提供或通过启发式方法计算。
- 为每个先验参数生成一个新程序P(ϵ),通过在参数处注入符号噪声变量ϵ。
- 从噪声边界均匀采样一组ϵ值作为B。
-
AQUA推理
:
- 使用量化推理引擎AQUA解决概率程序。
- AQUA接受概率程序P,输出随机变量x的近似后验作为分段常数函数ˆpX∼P (x)。
- 在有噪声注入的情况下,AquaSense使用量化的ϵ值运行AQUA对程序P(ϵ)进行模拟,得到不同ϵ下的程序结果{ˆpX∼P (ϵi)(x)|ϵi ∈B}。
-
指标计算
:
- 根据推理结果计算敏感性指标,这里使用期望距离(ED),也支持其他标准如总变差距离、柯尔莫哥洛夫 - 斯米尔诺夫距离和用户定义的指标。
- 对于每个ϵi ∈B,先计算ˆEX∼P (0) = ∫x x * ˆpX∼P (0)(x)dx和ˆEX∼P (ϵi) = ∫x x * ˆpX∼P (ϵi)(x)dx,然后计算ˆEDX(ϵi) = |ˆEX∼P (0) - ˆEX∼P (ϵi)|。
-
输出:程序敏感性
:
- AquaSense将敏感性插值为ϵ的函数,使用ED时,通过插值{ˆEDX(ϵi)|ϵi ∈B}输出EDX(ϵ)。
- 用户可以指定ϵ样本的数量和AQUA中使用的量化分割数量,以控制分析的时间 - 准确性权衡。
对于有界支持的连续概率程序,AquaSense的量化敏感性在任何具体的ϵ ∈B处收敛到精确结果。对于离散概率程序,实验表明AquaSense在机器精度范围内是精确的。具体定理如下:
定理1:给定任何ϵ ∈B,记AquaSense的输出为ˆEDN,CX (ϵ),其中N是每个随机变量的量化分割数量,C是AQUA所需的所有随机变量的有界域。设EDX(ϵ)是ϵ处的精确敏感性,如果所有随机变量的支持是C的子集,则limN→∞ ˆEDN,CX (ϵ) = EDX(ϵ)。
综上所述,AquaSense是一个强大的概率程序敏感性分析工具,通过量化推理解决了传统方法的难题,在连续和离散程序上都表现出色,为概率程序的开发和优化提供了有力支持。
5. 实验结果
为了验证AquaSense的性能,我们将其与PSense进行了对比实验,评估了12个概率程序中45个先验参数的敏感性,结果如下表所示:
| 评估指标 | AquaSense | PSense |
| — | — | — |
| 可计算参数数量 | 45 | 11 |
| 离散参数结果准确性 | 精确 | 精确 |
| 离散参数性能 | 相当 | - |
| 连续参数平均加速比 | 18.10× | - |
| 91%连续参数误差在5%内的计算时间 | 平均5.89s,最长40s | - |
从表中可以看出,AquaSense在计算参数敏感性方面具有明显优势:
-
参数计算范围
:AquaSense能够计算所有45个参数的敏感性,而PSense只能计算11个。这表明AquaSense可以处理更广泛的概率程序。
-
离散参数表现
:在11个离散参数上,AquaSense和PSense都能产生精确结果,且性能相当。
-
连续参数性能
:在34个连续参数上,AquaSense平均比PSense快18.10倍。在31(91%)个连续参数上,AquaSense能在40秒内产生相对误差在5%以内的结果,平均用时5.89秒。
此外,AquaSense的时间 - 准确性权衡是合理的。用户可以根据实际需求调整ϵ样本的数量和AQUA中使用的量化分割数量,以在计算时间和结果准确性之间找到平衡。
6. 优势总结
AquaSense作为一种创新的概率程序敏感性分析工具,具有以下显著优势:
1.
广泛的适用性
:支持多种前端语言,能够分析现有工具难以处理的模型,适用于各种现实世界的概率程序。
2.
高效的量化推理
:采用量化推理方法,解决了传统精确推理中积分难处理的问题,大大扩展了可解决的概率程序范围。
3.
精确的分析结果
:在连续程序上保证了结果敏感性的逐点收敛,在离散程序上能产生精确结果,误差小。
4.
合理的时间 - 准确性权衡
:用户可以通过调整参数控制分析的时间和准确性,满足不同场景的需求。
5.
多指标支持
:支持多种敏感性度量标准,如期望距离、总变差距离、柯尔莫哥洛夫 - 斯米尔诺夫距离等,还允许用户自定义指标。
7. 应用场景
AquaSense在概率程序开发的多个阶段都有重要应用:
1.
模型开发阶段
:在选择先验参数时,AquaSense可以帮助开发者评估不同先验对后验分布的影响,从而选择更合适的先验,提高模型的准确性和稳定性。
2.
模型优化阶段
:通过敏感性分析,识别出对结果影响较大的参数,有针对性地进行调整和优化,提高模型的性能。
3.
不确定性评估
:量化先验参数的不确定性对后验分布的影响,帮助开发者更好地理解模型的可靠性和稳定性。
8. 使用建议
为了充分发挥AquaSense的优势,在使用时可以参考以下建议:
1.
合理设置参数
:根据实际需求和计算资源,合理设置ϵ样本的数量和AQUA中使用的量化分割数量,以平衡计算时间和结果准确性。
2.
选择合适的度量标准
:根据具体问题和应用场景,选择合适的敏感性度量标准,如期望距离、总变差距离等。
3.
结合其他工具
:可以将AquaSense与其他概率编程工具结合使用,充分发挥各自的优势,提高开发效率和模型质量。
9. 总结
AquaSense是一款具有创新性和实用性的概率程序敏感性分析工具。它通过量化推理解决了传统方法在处理复杂概率程序时的难题,在连续和离散程序上都表现出色。实验结果表明,AquaSense在计算参数敏感性方面具有明显优势,能够为概率程序的开发和优化提供有力支持。未来,随着概率编程的不断发展,AquaSense有望在更多领域得到应用,为概率模型的设计和分析带来新的思路和方法。
通过本文的介绍,相信读者对AquaSense有了更深入的了解,希望它能在你的概率程序开发中发挥重要作用。如果你对AquaSense感兴趣,可以访问其源代码和工件的链接https://github.com/uiuc-arc/aquasense获取更多信息。
超级会员免费看

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



