メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

反復回数の選び方

グローバーのアルゴリズムにおいて、初期化ステップを実行した後、レジスタ Q\mathsf{Q} の状態ベクトルは ∣A0⟩\vert A_0\rangle と ∣A1⟩\vert A_1\rangle が張る2次元部分空間の中に留まり続けることを確認しました。

目標は A1A_1 の要素 x∈A1x\in A_1 を見つけることであり、状態 ∣A1⟩\vert A_1\rangle を得ることができれば目標を達成できます。この状態を測定すると、必ず x∈A1x\in A_1 という測定結果が得られるからです。 ステップ2で tt 回反復した後の Q\mathsf{Q} の状態が

Gt∣u⟩=cos⁡((2t+1)θ)∣A0⟩+sin⁡((2t+1)θ)∣A1⟩,G^t \vert u \rangle = \cos\bigl((2t + 1)\theta\bigr) \vert A_0\rangle + \sin\bigl((2t + 1)\theta\bigr) \vert A_1\rangle,

であることを踏まえると、x∈A1x\in A_1 を測定で得る確率を最大化するために、

⟨A1∣Gt∣u⟩=sin⁡((2t+1)θ)\langle A_1 \vert G^t \vert u \rangle = \sin((2t + 1)\theta)

が絶対値として 11 にできるだけ近くなるように tt を選ぶべきです。 θ∈(0,2π)\theta \in (0,2\pi) の任意の角度に対して、tt が増加するにつれて sin⁡((2t+1)θ)\sin((2t + 1)\theta) は 振動 しますが、必ずしも周期的ではありません。同じ値が2回以上得られる保証はありません。

当然、測定から x∈A1x\in A_1 の要素が得られる確率を大きくすることに加え、操作 GG を tt 回適用すると関数 ff への tt 回のクエリが必要になるため、tt をできるだけ小さく選びたいところです。 sin⁡((2t+1)θ)\sin( (2t + 1) \theta) を絶対値として 11 に近づけることを目指しているので、自然な方法は

(2t+1)θ≈π2.(2t + 1) \theta \approx \frac{\pi}{2}.

となるように tt を選ぶことです。

t≈π4θ−12.t \approx \frac{\pi}{4\theta} - \frac{1}{2}.

もちろん、ttは整数でなければならないので、この値をちょうど得ることができるとは限りません——しかし、私たちができることは、この値に最も近い整数を取ることであり、それは

t=⌊π4θ⌋.t = \Bigl\lfloor \frac{\pi}{4\theta} \Bigr\rfloor.

これがグローバーのアルゴリズムにおける推奨反復回数です。 分析を進めていく中で、この整数が目標値にどれだけ近いかが、当然ながらアルゴリズムの性能に影響することが分かります。

(余談ですが、目標値π/(4θ)−1/2\pi/(4\theta) - 1/2がちょうど2つの整数の中間にある場合、このttの式は切り上げによって得られる値です。切り下げても構いません。その方がクエリが1回少なくなるため理にかなっていますが、これは本レッスンにとっては副次的で重要ではありません。)

角度θ\thetaの値が次の式で与えられることを思い出すと

θ=sin⁡−1(∣A1∣N),\theta = \sin^{-1}\biggl(\sqrt{\frac{\vert A_1\vert}{N}}\biggr),

推奨される反復回数 tt は A1A_1 に含まれる文字列の数に依存することが分かります。 後で説明するように、解の数がわからない場合、これは課題となります。

まず、f(x)=1f(x)=1となる文字列xxがただ1つだけ存在する状況に注目しましょう。 これは、一意探索問題のインスタンスを考えているとも言えます。 この場合、次のようになります。

θ=sin⁡−1(1N),\theta = \sin^{-1}\biggl( \sqrt{\frac{1}{N}} \biggr),

これは次のように便利に近似できます。

θ=sin⁡−1(1N)≈1N\theta = \sin^{-1}\biggl( \sqrt{\frac{1}{N}} \biggr) \approx \sqrt{\frac{1}{N}}

NNが大きくなるときです。 θ=1/N\theta = 1/\sqrt{N}を次の式に代入すると

t=⌊π4θ⌋t = \Bigl\lfloor \frac{\pi}{4\theta} \Bigr\rfloor

次の結果が得られます。

t=⌊π4N⌋.t = \Bigl\lfloor \frac{\pi}{4}\sqrt{N} \Bigr\rfloor.

