動かして学ぶ量子コンピュータプログラミング

―シミュレータとサンプルコードで理解する基本アルゴリズム

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
332
ISBN
978-4-87311-919-9
原書
Programming Quantum Computers
FORMAT
Print PDF
Ebook
3,960円
Ebookを購入する
Print
3,960円

独自のシミュレータQCEngineを使ってJavaScriptで書かれたサンプルプログラムをブラウザ上で動かし、量子コンピュータでのプログラミングに必要な知識やスキルを学ぶことができます。量子コンピューティングの基礎とその可能性に関する直感的理解が容易になるよう、豊富な例と図を用いて説明します。前半では、単一キュビットに対する基本的な量子演算、多重キュビット演算、複合演算(量子プリミティブ)、基本的な量子アプリケーション、後半では、探索問題、画像処理、暗号問題、機械学習への応用について解説しており、本書だけで基礎から実践的な応用技術までを一気に習得できます。これから学習を始める技術者、研究者を中心に、新しい研究分野やビジネスで量子コンピュータを利用したいと考える方がプログラミングの「感覚」を養うのに役立つ、ユニークなガイドブックです。

目次

まえがき

1章 はじめに
    1.1 基礎知識
    1.2 QPUとは何か?
    1.3 実践的アプローチ
        1.3.1 QCEngineことはじめ
    1.4 QPU固有の命令
        1.4.1 シミュレータの限界
        1.4.2 ハードウェアの制限
    1.5 QPU対GPU:共通する特徴

Ⅰ部 QPUプログラミング

2章 単一キュビット
    2.1 物理キュビットの概要
    2.2 円表示とは
        2.2.1 円の面積
        2.2.2 円の回転
    2.3 基本のQPU演算
        2.3.1 QPU命令:NOT
        2.3.2 QPU命令:HAD
        2.3.3 QPU命令:READ
        2.3.4 QPU命令:WRITE
        2.3.5 ハンズオン:完全なランダムビット
        2.3.6 QPU命令:PHASE(θ)
        2.3.7 QPU命令:ROTX(θ)およびROTY(θ)
    2.4 COPY:失われた演算
    2.5 QPU演算の組み合わせ
        2.5.1 QPU命令:ROOT-of-NOT
    2.6 ハンズオン:量子スパイハンター
    2.7 結論

3章 多重キュビット
    3.1 多重キュビットレジスタの円表示
    3.2 多重キュビットレジスタを描く
    3.3 多重キュビットレジスタでの単一キュビット演算
        3.3.1 多重キュビットレジスタの中の単一キュビットの読み取り
    3.4 たくさんのキュビットを可視化する
    3.5 QPU命令:CNOT
    3.6 ハンズオン:共有されるランダムさのためにベルペアを利用する
    3.7 QPU命令:CPHASEとCZ
        3.7.1 QPUトリック:位相キックバック
    3.8 QPU命令:CCNOT(トフォリゲート)
    3.9 QPU命令:SWAPとCSWAP
        3.9.1 スワップテスト
    3.10 条件付き演算を構築する
    3.11 ハンズオン:ランダムさを遠隔制御する
    3.12 結論

4章 量子テレポーテーション
    4.1 ハンズオン:テレポートしてみよう
    4.2 プログラムのチュートリアル
        ステップ1:もつれたペアを作る
        ステップ2:積荷キュビットを準備する
        ステップ3.1:積荷キュビットをもつれたペアにリンクする
        ステップ3.2:積荷キュビットを重ね合わせ状態にする
        ステップ3.3:アリスのキュビットを両方とも読み出す
        ステップ4:受け取って、変換する
        ステップ5:結果を確かめる
    4.3 結果を解釈する
    4.4 テレポーテーションは実際にどのように用いられるか?
    4.5 有名な「テレポーテーションデバイスの事故」で楽しむ

Ⅱ部 QPUプリミティブ

5章 量子算術演算と量子論理演算
    5.1 奇妙な相違点
    5.2 QPUでの算術演算
        5.2.1 ハンズオン:インクリメント演算子とデクリメント演算子の構築
    5.3 2つの量子整数の足し算
    5.4 負の整数
    5.5 ハンズオン:より複雑な数学
    5.6 本物の量子性を獲得する
        5.6.1 量子条件付き実行
        5.6.2 位相エンコードされた結果
    5.7 可逆性とスクラッチキュビット
    5.8 アンコンピュートする
    5.9 ブール論理演算をQPU演算にマッピングする
        5.9.1 基本的な量子論理ゲート
    5.10 結論

6章 振幅増幅
    6.1 ハンズオン:位相と大きさの変換
    6.2 振幅増幅の反復
    6.3 さらに反復する?
    6.4 複数成分が反転された場合
    6.5 振幅増幅を使う
        6.5.1 総和を見積もるための振幅増幅とQFT
        6.5.2 振幅増幅で従来型アルゴリズムを高速化する
    6.6 QPUの内部
        6.6.1 感覚を養う
    6.7 結論

