Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

417 views

Published on

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

Published in: Science
  • Be the first to comment

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

  1. 1. Quantum Neuron: an elementary building block for machine learning on quantum computers https://arxiv.org/abs/1711.11240 量⼦コンピュータアプリ勉強会 2018/3/13 論⽂紹介 ⿃越貴智 (piyo7)
  2. 2. 自己紹介 Qiitaに⽣息してます ٩( 'ω' )‫و‬ https://qiita.com/piyo7 量⼦ゲートシミュレータを ScalaMatsuri で発表予定 (・ㅂ・)‫✧و‬ https://github.com/piyo7/qlione ● 量⼦⼒学        ←ぜんぜん知らない ● 量⼦ゲートの計算モデル ←ちょっと本読んでみた ● ニューラルネットワーク ←ちょっと遊んだことある
  3. 3. 自己紹介 分野ふらふら ٩( ᐛ )‫و‬ 元 C++ 屋、現 Scala 使い、時々 Python。 ベイズ統計やりたくなったので Stan 触りはじめました。 ● プログラミング⾔語の型理論 @ 東京⼤学数学科 ● 無線ネットワークシミュレーション @ 構造計画研究所 ● データ分析/集計/予測 @サイバーエージェント ←今ここ // 今⽇の論⽂は、社内の機械学習論⽂共有会のネタとして読みました。
  4. 4. あらすじ ● 量⼦コンピュータ(量⼦ゲート計算機)で、 ニューラルネットワークを構築する筋道を⽰すよ。 ● 量⼦計算は線形なものだけど、⾮線形な活性化関数を ブロッホ球の Y 軸回転⾓上で設計したよ。 ● 量⼦の「重ね合わせ」で、ニューラルネットワークに ⼤量の訓練データを⼀発で⾷わせられるよ。 // ちなみに、ImPACTの量⼦ニューラルネットワーク計算機とは無関係だよ。
  5. 5. チュートリアル:量子ビット 2 古典ビット 2 量⼦ビット n 量⼦ビットの状態は、2^n 個の基底の「重ね合わせ」 50 量⼦ビットの場合、基底が 1,125,899,906,842,624 個。
  6. 6. チュートリアル:量子ゲート 量⼦回路       に、 量⼦ビット                を通すと、
  7. 7. チュートリアル:量子測定                を測定すると、 基底が得られる確率は たとえば上位ビットのみ測定することもできて、 結果が 1 の確率は ¼ + ½ = ¾ 、測定後の状態は、
  8. 8. チュートリアル:量子計算 ● n 量⼦ビットは、 2^n ⾏でノルム 1 の複素ベクトル。 ● n 量⼦ビット⽤の量⼦ゲートは、 2^n ⾏ 2^n 列の(複素)ユニタリ⾏列。 ● 量⼦ビットを測定して得られる確率は、 射影した複素ベクトルのノルム。 // 量⼦⼒学知らなくても受け⼊れてしまえば、わりと計算モデルはシンプル。
  9. 9. あらすじ ● 量⼦コンピュータ(量⼦ゲート計算機)で、 ニューラルネットワークを構築する筋道を⽰すよ。 ● 量⼦計算は線形なものだけど、⾮線形な活性化関数を ブロッホ球の Y 軸回転⾓上で設計したよ。 ● 量⼦の「重ね合わせ」で、ニューラルネットワークに ⼤量の訓練データを⼀発で⾷わせられるよ。
  10. 10. 量子ニューロンのイメージ
  11. 11. 人工ニューロンの数式 // q(Φ)を⾜がかりに、 // ⼒技でステップ関数を模していく。
  12. 12. 線形結合の量子回路
  13. 13. 活性化関数の量子回路 // 回転⾓の符号が論⽂と逆転してるので、数式展開を微妙に間違えてるかも…
  14. 14. 活性化関数の量子計算
  15. 15. // 2Φ 回して 2Φ 戻す間に差し込んだ -iY が、うまく Y 軸回転に効いてる。 活性化関数の量子計算
  16. 16. 線形結合の量子回路
  17. 17. あらすじ ● 量⼦コンピュータ(量⼦ゲート計算機)で、 ニューラルネットワークを構築する筋道を⽰すよ。 ● 量⼦計算は線形なものだけど、⾮線形な活性化関数を ブロッホ球の Y 軸回転⾓上で設計したよ。 ● 量⼦の「重ね合わせ」で、ニューラルネットワークに ⼤量の訓練データを⼀発で⾷わせられるよ。 // このパートは Qiita 記事の抜粋でした。 https://qiita.com/piyo7/items/2104fe7084c95ed4b97b
  18. 18. しばらく著者スライドに移ります http://qtml2017.di.univr.it/resources/Slides/Quantum-Neuron.pdf // 実験結果は古典計算機によるシミュレーションのはず。
  19. 19. あらすじ ● 量⼦コンピュータ(量⼦ゲート計算機)で、 ニューラルネットワークを構築する筋道を⽰すよ。 ● 量⼦計算は線形なものだけど、⾮線形な活性化関数を ブロッホ球の Y 軸回転⾓上で設計したよ。 ● 量⼦の「重ね合わせ」で、ニューラルネットワークに ⼤量の訓練データを⼀発で⾷わせられるよ。
  20. 20. 重ね合わせ学習 ● 訓練データを重ね合わせ、⼀度に学習できる。 ● 訓練データの重ね合わせ状態を得るためには、 別途、何かしらの量⼦的な機構が必要。 ● 微分が困難なため、最適化アルゴリズムは 導関数不要なNelder–Mead法などを使う。 // このあたり論⽂に詳しく書いてなかったため、 // いくつか疑問があったり、社内でツッコミもらいました。 // 分かる⽅いらっしゃったら教えてください m(_ _)m
  21. 21. 重ね合わせ学習 ● 訓練データを重ね合わせ、⼀度に学習できる。 // ⼊⼒が n 量⼦ビットだとすると、 // 最⼤ 2^n の訓練データを重ね合わせられるはず。 // => それが⼿に⼊るなら辞書から引くだけでいいので、実際は問題に応じて。 // 量⼦ビット数とデータ数の⽐によって、ありがたみ変わってきそう。 // それらの誤差の平均を測定結果の期待値として得られる、という意味だと理解。 // => 訓練データをランダムに選んで、 // 古典ニューラルネットワークで⼀つずつ誤差を計算するのと同じ??? // => なにか勘違いしているか、量⼦測定のテクニックがあるのかも。
  22. 22. 重ね合わせ学習 ● 訓練データの重ね合わせ状態を得るためには、 別途、何かしらの量⼦的な機構が必要。 // 論⽂にはキーワードだけ紹介されているけど調べてないです……。 // QRAM、量⼦データベース、もしくは訓練データを⽣成する別の量⼦回路 // => 同じ重ね合わせ状態を繰り返し出⼒しないといけないはずなので、 // こちらの計算量も気にしたほうが良さそう。
  23. 23. 重ね合わせ学習 ● 微分が困難なため、最適化アルゴリズムは 導関数不要なNelder–Mead法などを使う。 // 最適化は古典計算機で⾏って、量⼦回路の回転ゲートを制御するのだと思う。 // => ここも量⼦コンピュータでやれたら凄そう。 // Nelder–Mead法は初歩的なブラックボックス最適化⼿法で、 // ディープラーニングのように、 // パラメータ数が膨⼤なものには向いてないらしい。 // => 現在の各種ディープラーニングフレームワークには、 // ⾃動微分が底にあるはずなので、これはこれで挑戦的な研究分野かも。
  24. 24. あらすじ ● 量⼦コンピュータ(量⼦ゲート計算機)で、 ニューラルネットワークを構築する筋道を⽰すよ。 ● 量⼦計算は線形なものだけど、⾮線形な活性化関数を ブロッホ球の Y 軸回転⾓上で設計したよ。 ● 量⼦の「重ね合わせ」で、ニューラルネットワークに ⼤量の訓練データを⼀発で⾷わせられるよ。
  25. 25. 量子ニューロンの計算量
  26. 26. // 古典NNの計算量はざくっと T * O(n^2 * l) ※ T は訓練データ数 順伝播型ニューラルネットワークの計算量
  27. 27. ホップフィールドネットワークの計算量
  28. 28. おまけ @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

×