Slide 1

Slide 1 text

Quantum Neuron: an elementary building block for machine learning on quantum computers https://arxiv.org/abs/1711.11240 量子コンピュータアプリ勉強会
 2018/3/13 論文紹介
 鳥越貴智 (piyo7)


Slide 2

Slide 2 text

自己紹介
 Qiitaに生息してます ٩( 'ω' )و https://qiita.com/piyo7
 
 量子ゲートシミュレータを ScalaMatsuri で発表予定 (・ㅂ・)و✧
 https://github.com/piyo7/qlione
 
 ● 量子力学        ←ぜんぜん知らない
 ● 量子ゲートの計算モデル ←ちょっと本読んでみた
 ● ニューラルネットワーク ←ちょっと遊んだことある
 


Slide 3

Slide 3 text

自己紹介
 分野ふらふら ٩( ᐛ )و
 元 C++ 屋、現 Scala 使い、時々 Python。
 ベイズ統計やりたくなったので Stan 触りはじめました。
 
 ● プログラミング言語の型理論 @ 東京大学数学科
 ● 無線ネットワークシミュレーション @ 構造計画研究所
 ● データ分析/集計/予測 @サイバーエージェント ←今ここ
 
 // 今日の論文は、社内の機械学習論文共有会のネタとして読みました。
 


Slide 4

Slide 4 text

あらすじ
 ● 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 ● 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。
 
 ● 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。
 
 // ちなみに、ImPACTの量子ニューラルネットワーク計算機とは無関係だよ。


Slide 5

Slide 5 text

チュートリアル:量子ビット
 2 古典ビット
 
 
 2 量子ビット
 
 
 
 n 量子ビットの状態は、2^n 個の基底の「重ね合わせ」
 50 量子ビットの場合、基底が 1,125,899,906,842,624 個。


Slide 6

Slide 6 text

チュートリアル:量子ゲート
 
 量子回路       に、
 
 
 量子ビット                を通すと、
 


Slide 7

Slide 7 text

チュートリアル:量子測定
 
                を測定すると、
 
 基底が得られる確率は
 
 
 たとえば上位ビットのみ測定することもできて、
 結果が 1 の確率は ¼ + ½ = ¾ 、測定後の状態は、
 


Slide 8

Slide 8 text

チュートリアル:量子計算
 ● n 量子ビットは、
 2^n 行でノルム 1 の複素ベクトル。
 
 ● n 量子ビット用の量子ゲートは、
 2^n 行 2^n 列の(複素)ユニタリ行列。
 
 ● 量子ビットを測定して得られる確率は、
 射影した複素ベクトルのノルム。
 
 // 量子力学知らなくても受け入れてしまえば、わりと計算モデルはシンプル。


Slide 9

Slide 9 text

あらすじ
 ● 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 ● 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。
 
 ● 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。


Slide 10

Slide 10 text

量子ニューロンのイメージ


Slide 11

Slide 11 text

人工ニューロンの数式
 
 
 
 
 
 
 
 // q(Φ)を足がかりに、
 // 力技でステップ関数を模していく。


Slide 12

Slide 12 text

線形結合の量子回路


Slide 13

Slide 13 text

活性化関数の量子回路
 
 
 
 
 
 
 
 
 // 回転角の符号が論文と逆転してるので、数式展開を微妙に間違えてるかも…


Slide 14

Slide 14 text

活性化関数の量子計算


Slide 15

Slide 15 text


 
 
 
 
 
 
 
 // 2Φ 回して 2Φ 戻す間に差し込んだ -iY が、うまく Y 軸回転に効いてる。
 活性化関数の量子計算


Slide 16

Slide 16 text

線形結合の量子回路


Slide 17

Slide 17 text

あらすじ
 ● 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 ● 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。
 
 ● 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。
 
 // このパートは Qiita 記事の抜粋でした。 https://qiita.com/piyo7/items/2104fe7084c95ed4b97b


Slide 18

