Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【Blueqat Summit】Re:ゼロから始める量子プログラミング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
gyu-don
May 30, 2019
Programming
780
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【Blueqat Summit】Re:ゼロから始める量子プログラミング
量子プログラミングは今日から始められる、という話をしました。
gyu-don
May 30, 2019
More Decks by gyu-don
See All by gyu-don
フロントエンド初心者がサクッとReactに入門する
gyudon
0
310
任意の2 qubitユニタリのゲートでの実装〜KAK分解を使って〜
gyudon
0
1k
Shorのアルゴリズム
gyudon
24
9.1k
Blueqat♥量子化学
gyudon
0
1.3k
arXivQurationのご紹介
gyudon
0
230
偏光で理解する重ね合わせ状態
gyudon
0
1.8k
Other Decks in Programming
See All in Programming
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
580
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.2k
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
120
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
330
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
100
ALB ログから Trace を気合で繋げる技術
fohte
5
590
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
260
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
260
異なる設計思想のフレームワークを経験して得た学び
amekuhideki
1
540
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
300
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
My Marp Sample
sinoue0108
0
120
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
940
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Thoughts on Productivity
jonyablonski
76
5.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Exploring anti-patterns in Rails
aemeredith
3
470
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Transcript
Re:ゼロから始める 量子プログラミング生活 MDR株式会社 加藤 拓己 GitHub/Qiita: gyu-don
About me 加藤 拓己 / GitHub/Qiita: gyu-don 現在: MDR株式会社でBlueqatの開発など 以前: プラント会社で鉄鋼のアニーリング (炉の計装制御)
某IT企業でエンジニア。深層学習とビットコインをちょっとかじる 学部/修士時代: 東北大学の量子光学の研究室で実験屋さん 好きなプログラミング言語: Rust, C, C++, Python, OpenQASM
前にも言いましたが。 とにかく、Blueqat始めましょう。
恐竜の話。 「恐竜に詳しい人」には、3種類います。 1. 恐竜のテレビをいっぱい見て、恐竜図鑑の内容をよく覚えている人 彼らは本当によく勉強してます。 大人顔負けの知識を持っている子供なんかもいますね。 すごいですね。賢いですね。 完全に理解した
恐竜の話。 「恐竜に詳しい人」には、3種類います。 1. 恐竜のテレビをいっぱい見て、恐竜図鑑の内容をよく覚えている人 2. 恐竜に関する研究をしている人 恐竜はどうやって生きてたのか、どんな姿をしていたのか。 そういったことを研究している人たちがいます。 恐竜図鑑作るのとかも、大抵そういう人が関わっています。 超すごいですね。ほんとリスペクトです。
なんもわからん
恐竜の話。 「恐竜に詳しい人」には、3種類います。 1. 恐竜のテレビをいっぱい見て、恐竜図鑑の内容をよく覚えている人 2. 恐竜に関する研究をしている人 3. 恐竜に会ったことがある人 あんまり勉強してない人も多いです。 生まれた時代によっては、誰でもなれます。
別にすごくないけど、 生きた経験と知識を持っています。 うぇーい ※人類誕生のときには、既に恐竜は絶滅していた、という説が主流です
量子プログラミングの話。 「量子プログラミングに詳しい人」には、3種類います。 1. 量子プログラミングの情報を集めていて、勉強会にもいっぱい出ている人 2. 量子プログラミングに関する研究をしている人 3. 量子プログラミングをしたことがある人 量子コンピュータは ありまぁす
実は「3.」には、すぐなれるんですが。 なってみませんか?
VB Quantum Computer Programming for Everyone https://github.com/Blueqat/Blueqat
[email protected]
https://mdrft.com
初めての人にBlueqatを勧める5つの理由 1. 覚えることが少ない Circuitクラスの使い方だけ覚えたら回路が作れる 2. 回路の手書きが直感的で簡単 メソッドチェーンやスライス表記で短い・分かりやすい 3. 安心の日本語コミュニティ MDRのSlackや勉強会で質問をいただければ開発者が直接答えます
4. 簡単QAOA/VQE NISQアルゴリズムの代表格ともいえるQAOAやVQEも簡単に動かせる 5. 環境構築らくらく NumPy/SciPyを使っていて、C++を直接書いたりしていないので、 依存関係やライブラリなどが原因でインストールに躓くことが少ない
あなたとBlueqat 今すぐインストー ル pip install blueqat
Hello, Quantum World ➔ 経験者は最初は退屈かもしれません 最後まで退屈だったら、ごめんなさい ➔ 理論は知ってるが、手を動かしたことはない方は… この機会にぜひ触ってみて下さい ➔
量子コンピュータなんもわからん方も… とりあえずやってみることが重要です “Hello World”のような基本から、 ちょっとした応用まで見ていきます
やってみよう Python (3.6以上)の入った環境で pip install blueqat コマンドを入力するとインストール完了 Jupyter Notebook や
Google Colabでは !pip install blueqat を入力して、Shift+Enterで実行
まずやること 1. 量子回路を作る 2. 回路(の0ビット目)にアダマールゲート(H)をひとつ付け加える 3. 実行して状態ベクトルを得る アダマールゲートは重ね合わせを作るゲート |0> →
1/√2 (|0> + |1>) |1> → 1/√2 (|0> - |1>) 量子回路の状態は最初は|0>で初期化されているので 1/√2 (|0> + |1>) が得られるはず H
Circuitを作る from blueqat import Circuit c = Circuit() c.h[0] c.run()
BlueqatのCircuitをインポート 回路を作る アダマールゲートを付け加えてみる 回路を走らせて、状態ベクトルを得る 結果: array([0.70710678+0.j, 0.70710678+0.j]) →0.70710678を2乗すると、だいたい0.5にな るので、1/√2になっている
|1>にHをかけてみよう Xゲートはビットを反転するゲート なので、Hをかける前にXをかけると、 |1>にHをかけたことになる X |0> |1> X |1> |0>
Circuitを作る c = Circuit() c.x[0].h[0] c.run() 回路を作る Xゲート、Hゲートを付け加える 回路を走らせて、状態ベクトルを得る 結果:
array([0.70710678+0.j, -0.70710678+0.j]) → 1/√2 (|0> - |1>)になった
観測してみよう アダマールゲートをかけると、|0>と|1>の重ね合わせ状態になる。 試しに100回、回路を動かして、観測結果を見てみる
観測をしよう c = Circuit() c.h[0].m[0].run(shots=100) # |1>にHゲートをかけたもの c.x[0].h[0].m[0].run(shots=100) 回路を作る Hゲートをかけて、観測する。
回路を100回走らせる。 結果: 0と1がほぼ同じ回数観測された。 (例: Counter({'0': 49, '1': 51}) この数字は、実行する度に変わる) |1>にHゲートをかけても、同じような観測結果になった。 →実は、観測確率は状態ベクトルの値の「絶対値の2乗」になっている。 なので、値がプラスでもマイナスでも変わらない
量子もつれを作ろう 量子ビット同士は、不思議な相関を持ちうる。 1/√2(|00> + |11>) という状態を考える。 これは、 ・0ビット目が0なら、1ビット目も0 ・0ビット目が1なら、1ビット目も1 という意味。
余談ですが。0ビット目と1ビット目を別々の人に渡して、 2人が遠く離れたところで、どちらかが観測したら、 光速を超えて瞬時に、相手が持っているビットの状態が変わるので、 それは相対論に反するのでは? という議論が昔あった (アインシュタイン=ポドルスキー=ローゼンのパラドックス)
CNOT (CX)ゲートは相関を作るゲート Control-NOT、あるいはControl Xゲートは、 0ビット目(Control)が|1>のとき、1ビット目(Target)にXゲートをかけます 0ビット目 (Control) 1ビット目 (Target) →1ビット目
(Target) |0> |0> →|0> |0> |1> →|1> |1> |0> →|1> |1> |1> →|0> よく、こういう記号で書かれます
CNOT (CX)ゲートは相関を作るゲート 0ビット目にHゲートをかけてから、CXゲートをかけると、 元々: |00> = |0>|0> Hゲート: 1/√2 (|0>
+ |1>) |0> = 1/√2 (|0>|0> + |1>|0>) CXゲート: 1/√2 (|0>|0> + |1>|1>) = 1/√2 (|00> + |11>) ややこしいですが、大切なので、丁寧に追ってください。
Blueqatで量子もつれを作ろう c = Circuit() c.h[0].cx[0, 1].m[:].run(shots=100) Hゲート、CXゲートをかけて、観測する。 回路を100回走らせる。 結果: |00>と|11>のみが、およそ同じ数だけ観測される
Hゲートのみでの重ね合わせと量子もつれの違い Circuit(2).h[:].m[:].run(shots=100) Circuit().h[0].cx[0, 1].m[:].run(shots=100) H H H |00>, |01>, |10>,
|11>がそれぞれ約1/4ずつ →ただコイン2枚投げたのと同じ状態 |00>, |11>がそれぞれ約1/2ずつ |01>, |10>→出ない 2つの量子ビットが相関を持っている
問題です。 次の量子回路は、どんな入力のときに出力が|111>になるでしょう? Circuit().x[2].cx[2, 1].cx[1, 2].x[1].cx[1, 0].cx[0, 2].x[0] X X X
分からんので、 Groverのアルゴリズム 使ってみましょう
今回は詳しい話は省くのですが…… Groverのアルゴリズムは: ・欲しい答えのときに位相が反転する量子回路 位相が反転するゲートは、 ビットが反転するゲートをHゲートで挟めば作れます。 今回|111>のときなので、CCXゲートをHゲートで挟んで作ります。 ・グローバーのDiffusion Operator 決まった形の回路で、状態ベクトルの平均を反転する作用をします。 を使うと、答えが求まるアルゴリズムです。
回路のマクロ登録 最近のBlueqatは、回路をマクロとして登録できるようになりました。 from blueqat import BlueqatGlobalSetting def problem(c): # 問題の回路
return c.x[2].cx[2, 1].cx[1, 2].x[1].cx[1, 0].cx[0, 2].x[0] def problem_dag(c): # 問題の回路を逆順にしたもの return c.x[0].cx[0, 2].cx[1, 0].x[1].cx[1, 2].cx[2, 1].x[2] BlueqatGlobalSetting.register_macro(‘problem’, problem) BlueqatGlobalSetting.register_macro(‘problem_dag’, problem_dag) def oracle(c): # 問題の回路を通して|111>のときのみ位相反転する回路 return c.problem().h[2].ccx[0, 1, 2].h[2].problem_dag() BlueqatGlobalSetting.register_macro(‘oracle’, oracle)
Diffusion Operator, Grover Operator 3量子ビットの場合のdiffusion operatorを定義します。 def diffusion(c): return c.h[:].x[:].h[2].ccx[0,
1, 2].h[2].x[:].h[:] BlueqatGlobalSetting.register_macro(‘diffusion’, diffusion) oracleとdiffusionを組み合わせたのがGrover Operatorです。 def grover(c): return c.oracle().diffusion() BlueqatGlobalSetting.register_macro(‘grover’, grover)
やってみましょう Circuit().h[:].grover().m[:].run(shots=100) 結果: Counter({'110': 90, '101': 4, '000': 3, '010':
1, '011': 1, '001': 1}) |110>が一番多い 確認: Circuit().x[0, 1].problem().m[:].run(shots=100) Counter({'111': 100}) ←確かに、|110>を入力すると|111>が出てくる 0番目、1番目の量子ビットを反転させて|110>をproblemの入力に。
(再掲) 問題です。 次の量子回路は、どんな入力のときに出力が|111>になるでしょう? Circuit().x[2].cx[2, 1].cx[1, 2].x[1].cx[1, 0].cx[0, 2].x[0] X X
X |1> |1> |0> |1> |0> |1> |1> |0> |1> |1> |1> |1> |1> 発展課題: Groverのアルゴリズムを使わずに効率よくこの問題を解く方法はないか考えよ。
すごいBlueqatたのしく学ぼう • 量子プログラミングは今日からでも始められる • Blueqatは量子プログラミングをこれから始める人におすすめ ◦ 量子プログラミングを完全に理解した人にもおすすめ • 超特急で、Groverのアルゴリズムを使う方法について説明しました ◦
答えがさっぱり分からないものと向き合うための量子アルゴリズムです • もっと学びたい人は: ◦ チュートリアル: https://github.com/mdrft/Blueqat_tutorials_ja ◦ AI Academy 量子コンピュータ入門編 (無料): https://aiacademy.jp/texts/#quantum ◦ MDRの勉強会: https://qnn.connpass.com/ ◦ Slack: https://blueqat.slack.com (招待リンク: https://bit.ly/2JNvbOg) ◦ 他、MDR社員まで直接お声がけください