tt は操作 GG を実行する回数であるだけでなく、アルゴリズムが必要とする関数 ff へのクエリ回数でもあることを思い出すと、O(N)O(\sqrt{N}) 回のクエリを必要とするアルゴリズムを得る方向に進んでいることがわかります。

次に、推奨される tt の選択がどれほどうまく機能するかを調べます。 最終的な測定が唯一の解を返す確率は次のように明示的に表せます。

p(N,1)=sin⁡2((2t+1)θ).p(N,1) = \sin^2 \bigl( (2t + 1) \theta \bigr).

第1引数の NN は探索対象の要素数を、第2引数の 11 は解の数を表します。 少し後で、解が複数ある場合により一般的に同じ記法を使います。

以下は N=2nN = 2^n の値を増やしたときの成功確率の表です。

Np(N,1)20.500000000041.000000000080.9453125000160.9613189697320.9991823155640.99658568081280.99561986572560.99994704215120.999448026210240.999461244720480.999996847840960.999945346181920.9999157752163840.9999997811327680.9999868295655360.9999882596\begin{array}{ll} N & p(N,1)\\ \hline 2 & 0.5000000000\\ 4 & 1.0000000000\\ 8 & 0.9453125000\\ 16 & 0.9613189697\\ 32 & 0.9991823155\\ 64 & 0.9965856808\\ 128 & 0.9956198657\\ 256 & 0.9999470421\\ 512 & 0.9994480262\\ 1024 & 0.9994612447\\ 2048 & 0.9999968478\\ 4096 & 0.9999453461\\ 8192 & 0.9999157752\\ 16384 & 0.9999997811\\ 32768 & 0.9999868295\\ 65536 & 0.9999882596 \end{array}

これらの確率は単調増加ではないことに注意してください。 特に N=4N=4 のとき、確実に解が得られるという興味深い異常があります。 しかし一般的に、すべての NN に対して

p(N,1)≥1−1Np(N,1) \geq 1 - \frac{1}{N}

が証明できるので、上の値が示唆するように、NN が大きくなる極限で成功確率は 11 に近づきます。 これは良い結果です!

ただし、p(N,1)≥1/2p(N,1) \geq 1/2 という弱い下界であっても、グローバーのアルゴリズムの有用性を示すのに十分です。 この手順を実行して得られた測定結果 xx が何であれ、ff への1回のクエリで f(x)=1f(x) = 1 かどうか常に確認できます。 この手順を1回実行した場合、f(x)=1f(x) = 1 となる唯一の文字列 xx を得るのに失敗する確率が高々 1/21/2 であるとすると、この手順を mm 回独立に実行した後に唯一の文字列 xx を得るのに失敗する確率は高々 2−m2^{-m} となります。 すなわち、ff への O(mN)O(m \sqrt{N}) 回のクエリを使うことで、少なくとも 1−2−m1 - 2^{-m} の確率で唯一の解 xx が得られます。 より良い下界 p(N,1)≥1−1/Np(N,1) \geq 1 - 1/N を使うと、この方法で x∈A1x\in A_1 を見つける確率は実際には少なくとも 1−N−m1 - N^{-m} であることがわかります。

複数の解​

A1A_1 の要素数が変わると角度 θ\theta も変わり、アルゴリズムの成功確率に大きな影響を与えることがあります。 簡潔さのために、解の数を s=∣A1∣s = \vert A_1 \vert と書き、前と同様に s≥1s\geq 1 と仮定します。

動機付けの例として、上で考えた唯一解ではなく s=4s = 4 個の解がある場合を想像してみましょう。 この場合、

θ=sin⁡−1(4N),\theta = \sin^{-1}\biggl( \sqrt{\frac{4}{N}} \biggr),

であり、NN が大きいとき ∣A1∣=1\vert A_1 \vert = 1 の場合のほぼ2倍の角度になります。 何も知らないと仮定して、唯一解の場合と同じ tt の値を選んだとします。

t=⌊π4sin⁡−1(1/N)⌋.t = \Biggl\lfloor \frac{\pi}{4\sin^{-1}\bigl(1/\sqrt{N}\bigr)}\Biggr\rfloor.

次の確率の表が示すように、その結果は壊滅的なものになります。

