Importance Sampling(重点サンプリング)
サンプリングをするとき、一様にではなく重み付きでサンプリングするときにどのように評価すればよいのか。
使い道の1つとしてDNF(ORとANDで構成される論理式)の解の個数の推定のアルゴリズムがある。
DNF=選言標準形の定義
まず、変数がである。
そして、関数全体を
- 節はのようにする。このようにANDでつなげる。
- 節全体をORつまりでつなげる。
充足可能性の判定自体は線形時間でできるが、解が何個存在するのか?
#P困難である。
なお、節の中身がORで、節全体をつなげるのがANDの場合はCNF=連言標準形であり、それの充足可能性はSATである。
FPRAS(Fully Polynomial-time Randomized Approximation Scheme)
解の個数をとする。このとき、多項式関数が存在し、
の時間で動作し、その出力は高確率(1/2より高ければよい)での近似である。
ここでを出したのはDNFの解の個数の推定をやりたいから。
KL.KLMのアルゴリズム
のアルゴリズムである。
- は番目の節を充足する解の集合
- 推定したいのはである。ORなのでいずれかのに入れば解である。
- 。はのリテラルの個数。
- 全体で個の変数がある中で、番目の節を充足するのは、節の中のの変数からなる1通りの配置だけ。その節の外はどうなろうが問題ないので、任意に配置していい。
- は単純に加算すればいいので簡単である。
ここで、を推定することを考える。
https://users.soe.ucsc.edu/~sesh/Teaching/2020/CSE290A/Slides/Lecture4.pdf
for j in [1, t]:
節iを確率|Si|/Bで選ぶ。(ここで重点サンプリング)
節iを充足する解xを選ぶ。(節に含まれない変数は一様にランダムに決める)
あるkがあって、k < iでxが節kをみたすのならばX_j=0
それ以外ならばX_j=1
(sum(X, [1, t]))/tがA/Bの推定値節以外の以前の節に対して、ランダムにとってきた割り当てが何かしらの節の解であるなら0になり、1は他の解ではないということ。今の節を満たす解だが、以前のどの他の節の解ではないのならば、排他的で集合として純粋に足してよいといういい性質があり、それの和をAとして近似する。
推定値にを乗じると、Aの推定値になる。
高い確率でがの近似であるの証明
ここでの高い確率はであるとする。
集合はを元としてとり、解は節を充足することが集合に入る条件。よって下式が成り立つ。
お気持ちとしては、を充足する節の中で、indexが最小のものに割り当てる(お互い排他的になれないなら一番小さいindexに割り当てる)=「良い割り当て」。のうちのがが何個その割り当てに対応しているか?それがの割合となるといいね。
証明は以下の通り。
をまず固定する。この時、「がサンプリングされる確率」は、ベイズの定理から「がサンプリングされる確率」と「がサンプリングされる条件で、がサンプリングされる確率」の積である。これはそれぞれとであり、それの積はである。
よって、「からサンプリングしたが良い割り当てである確率」はである。
も成り立つし、。
ここで、となり、であるので、チェルノフ上界を用いると、以下の式が成り立つ。
このように、期待値が逸れる確率が求まった。ここで、は
と下限を評価できる。したがって代入することで、を適切に大きくすることによって確かにで抑えることができる。
計算時間
にとって、1回当たりの走査はが良いか調べるのにかかるので普通にやるとである。
各についての極端なケースを考える。
- が互いに素であるならば、である。この時下界はではなく1なので、1つを落とせる。
- 良いかどうかを調べるのには、お互い互いに素なので重ならず、かかる。
- が互いにほぼ重なっているのならば、であるので、は落ちない。
- 良い稼働かを調べるとき、お互いほぼ重複しているので、実質はで済ませられる。
1と2のいいところどりをすれば、である。
改良版
それを実現するには以下のようなアルゴリズムである。
for j in [1, O(m / epsilon^2)]
(x, i)を同様にサンプルし、l = 0とする。
while True:
節kを一様にサンプル。
l++
if xが節kを充足
break
l / mを記録。
記録したl / mの平均をAとして扱う。オリジナルでは、他を充足しない解の数を直接数え上げた。
ここでは、節を充足するとわかっている解について、ランダムに節を選びそれに充足するまでランダムに選ぶ。それまでの回数は、先ほどの他を充足しない解の数から計算される割合を代替する。
何故うまく行くのかは以下の証明である。
を解が充足する節の数だとする。この時、「でサンプリングしたが節に対して1回でbreakする確率」はである。これを何回も試行し続けるのは幾何分布であり、結果的に期待値はとなる。
よって、であり、ここからを計算する。これは、についてとなるので、上のアルゴリズムはちゃんと正しい。
