量子アルゴリズムが速くする問題は限られる
量子アルゴリズムは、重ね合わせと干渉を使って、特定の問題を解く手順です。速くなるのは一部の問題だけで、ふつうのプログラムがすべて速くなるわけではありません。
このレッスンでは、探索を速くする仕組みと、速くならないもの、そしてシミュレータの限界を学びます。
このレッスンのゴール
メモ
量子アルゴリズムが速くする問題と、速くしない問題を説明できる。
キーワード
| ことば | いみ |
|---|---|
| 量子アルゴリズム | 量子ビットの性質を使って問題を解く手順 |
| 振幅増幅 | 正解の振幅を大きくし、他を小さくする方法 |
| 素因数分解 | 大きな整数を、素数のかけ算に分けること |
| ノイズ | 量子ビットの状態を乱す、外からの揺れ |
| 誤り訂正 | 多くの量子ビットで、1つの確かな量子ビットを守ること |
学生が入力するセルは、このプレビューでは空白です。
振幅増幅は正解の振幅を大きくする
4つの項目から、1つの正解を探すとします。まず、4つすべてに同じ振幅 0.5 を与えます。確率は、どれも0.25です。
次に、正解の振幅の符号を逆にします。そして、すべての振幅を平均で折り返します。1回の手順で、正解の振幅が1になります。これを振幅増幅と呼びます。
例: 4つの項目で正解は3番
| 段階 | 0番 | 1番 | 2番 | 3番 |
|---|---|---|---|---|
| 始め | 0.5 | 0.5 | 0.5 | 0.5 |
| 正解の符号を逆にする | 0.5 | 0.5 | 0.5 | -0.5 |
| 平均(0.25)で折り返す | 0 | 0 | 0 | 1 |
| 確率 | 0 | 0 | 0 | 1 |
学生が入力するセルは、このプレビューでは空白です。
増幅を手で1ステップ
# 4つの項目で、番号3に印を付けて、1ステップ増幅します。
state = [0.5, 0.5, 0.5, 0.5]
marked = 3
state[marked] = -state[marked]
mean = sum(state) / len(state)
for n in range(len(state)):
state[n] = 2 * mean - state[n]
print(state)
# marked を 1 に変えて、もう一度実行してください。
# 大きくなる項目は、どれに動きますか。
ラボは4つの項目で1ステップ試す
ラボの amplify.py は、4つの項目の3番に印を付け、1ステップの増幅を行います。印を付ける所は、プログラムに教えています。
表示される言葉は英語です。chance of each は、それぞれの確率という意味です。after one amplification step は、1ステップの後です。
1ステップの増幅を試す
docker exec jupyter python3 steps/amplify.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
探索は項目の数の平方根ほどに減る
N個の項目から探すとき、ふつうの方法は最悪でN回調べます。振幅増幅は、Nの平方根に比例する回数で済みます。
速くなりますが、魔法ではありません。100万個でも、約800ステップが必要です。
例: 項目の数と回数の目安
| 項目の数 | ふつうの探索(最悪) | 振幅増幅(約) |
|---|---|---|
| 4 | 4回 | 1回 |
| 100 | 100回 | 8回 |
| 10,000 | 10,000回 | 79回 |
| 1,000,000 | 1,000,000回 | 785回 |
学生が入力するセルは、このプレビューでは空白です。
素因数分解は暗号に関わる
大きな整数の素因数分解を、今知られているふつうの方法より、桁違いに速くやる量子アルゴリズムがあります。今の暗号の一部は、素因数分解が難しいことに頼っています。
ただし、必要なのは、大きく誤りの少ない機械です。今の機械は、まだそこに届いていません。
シミュレータは速さを見せられない
ラボのシミュレータは、すべての振幅を記憶して計算します。量子ビットが1つ増えると、振幅の数が2倍になり、作業も2倍になります。
だから、ふつうのパソコンでは、量子コンピュータの速さの利点は見せられません。見せられるのは、規則です。
例: 量子ビットの数と振幅の数
| 量子ビット | 振幅の数 | 記憶の目安 |
|---|---|---|
| 10 | 1,024 | 約16キロバイト |
| 20 | 1,048,576 | 約17メガバイト |
| 30 | 1,073,741,824 | 約17ギガバイト |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
量子コンピュータは、どんなプログラムも速くすると考えがちです。速くなるのは、探索や素因数分解のような、一部の問題だけです。表計算や画面の描画には、速くなる理由がありません。
ノイズが計算をこわす
本物の量子ビットは、とても繊細です。熱や電波のノイズで、振幅が少しずつ乱れ、干渉がうまくいかなくなります。
この乱れを直すのが誤り訂正です。1つの確かな量子ビットを守るために、たくさんの量子ビットを使います。
さらに挑戦: 増幅しすぎる
4つの項目で、増幅を2回続けると、どうなるでしょう。amplify.py の手順を、紙で2回目まで追います。
正解の確率は、1回目より上がるでしょうか。下がるなら、なぜ回数を数える必要があるかを、一文で書きましょう。