コンテキスト・ミキシング
複数のモデルが予測する確率の集合 Pi(1) = n1i / ni が与えられたとする。ここで、ni = n0i + n1i で、 n0i と n1i はそれぞれ i 番目のモデルが当該コンテキスト下で、すでに観測した 0 のビット・1 のビットの数である。このとき、これらの線形ミキシングは、0 と 1 の数の重み付き和によって計算される。
S0 = Σi wi n0i
S1 = Σi wi n1i
S = S0 + S1
P(0) = S0 / S
P(1) = S1 / S
重み wi は合計すると 1 になるようになっており、初期値としてはすべてが等しくなるように与えられる。データを読み込んでいくと、それぞれのモデルの実績に比例した重みがつけられるようになっているが、入力データを1ビット読み込むたびにより正確なモデルを重視するように調整される。仮に、モデルによるビットが 1 である確率の推定値 P(1) に対して、実際に読み込んだビットの値が y (0 または 1) であったとしたら、重みの調整は以下のように行われる。
ni = n0i + n1i
error = y − P(1)
wi ← wi + [(S n1i − S1 ni) / (S0 S1)] error
ni に上限・下限を設けることで、この重み付けのバランスがよくなり、圧縮の性能が改善され得る。 PAQ6では、あるビットのカウントが 1 加算されたとき, ほかのビットのカウントは 2 以上あるとき半減される。例えば、シーケンス 000000001 を読み込むと、カウントは (n0,n1) = (8, 0) の状態から、(5, 1) へと変化する。