Slide 18 text

しばらく著者スライドに移ります
 http://qtml2017.di.univr.it/resources/Slides/Quantum-Neuron.pdf // 実験結果は古典計算機によるシミュレーションのはず。


Slide 19

Slide 19 text

あらすじ
 ● 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 ● 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。
 
 ● 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。


Slide 20

Slide 20 text

重ね合わせ学習
 ● 訓練データを重ね合わせ、一度に学習できる。
 
 ● 訓練データの重ね合わせ状態を得るためには、
 別途、何かしらの量子的な機構が必要。
 
 ● 微分が困難なため、最適化アルゴリズムは
 導関数不要なNelder–Mead法などを使う。
 
 // このあたり論文に詳しく書いてなかったため、
 // いくつか疑問があったり、社内でツッコミもらいました。
 // 分かる方いらっしゃったら教えてください m(_ _)m
 


Slide 21

Slide 21 text

重ね合わせ学習
 ● 訓練データを重ね合わせ、一度に学習できる。
 
 // 入力が n 量子ビットだとすると、
 // 最大 2^n の訓練データを重ね合わせられるはず。
 // => それが手に入るなら辞書から引くだけでいいので、実際は問題に応じて。
 // 量子ビット数とデータ数の比によって、ありがたみ変わってきそう。
 
 // それらの誤差の平均を測定結果の期待値として得られる、という意味だと理解。
 // => 訓練データをランダムに選んで、
 // 古典ニューラルネットワークで一つずつ誤差を計算するのと同じ???
 // => なにか勘違いしているか、量子測定のテクニックがあるのかも。


Slide 22

Slide 22 text

重ね合わせ学習
 ● 訓練データの重ね合わせ状態を得るためには、
 別途、何かしらの量子的な機構が必要。
 
 // 論文にはキーワードだけ紹介されているけど調べてないです……。
 // QRAM、量子データベース、もしくは訓練データを生成する別の量子回路
 // => 同じ重ね合わせ状態を繰り返し出力しないといけないはずなので、
 // こちらの計算量も気にしたほうが良さそう。


Slide 23

Slide 23 text

重ね合わせ学習
 ● 微分が困難なため、最適化アルゴリズムは
 導関数不要なNelder–Mead法などを使う。
 
 // 最適化は古典計算機で行って、量子回路の回転ゲートを制御するのだと思う。
 // => ここも量子コンピュータでやれたら凄そう。
 
 // Nelder–Mead法は初歩的なブラックボックス最適化手法で、
 // ディープラーニングのように、
 // パラメータ数が膨大なものには向いてないらしい。
 // => 現在の各種ディープラーニングフレームワークには、
 // 自動微分が底にあるはずなので、これはこれで挑戦的な研究分野かも。


Slide 24

Slide 24 text

あらすじ
 ● 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 ● 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。
 
 ● 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。


Slide 25

Slide 25 text

量子ニューロンの計算量


Slide 26

Slide 26 text


 
 
 
 
 
 
 
 // 古典NNの計算量はざくっと T * O(n^2 * l) ※ T は訓練データ数
 順伝播型ニューラルネットワークの計算量


Slide 27

Slide 27 text

ホップフィールドネットワークの計算量


Slide 28

Slide 28 text

おまけ
 @tailrec def activateRus(psi: QuBits[_1], phi: Double) (implicit r: Random): QuBits[_1] = { val m = (psi x bit0 ) |> (I x Ry(2 * phi) ) |> (QuGate(-1.i * Y.matrix) x I ) |> (I x Ry(2 * phi).t) |> (_.measure[_0]) if (m.result) { activateRus(m.unmeasured |> Ry(Pi / 2), phi) } else { m.unmeasured } } ScalaMatsuri 2018 発表用の
 量子シミュレーターで
 活性化関数の実装してみた。
 気が向いたら追試したい……
 
 \型安全な量子回路DSL/
 https://github.com/piyo7/qlione