SlideShare a Scribd company logo
Qiskitとは
● 量子コンピュータのシミュレーション言語
○ 古典コンピュータ上でシミュレーションする
○ 実機の量子コンピュータはIBMQが使える
● 他の言語とか
○ Google Cirq
○ Blueqat
○ Microsoft Q#
○ 等々
背景(古典 vs 量子)
● なぜ量子が注目されてきたのか?
● 古典コンピュータ(従来コンピュータ)では実時間で解くことが困難な問題が存在
○ 組み合わせ最適化問題(巡回セールスマン問題)
○ (桁数の大きい)素因数分解アルゴリズム(RSA暗号で活用)
● 量子の特性を使えば、古典を凌駕する計算ができるというアイデアは昔から存在
○ アイデアの初出は1985年(※1)
○ 1992年ドイチュ・ジョサのアルゴリズム(初の量子アルゴリズム)
○ 1993年ショアのアルゴリズム(因数分解アルゴリズム)
● 近年、実際に量子コンピュータが使えるようになってきた
○ IBMQ、D-Wave、Amazon Braket
量子コンピュータの種類
● 量子ゲート型
○ 古典の論理ゲート的な発想で扱えるモデル
● 量子アニーリング型
○ イジングモデルと呼ばれる、格子状に配置した量子ビットが磁性的に平衡状態にな
るのを利用したモデル
○ 組み合わせ最適化問題で主に利用
● Qiskitは、量子ゲート型のシミュレーション言語
Qiskitの前に
● 量子コンピュータの前提知識をかんたんに説明
● 今回扱う範囲
○ 量子ビット
○ ブロッホ球
○ 重ね合わせ状態
○ 測定
○ 量子ゲート(H, X, CNOT, Z)
量子ビット
● |0>と|1>
○ 「|>」は「ケット」と読む
○ 「ゼロケット」や「ゼロベクトル」や「ゼロ状態」等と読んだりする(文脈によって読み方が変わるが、どれも同じ意味)
○ 古典ビットにおける、
■ 「0」が「|0>」にあたる
■ 「1」が「|1>」にあたる
● ブロッホ球
○ 1量子ビットの状態を視覚的にわかりやすく把握するための概念
○ 量子ビットの状態は、原点から球の表面上の点へのベクトルで表せれる
■ なので、量子ビットの状態は無限にある
○ z軸に|0>と|1>をとって表現する
■ x軸は|+>と|->
■ y軸は|↺>と|↻> (※)
○ 右図は、|0>状態を表している
量子ビットの状態は確率的に決まる
● 量子ビットの状態は無限にあるが、「測定」によって
最終的には|0>か|1>に決まる
①:100%の確率で|0>になる
②:100%の確率で|1>になる
③と④:50%の確率で|0>になり、
50%の確率で|1>になる
● なので、プログラムして最終的に得られる答えも確率的に決まる
○ 実行するたびに答えが変わる
○ 何度も実行し、統計的に答えを得るのが定石 ③ |+>状態
① |0>状態 ② |1>状態
④ |->状態
重ね合わせ状態
● 量子コンピュータは、|0>状態と|1>状態の「重ね合わせ状態」をうまく使うことで、超並列計算ができる
● 3量子ビットの場合|000>, |001>, |010>, |011>, |100>, |101>, |110>, |111>の8パターンあるが、この8パターンを同時に処理
できるイメージ
● ③|+>状態を形式的に表現すると、
○ これは「|0>と|1>の重ね合わせ状態」を表している
○ |0>と|1>にかかる係数を確率振幅と呼び、これを2乗したものが確率になる
■ |0>になる確率:(1/√2)^2 = ½ = 50%
■ |1>になる確率:同様に50%
● |+>状態の量子ビットを「測定」したとき、50%の確率で|0>状態か|1>状態に確定する
○ 「測定」するまで状態は|0>状態か|1>状態かは確定していない
③ |+>状態
測定
● 「測定」とは、量子ビットの状態を確定させること
○ 量子ビットは測定されるまで状態は確定していない
○ 古典コンピュータでは、なにか問題を解くとき、いろいろ計算させたあとに、最後にビット列を得る
○ 量子コンピュータも、量子演算させたあとに、最後に「測定」して量子ビットを確定させ、ビット列を得る
|+>状態
(測定すると50%の確率で|0>か|1>になる)
測定
|0>状態に確定
測定のタイミング
● 古典コンピュータでは、変数の中身はいつ確認してもOK
● 量子コンピュータでは、測定すると量子ビットの状態が確定するので、注意が必要
● 以下の左右の量子回路は、等価ではない
量子ゲート(H)
● Hゲート(アダマールゲート)
○ ブロッホ球の「Z軸とX軸の間の軸」を中心にπ回転
○ |0>状態を|+>状態に、|1>状態を|->状態にする
|0>状態
(初期状態)
|+>状態 |0>状態
(元に戻る)
量子ゲート(X)
● Xゲート(NOTゲート)
○ ブロッホ球のX軸を中心にπ回転
○ 古典論理回路のNOT回路と同等
■ |0>状態を|1>状態にする
■ |1>状態を|0>状態にする
|0>状態
(初期状態)
|1>状態 |0>状態
(元に戻る)
量子ゲート(CNOT)
● CNOTゲート(Controlled-NOTゲート)
○ コントロールビットとターゲットビットの2量子を使う演算
○ コントロールビットが|1>のとき、ターゲットビットにXゲートを作用させる(ターゲットビットを反転)
○ コントロールビットが|0>のとき、何もしない
|0>状態 |1>状態
|0>状態
q0
q1
|1>状態
|1>状態
q0が|1>なので、
q1が反転する
量子ゲート(Z)
● Zゲート
○ ブロッホ球のZ軸を中心にπ回転
○ |1>の振幅を-1倍する
■ Z|0> → |0>
■ Z|1> → -|1>
○ |+> = (1/√2) (|0>+|1>)
■ Z|+> → (1/√2) (|0>-|1>) = |->
|0>状態
(初期状態)
|+>状態 |->状態
ドイチュ・ジョサの問題
● 今、n の長さのビット列 b を受け取る関数 f が与えられる。
● f(b) は、0 または 1 を返す
● 2^n 通りのビット列 b に対して、
○ f がちょうど半分の入力に対して0を返すとき、「分布型の関数」という
○ fがすべての入力に対して0または1を返す時、「定置型の関数という」
● 関数 f が分布型か定置型かを判定せよ
● n=2の例
○ f(“00”) = 0
○ f(“01”) = 1
○ f(“10”) = 0
○ f(“11”) = 1
○ 関数fは半分の入力に対して0を返し、半分の入力に対し1を返すので、「分布型の関数」
ドイチュ・ジョサの問題
● 古典的解法
○ 関数 f に、ビット列を “00...0” から順番に “11...1” まで入れていき調べていく
○ 最も運が良くて2回で判定できる
■ f(“000”) = 0
■ f(“001”) = 1
■ 0と1が返ってきたということは、「分布型」である
○ 最悪ケースは?
■ f(“000”) = 0
■ f(“001”) = 0
■ f(“010”) = 0
■ f(“011”) = 0
■ まだ確定しない
● f(“100”) = 1 のとき、「分布型」が確定
● f(“100”) = 0のとき、「定置型」が確定
○ 最悪ケースでは、2^{n-1}+1 回調べなければいけないので、最悪計算量はO(2^{n-1})である
ドイチュ・ジョサの問題
● 量子的解法
○ n+1量子ビットを用意する
■ 上位n量子ビット
■ 下位1量子ビット
■ に分ける
○ 右図のような量子回路で解ける
● 解法ステップ
○ 【初期化】下位1量子ビットは|1>状態にする
○ 【ステップ1】:全量子ビットをHゲートを作用
○ 【ステップ2】:全量子ビットをUfゲートを作用
○ 【ステップ3】:上位nビットを再度Hゲートを作用
○ 【ステップ4】:上位nビットを測定する
● 判定
○ 測定したnビットが、100%の確率で|00...0>なら定置型
○ 測定したnビットが、|00...0>になる可能性が0%なら分布型
【ステップ1】
● 【ステップ1】:全量子ビットをアダマールゲートを作用
● 全量子ビットはすべての可能な状態の重ね合わせ状態になる
● 上位n量子ビットは、以下の状態になる
● 下位1量子ビットは、以下の状態になる
● 合わせて書くと、以下のように書ける
上位n量子ビット 下位1量子ビット
【ステップ2】
● 【ステップ2】:量子ビットをUfゲートを作用
● Ufゲートは問題設定により、与えられるとする。
● 量子ビットは以下のようになる
上位n量子ビット 下位1量子ビット
【ステップ3】
● 【ステップ3】:上位量子ビットに再度Hゲートを作用
● すると、上位n量子ビットが|00...00>になる確率振幅は以下になる。
● fが定置型ですべて0を返す場合、★部分は(1+1+1+...+1)になり、2^nになり、確率振幅は1になる
● fが定置型ですべて1を返す場合、★部分は(-1-1-1…-1)になり、-2^nになり、確率振幅は-1になる
● fが分布型の場合、★部分は1と-1の数が同数になり、0になり、確率振幅は0になる。
● よって、上位n量子ビットを測定した結果、
○ 100%の確率で|00...00>になれば f は定置型
○ |00...00>になる確率が0%ならば f は分布型
★
コード
①インポート ②Uf回路作成
コード
③ドイチュ・ジョサのアルゴリズム
全コードの詳細はQiskit Notebookのページにある
https://qiskit.org/textbook/ja/ch-algorithms/deutsch-jozsa.html
・n+1個の量子ビットと、n個の古典ビットを定義
・n番目の量子ビットにXゲートを適用
・n番目の量子ビットにHゲートを適用
・[0, n)を測定
コード
④量子回路を作成
実行
⑤実行
|0000>の確率0%なので、関数fは分布型だった
実機で実行
⑥IBMQの実機を使って実行
ドイチュ・ジョサのアルゴリズムの疑問
● そもそもUfゲートのシミュレーション回路を古典で生成するのに最悪計算量O(2^n)かかる
● なんの役に立つのか?
○ Ufゲートが与えられたとして、f を分布型、定置型と判定したい問題の応用とは?
● 初の量子アルゴリズムではあるが、実用性はない
より実用的な問題への応用
● というような議論はとっくにされていて、実問題に応用できる量子アルゴリズムがいろいろな研究
者により考えられている(現在進行系)
● よくきく応用先
○ 素因数分解
○ 量子化学計算
○ 機械学習の学習高速化
○ 等々
参考書籍・URL
● 竹内繁樹「量子コンピュータ 超並列計算のからくり」
● Chris Bernhardt(著), 湊雄一郎(訳)「みんなの量子コンピュータ」
● 湊雄一郎「いちばんやさしい量子コンピューターの教本」
● 宇津木 健「絵で見てわかる量子コンピュータの仕組み」
● Qiskit Textbook, https://qiskit.org/textbook/ja/preface.html
おわり

More Related Content

What's hot

機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理Ryo Nakamura
 
pre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonaccipre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonaccipgf2alpha
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装するShuhei Iitsuka
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列miyosuda
 
Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会Shuyo Nakatani
 
経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」Wataru Shito
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知Chika Inoshita
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化Miyoshi Yuya
 
論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回Noritada Shimizu
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)Kota Matsui
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702swkagami
 
WUPC2nd A問題
WUPC2nd A問題WUPC2nd A問題
WUPC2nd A問題Dai Hamada
 

What's hot (16)

機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
 
動的計画法
動的計画法動的計画法
動的計画法
 
動的計画法
動的計画法動的計画法
動的計画法
 
pre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonaccipre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonacci
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
Ml ch7
Ml ch7Ml ch7
Ml ch7
 
Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会Infinite SVM [改] - ICML 2011 読み会
Infinite SVM [改] - ICML 2011 読み会
 
経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
 
論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
kagamicomput201702
kagamicomput201702kagamicomput201702
kagamicomput201702
 
WUPC2nd A問題
WUPC2nd A問題WUPC2nd A問題
WUPC2nd A問題
 

はんなりPython#42 20210629