N成功確率41.000000000080.5000000000160.2500000000320.0122070313640.02038076891280.01445307582560.00007050585120.001931074110240.002300908320480.000007750640960.000230150281920.0003439882163840.0000007053327680.0000533810655360.0000472907\begin{array}{ll} N & \text{成功確率}\\ \hline 4 & 1.0000000000\\ 8 & 0.5000000000\\ 16 & 0.2500000000\\ 32 & 0.0122070313\\ 64 & 0.0203807689\\ 128 & 0.0144530758\\ 256 & 0.0000705058\\ 512 & 0.0019310741\\ 1024 & 0.0023009083\\ 2048 & 0.0000077506\\ 4096 & 0.0002301502\\ 8192 & 0.0003439882\\ 16384 & 0.0000007053\\ 32768 & 0.0000533810\\ 65536 & 0.0000472907 \end{array}

今度は NN が無限大になると成功確率が 00 に近づきます。 これは、唯一解のときの2倍の速さで回転しているため、目標の ∣A1⟩\vert A_1\rangle を通り過ぎて −∣A0⟩-\vert A_0\rangle の近くに到達してしまうからです。

しかし、代わりに推奨される tt の選択、すなわち

t=⌊π4θ⌋t = \Bigl\lfloor \frac{\pi}{4\theta}\Bigr\rfloor

を

θ=sin⁡−1(sN),\theta = \sin^{-1}\biggl( \sqrt{\frac{s}{N}} \biggr),

に対して使うと、性能は改善されます。 より正確には、この tt の選択により高い確率で成功します。

Np(N,4)41.000000000080.5000000000161.0000000000320.9453125000640.96131896971280.99918231552560.99658568085120.995619865710240.999947042120480.999448026240960.999461244781920.9999968478163840.9999453461327680.9999157752655360.9999997811\begin{array}{ll} N & p(N,4)\\ \hline 4 & 1.0000000000\\ 8 & 0.5000000000\\ 16 & 1.0000000000\\ 32 & 0.9453125000\\ 64 & 0.9613189697\\ 128 & 0.9991823155\\ 256 & 0.9965856808\\ 512 & 0.9956198657\\ 1024 & 0.9999470421\\ 2048 & 0.9994480262\\ 4096 & 0.9994612447\\ 8192 & 0.9999968478\\ 16384 & 0.9999453461\\ 32768 & 0.9999157752\\ 65536 & 0.9999997811 \end{array}

先ほどの主張を一般化すると、次の不等式

p(N,s)≥1−sN,p(N,s) \geq 1 - \frac{s}{N},

が証明できます。ここで先ほど示した記法を使っています。p(N,s)p(N,s) は、NN 通りの可能性のうち合計 ss 個の解がある場合に、tt 回反復したグローバーのアルゴリズムを実行して解を得る確率を表します。

成功確率の下界 1−s/N1 - s/N はやや奇妙に見えます。解が多いほど下界が悪くなるからです。しかし ss が NN に比べて十分小さいという仮定のもとでは、成功確率は十分高いと結論づけることができます。 前と同様に、p(N,s)p(N,s) が十分大きいという事実だけでアルゴリズムの有用性が示されます。

また、次のことも成り立ちます。

p(N,s)≥sN.p(N,s) \geq \frac{s}{N}.

この下界は、Σn\Sigma^n から一様ランダムに選ばれた文字列 xx が解である確率を表しています。したがってグローバーのアルゴリズムは常にランダムな推測と同等以上の性能を持ちます。 (実際、t=0t=0 のとき、グローバーのアルゴリズムはランダムな推測そのものです。)

次に、反復回数(したがってクエリ回数)

t=⌊π4θ⌋,t = \Bigl\lfloor \frac{\pi}{4\theta}\Bigr\rfloor,

を

θ=sin⁡−1(sN).\theta = \sin^{-1}\biggl(\sqrt{\frac{s}{N}}\biggr).

すべてのα∈[0,1]\alpha \in [0,1]について、sin⁡−1(α)≥α\sin^{-1}(\alpha)\geq \alphaが成り立つので

θ=sin⁡−1(sN)≥sN.\theta = \sin^{-1}\left(\sqrt{\frac{s}{N}}\right) \geq \sqrt{\frac{s}{N}}.

これは次を意味します。

t≤π4θ≤π4Ns.t \leq \frac{\pi}{4\theta} \leq \frac{\pi}{4}\sqrt{\frac{N}{s}}.

これは、ssが大きくなるにつれてクエリ数の節約につながります。 特に、必要なクエリ数は

