【量子画像処理】実機の精度を上げたくて

# はじめに
こんにちは、ユーゴです。今回は、[量子コンピュータで画像処理してみた](https://qiita.com/mu5dvlp/items/9b8b40a078a967f30776)の続編となります。本記事が初めての方は、ぜひ前回の記事もご覧ください。

恒例ですが、趣味で量子コンピュータの資格を取りました。
[Quantum Computation using Qiskit v0.2X 合格証](https://www.credly.com/badges/fd36a671-c554-425f-a49b-08a591689954/public_url)

# 背景
「[量子コンピュータで画像処理してみた](https://qiita.com/mu5dvlp/items/9b8b40a078a967f30776)」にて、実機の精度が悪すぎることが発覚しました。

**入力**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/8f6a5b97-177c-6d6b-14ab-8fa36f848765.jpeg" width="200">

**出力** (**シミュレータ**)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/5165664d-84b4-6501-f67f-85cab310e552.png" width="200">

**出力** (**実機**)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/d2432fc2-1eaf-464f-8b0e-c9757995929d.png" width="200">

1万歩譲って、上半分がちょっと白く、下半分がちょっと黒いか...？という感じです。

# 結論
今回の検証で得られた結果は以下の通り。
- ショット数の増加 → 精度の向上
- 量子状態が規則的にズレる → 致命的

# 本題
## 仮説
「[量子コンピュータで画像処理してみた](https://qiita.com/mu5dvlp/items/9b8b40a078a967f30776)」の最後にも述べましたが、**回路のdepthによるデコヒーレンス**が原因ではないかと考えました。

![q_img_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/38cee14a-8885-e70b-eb06-5666165d80c2.png)


## 方法論
今回は、量子画像処理にて実機の精度を上げるという挑戦をしました。最初に方法を考え直す必要がありました。
パッと思い浮かんだものは、以下の通りです。

### (不採用) エラー訂正を行う
そもそもデコヒーレンスが原因という仮説があるので、エラー訂正にdepthを割くのは本末転倒では...？
(自分が知らないだけで、デコヒーレンスのエラー訂正があるのかもしれない)

### (不採用) 回路のdepthを浅くする
initializeメソッドで、内部的に量子状態を初期化している。そのため、自力でどうにかするのは難しい。

また、量子の物理的な接続なども考慮した上で、initializeメソッドを自力で実装するのも難しい。transpileしたとき逆に悪化する可能性がある。

### (採用) shot数を増やす
shot数を増やせば、デコヒーレンスを起こさなかった測定が増えるのではないか。

## 検証
ibm_osaka(実機の1つ)のshot数は、20,000まで増やせるみたいです。

![imgImprove_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/e2420234-1776-1de7-b0f1-ea0bb976dc91.png)

### シミュレータ
まずはシミュレータでやってみます。シミュレータで向上するのでしょうか？

ショット数:4096
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/79c19b9b-dd51-ae4c-5c8a-dcbbe98a938a.png" width="150">

ショット数：20000
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/1affc65e-ea40-3f50-3947-80347fda7cf0.png" width="150">

ごま塩ノイズが明らかに減りました！これは期待できます！

### 実機

さて、シミュレータで期待値も上がったところで、実機を試してみます！

ショット数：4096
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/d2432fc2-1eaf-464f-8b0e-c9757995929d.png" width="150">

ショット数：20000
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/974edcdb-06d1-7194-b073-2c10a4b7224e.png" width="150">

おお！！
...ん？
...？？

もう一度試してみます。

ショット数：20000 (2回目)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/38a332a1-efad-8b1d-8aa4-b529c57c4dd1.png" width="150">

今度は違う規則で入れ替わりました。

## 分析
実機で出力した画像を分析します。

<div>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/974edcdb-06d1-7194-b073-2c10a4b7224e.png" width="150">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/38a332a1-efad-8b1d-8aa4-b529c57c4dd1.png" width="150">
</div>

画像から、以下のことが確認できます。
- 入力の4階調は保持される
- 模様の崩壊

# 考察
入力の4階調が保持されていることから、shot数の増加が精度の向上につながるとわかりました。おそらく、デコヒーレンスを起こさずに測定まで辿り着く可能性が増えたからだと思います。

模様の崩壊から、量子ビットが何かしらの規則に従って対応関係の入れ替わりを引き起こしていそうです。綺麗に模様が変わっているので、数式で示せる範囲の規則的な入れ替わりが起きていそうです。
あくまで仮説ですが、量子の物理的な接続の形状が原因だと考えています。他の量子を経由することで、直接繋がっていない量子同士を相互に作用させることができます。

![q_map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/2e5fb34d-6489-17a3-8e1e-e6caeddedfd1.png)
出典：[IBM Quantum Platform](https://quantum.ibm.com/services/resources?system=ibm_osaka)

このマップが規則的なズレに関係しているのではないかと考えています。仮説では、各量子ビットと接続のエラー率からtranspileが毎回異なっており、その上でデコヒーレンスなど何かしらのエラーが起きているのではないかと考えています。今回は、実行ごとにその規則が変わる原因は特定できませんでした。


# まとめ
今回は、量子コンピュータの実機の精度を上げるための検証を行いました。仮説として回路のdepthが深すぎるため、デコヒーレンスを起こしているのではないかと考えました。その対策として、shot数を増やすことで、デコヒーレンスを起こさない測定を増やすという方法を取りました。
結果、4階調は保持されますが、量子ビットの対応が入れ替わりました。このことから、depthが深くてもshot数を増やすことで測定の精度を上げられるが、量子ビットの対応関係が入れ替わると分かりました。
今後は、毎回違う規則で入れ替わる量子ビットを、どのように復元するかが課題となります。

[追記: 2024/10/15]
関連記事で、量子画像にブラーをかける実装を試したものがあります！ぜひご覧ください〜
『[【量子画像処理】回転ブラーの実装](https://qiita.com/mu5dvlp/items/5686302c55349bd67773)』

# おわりに
いかがだったでしょうか。今回は、実機での量子画像処理の精度を上げたくて、shot数を増やして検証しました。最近論文ばかり読んでいるせいか、記事の構成がやや論文っぽくなっている気がします。(ぽいだけ)

このように、量子コンピューティングに関するテーマから、Unity, AWS, GASなど、様々なトピックについて扱っております。お役に立てましたら、いいね, フォローなどよろしくお願いします！

それと、量子コンピュータを扱うバイトがあれば募集中です！