Upgrade to Pro — share decks privately, control downloads, hide ads and more …

量子コンピュータでニューラルネットワークな論文紹介

 量子コンピュータでニューラルネットワークな論文紹介

量子コンピュータアプリ勉強会の発表資料です。
元論文『Quantum Neuron: an elementary building block for machine learning on quantum computers』は下記リンクから。
https://arxiv.org/abs/1711.11240

Takatomo Torigoe

March 13, 2018
Tweet

More Decks by Takatomo Torigoe

Other Decks in Science

Transcript

  1. Quantum Neuron: an elementary building block for machine learning on

    quantum computers https://arxiv.org/abs/1711.11240 量子コンピュータアプリ勉強会
 2018/3/13 論文紹介
 鳥越貴智 (piyo7)

  2. 自己紹介
 Qiitaに生息してます ٩( 'ω' )و https://qiita.com/piyo7
 
 量子ゲートシミュレータを ScalaMatsuri で発表予定

    (・ㅂ・)و✧
 https://github.com/piyo7/qlione
 
 • 量子力学        ←ぜんぜん知らない
 • 量子ゲートの計算モデル ←ちょっと本読んでみた
 • ニューラルネットワーク ←ちょっと遊んだことある
 

  3. 自己紹介
 分野ふらふら ٩( ᐛ )و
 元 C++ 屋、現 Scala 使い、時々

    Python。
 ベイズ統計やりたくなったので Stan 触りはじめました。
 
 • プログラミング言語の型理論 @ 東京大学数学科
 • 無線ネットワークシミュレーション @ 構造計画研究所
 • データ分析/集計/予測 @サイバーエージェント ←今ここ
 
 // 今日の論文は、社内の機械学習論文共有会のネタとして読みました。
 

  4. あらすじ
 • 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 • 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。


    
 • 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。
 
 // ちなみに、ImPACTの量子ニューラルネットワーク計算機とは無関係だよ。

  5. チュートリアル:量子ビット
 2 古典ビット
 
 
 2 量子ビット
 
 
 


    n 量子ビットの状態は、2^n 個の基底の「重ね合わせ」
 50 量子ビットの場合、基底が 1,125,899,906,842,624 個。

  6. チュートリアル:量子計算
 • n 量子ビットは、
 2^n 行でノルム 1 の複素ベクトル。
 
 •

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

  7. 活性化関数の量子回路
 
 
 
 
 
 
 
 
 //

    回転角の符号が論文と逆転してるので、数式展開を微妙に間違えてるかも…

  8. 
 
 
 
 
 
 
 
 // 2Φ

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

  9. あらすじ
 • 量子コンピュータ(量子ゲート計算機)で、
 ニューラルネットワークを構築する筋道を示すよ。
 
 • 量子計算は線形なものだけど、非線形な活性化関数を
 ブロッホ球の Y 軸回転角上で設計したよ。


    
 • 量子の「重ね合わせ」で、ニューラルネットワークに
 大量の訓練データを一発で食わせられるよ。
 
 // このパートは Qiita 記事の抜粋でした。 https://qiita.com/piyo7/items/2104fe7084c95ed4b97b

  10. 重ね合わせ学習
 • 訓練データを重ね合わせ、一度に学習できる。
 
 • 訓練データの重ね合わせ状態を得るためには、
 別途、何かしらの量子的な機構が必要。
 
 • 微分が困難なため、最適化アルゴリズムは


    導関数不要なNelder–Mead法などを使う。
 
 // このあたり論文に詳しく書いてなかったため、
 // いくつか疑問があったり、社内でツッコミもらいました。
 // 分かる方いらっしゃったら教えてください m(_ _)m
 

  11. 重ね合わせ学習
 • 訓練データを重ね合わせ、一度に学習できる。
 
 // 入力が n 量子ビットだとすると、
 // 最大

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

  12. 重ね合わせ学習
 • 微分が困難なため、最適化アルゴリズムは
 導関数不要なNelder–Mead法などを使う。
 
 // 最適化は古典計算機で行って、量子回路の回転ゲートを制御するのだと思う。
 // => ここも量子コンピュータでやれたら凄そう。


    
 // Nelder–Mead法は初歩的なブラックボックス最適化手法で、
 // ディープラーニングのように、
 // パラメータ数が膨大なものには向いてないらしい。
 // => 現在の各種ディープラーニングフレームワークには、
 // 自動微分が底にあるはずなので、これはこれで挑戦的な研究分野かも。

  13. 
 
 
 
 
 
 
 
 // 古典NNの計算量はざくっと

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

  14. おまけ
 @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