7章 QFT:量子フーリエ変換
    7.1 隠れたパターン
    7.2 QFT、DFT、FFT
    7.3 QPUレジスタの周波数
    7.4 DFT
        7.4.1 実数および複素数のDFT入力
        7.4.2 何でもDFTしてみよう
    7.5 QFTを使う
        7.5.1 QFTは高速
    7.6 QPUの内部
        7.6.1 感覚を養う
        7.6.2 演算ごとに調べる
    7.7 結論

8章 量子位相推定
    8.1 QPU演算について学ぶ
    8.2 固有位相は有用な情報を提供する
    8.3 位相推定は何を行うか?
    8.4 位相推定の使い方
        8.4.1 入力
        8.4.2 出力
    8.5 注意事項
        8.5.1 出力レジスタのサイズを選択する
        8.5.2 計算量
        8.5.3 条件付き演算
    8.6 実際の位相推定
    8.7 QPUの内部
        8.7.1 感覚を養う
        8.7.2 演算ごとに調べる
    8.8 結論

9章 データの量子表現
    9.1 非整数データ
    9.2 QRAM
    9.3 ベクトルエンコーディング
        9.3.1 振幅エンコーディングの制限
        9.3.2 振幅エンコーディングと円表示
    9.4 行列のエンコーディング
        9.4.1 QPU演算は行列をどのように表現できるか?
        9.4.2 量子シミュレーション

Ⅲ部 QPUアプリケーション

10章 量子探索
    10.1 位相論理演算
        10.1.1 基本的な位相論理演算を構築する
        10.1.2 複雑な位相論理表現を構築する
    10.2 論理パズルを解く
        10.2.1 子猫とトラに関する問題
    10.3 充足可能性問題を解くための一般的なレシピ
        10.3.1 ハンズオン:充足可能な3-SAT問題
        10.3.2 ハンズオン:充足不可能な3-SAT問題
    10.4 従来型アルゴリズムの高速化

11章 量子スーパーサンプリング
    11.1 QPUはコンピュータグラフィックスにおいてどのように役立つのか?
    11.2 従来型のスーパーサンプリング
    11.3 ハンズオン:位相エンコーディングされた画像を計算する
        11.3.1 QPUピクセルシェーダ
        11.3.2 描画にPHASEを用いる
        11.3.3 曲線を描く
    11.4 位相エンコーディングされた画像をサンプリングする
    11.5 さらに興味深い画像
    11.6 スーパーサンプリング
    11.7 QSS対モンテカルロサンプリング
        11.7.1 QSSはどのように動作するか
    11.8 色を追加する
    11.9 結論

12章 ショアの素因数分解アルゴリズム
    12.1 ハンズオン:QPUでショアのアルゴリズムを使う
    12.2 ショアのアルゴリズムが行うこと
        12.2.1 本当にQPUは必要か?
        12.2.2 量子的なアプローチ
    12.3 整数15の素因数分解を1ステップずつ行う
        ステップ1:QPUレジスタの初期化
        ステップ2:量子重ね合わせへの拡張
        ステップ3:条件付きの2の乗算
        ステップ4:条件付きの4の乗算
        ステップ5:量子フーリエ変換
        ステップ6:結果を読み取る
        ステップ7:デジタル論理演算
        ステップ8:結果を確認する
    12.4 注意事項
    12.4.1 剰余を計算する
    12.4.2 時間対空間
    12.4.3 2以外の互いに素な整数
13章 量子機械学習
    13.1 連立線形方程式を解く
        13.1.1 連立線形方程式の記述と解法
        13.1.2 QPUで連立線形方程式を解く
    13.2 量子主成分分析
        13.2.1 従来型の主成分分析
        13.2.2 QPUを使ったPCA
    13.3 量子サポートベクターマシン
        13.3.1 従来型のサポートベクターマシン
        13.3.2 QPUでSVMを行う
    13.4 他の機械学習アプリケーション

Ⅳ部 将来の展望

14章 最先端を行く:文献案内
    14.1 円表示から複素ベクトルへ
    14.2 用語の細かな説明と注意事項
    14.3 観測基底
    14.4 ゲート分解とコンパイル
    14.5 ゲートテレポーテーション
    14.6 QPUの殿堂
    14.7 競争:量子コンピュータ対従来型コンピュータ
    14.8 オラクルベースのアルゴリズムに関する注意
        14.8.1 Deutsch-Jozsaのアルゴリズム
        14.8.2 Bernstein-Vaziraniアルゴリズム
        14.8.3 Simonのアルゴリズム
    14.9 量子プログラミング言語
    14.10 量子シミュレーションに関する展望
    14.11 量子誤り訂正とNISQデバイス
    14.12 次はどこへ?
        14.12.1 参考書
        14.12.2 講義ノート
        14.12.3 オンラインリソース

訳者あとがき
索引