概率程序的数据驱动不变量学习
在概率程序的研究中,学习不变量和子不变量是重要的任务。下面将详细介绍相关的方法和实验结果。
1. 特征生成(getFeatures)
给定一个程序,该算法首先生成一组特征 F,用于模型树表达给定循环的未知不变量。例如对于程序 geo,不变量 $I = [x \neq 0] \cdot n + [x = 0] \cdot (n + \frac{1}{p})$,为了让模型树表达该不变量,特征集 F 应包含 n 和 $\frac{1}{p}$ 或者 $n + \frac{1}{p}$。特征集 F 至少应包含程序变量,但通常包含更复杂的特征会更有用。不过,生成更多特征虽然能增加模型的表达能力和不变量的丰富度,但需要更多的数据来训练模型。
从程序变量开始,getFeatures 会生成两个特征列表:线性叶模型的特征列表 $F_l$ 和乘法叶模型的特征列表 $F_m$。直观上,若特征集 F 包含一些项的乘积,线性模型的表达能力更强;若 F 包含一些项的和,乘法模型的表达能力更强。
操作步骤:
1. 确定程序变量。
2. 基于程序变量生成线性叶模型特征列表 $F_l$ 和乘法叶模型特征列表 $F_m$。
2. 初始状态采样(sampleStates)
Exist 的目标是学习一个期望 I,使其等于最弱前置期望 $wpe(while G : P, postE)$。一个自然的想法是从所有可能的初始化多次运行程序,并记录每个初始化下 postE 的平均值。但很多程序有无限多个可能的初始状态,因此 sampleStates 需要选择可管理数量的初始状态供 sampleTraces 使用。
超级会员免费看
订阅专栏 解锁全文
16

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