O(Ns).O\biggl(\sqrt{\frac{N}{s}}\biggr).

解の数が不明な場合​

解の数 s=∣A1∣s = \vert A_1 \vert が未知である場合は、tt の選択を ss の情報に基づいて行うことができないため、別のアプローチが必要です。 実際、複数のアプローチがあります。

一つの簡単なアプローチは、

t∈{1,…,⌊πN/4⌋}t \in \Bigl\{ 1,\ldots,\bigl\lfloor\pi\sqrt{N}/4\bigr\rfloor \Bigr\}

から一様ランダムに選ぶことです。 このように tt を選ぶと、解が存在すると仮定して常に40%以上の確率で解を見つけることができますが、これは自明ではなく、ここでは含めない分析が必要です。 しかしこれは直感的に理解できます。特に幾何学的な描像を考えると、このようにランダムな回数だけ Q\mathsf{Q} の状態を回転させることは、∣A0⟩\vert A_0\rangle と ∣A1⟩\vert A_1\rangle が張る空間でランダムな単位ベクトルを選ぶことに似ており、∣A1⟩\vert A_1\rangle の係数が十分大きい確率が高いです。 前述と同様の方法で結果を確認しながらこの手順を繰り返すことで、解を見つける確率を 11 に非常に近づけることができます。

解が存在する場合に解の数 ss が未知であっても O(N/s)O(\sqrt{N/s}) 回のクエリで解を見つけ、s=0s=0 のとき解が存在しないことを判定するのに O(N)O(\sqrt{N}) 回のクエリを要する、より洗練された方法があります。

基本的なアイデアは、TT の値を増加させながら、集合 {1,…,T}\{1,\ldots,T\} から tt を一様ランダムに選ぶことを繰り返し行うことです。 特に、T=1T = 1 から始めて指数的に増加させ、解が見つかった時点で終了し、解がない場合に無駄なクエリを避けるために TT に上限を設けます。 解が多いほどより少ないクエリで済むという事実をこの手順は利用しています。 ただし、TT の増加率と各反復における成功確率のバランスに注意が必要です。 (例えば T←⌈54T⌉T \leftarrow \lceil \frac{5}{4}T\rceil とすることが有効であることが分析によって示されています。一方、TT を2倍にすることは有効ではありません。これは増加が速すぎるためです。)

自明なケース​

ここまでの分析を通じて、解の数が0でないことを仮定してきました。 実際、ベクトル

∣A0⟩=1∣A0∣∑x∈A0∣x⟩∣A1⟩=1∣A1∣∑x∈A1∣x⟩\begin{aligned} \vert A_0\rangle &= \frac{1}{\sqrt{\vert A_0\vert}} \sum_{x\in A_0} \vert x\rangle \\ \vert A_1\rangle &= \frac{1}{\sqrt{\vert A_1\vert}} \sum_{x\in A_1} \vert x\rangle \end{aligned}

を参照することで、A0A_0 と A1A_1 がどちらも空でないことを暗黙的に仮定していました。 ここでは、これらの集合のいずれかが空の場合に何が起こるかを簡単に考えます。

分析に入る前に、明らかなことを観察しておきましょう。 Σn\Sigma^n のすべての文字列 xx が解であれば、測定したときに必ず解が得られます。解が1つも存在しない場合は、解が得られることはありません。 ある意味ではこれ以上深く考える必要はありません。

しかし、これらの些細なケースについての数学を素早く検証することができます。 A0A_0とA1A_1のどちらかが空になる状況は、ffが定数であるときに起こります。 すべてのx∈Σnx\in\Sigma^nについてf(x)=0f(x) = 0のときA1A_1は空であり、すべてのx∈Σnx\in\Sigma^nについてf(x)=1f(x) = 1のときA0A_0は空です。 これは次のことを意味します。

Zf∣u⟩=±∣u⟩,Z_f \vert u\rangle = \pm \vert u\rangle,

が成り立ち、したがって

G∣u⟩=(2∣u⟩⟨u∣−I)Zf∣u⟩=±(2∣u⟩⟨u∣−I)∣u⟩=±∣u⟩.\begin{aligned} G \vert u \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) Z_f\vert u\rangle \\ & = \pm \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) \vert u\rangle \\ & = \pm \vert u\rangle. \end{aligned}

したがって、これらのケースでは反復回数 tt によらず、測定は常に Σn\Sigma^n から一様ランダムな文字列 xx を返します。