見出し画像

世の中にある事象を丁寧に数式に落とし込め #QA4U

前回に引き続いて第二回が開催された。17時からなんと4時間コースという大盤振る舞い。

第一回は、量子アニーリングを使うってどんな感じだっけ?という基本的な事についての講義だったが、第二回はより現実的な課題についてどのように取り組んでいくのかについての入り口的な話。

本日の講義ノートはこちらのGoogle Colaboratoryへ。

現在までの説明によると、量子アニーリングマシンで組み合わせ最適化問題を解くためには二次関数にするんだよという話だった。今回の講義の前半では、ここに重点をおいて話をしてくれた。要は肝なのである

講義自体は高校生以上が対象となっている。高校の授業や大学受験のように基本的に答えが存在している世界で勉強している子たちを現実問題の世界へと誘う非常に重要な講義だった。自然言語で表現されている(もしくは表現すらされていない)課題を、自分はどのように捉え、どのように数式として表現するのか。答えのない世界で自分がどう決めるのか、そこが重要な点なのだ。求めたい課題を量子コンピュータが解決しやすい形にどのように落とし込むか、そのための基礎となる考え方について論じる回。

最初に考える事例としては、複数ある荷物(重さはランダム)を二人でなるべく均等な重さで持たせたい。これを最適化するにはどうしたら良いだろうか?という比較的シンプルな課題に取り組んだ。

Aさんが持つ重さをWA
Bさんが持つ重さをWB
とすると、WA-WBが最小になるように考えるべし。というものだ。

QUBO行列という形式に当てはめる事を考えると

(WA-WB)^2 とすれば良い。みたいな話からスタートする。めちゃくちゃ丁寧にここを説明していく。大雑把に言うと何でもかんでも二次関数になるように数式を組むことからまずは考えようという話。

ではWAってなんだっけ?というと、複数ある荷物を順番に

w1,w2,w3.....という記号で書く。
次に、Aさんが持つ場合は1,持たない場合は0をxiに入れる
これをかけ合わせて足し算するとWAが導き出される。

WA = w1*x1 + w2*x2 + ...... wi*xi

となる。みたいな感じで分解していくんだな〜。数学!

久しぶりにΣとか見たけどだんだん思い出してきたぞ。

行列とΣがわかっていれば展開もかんたんに出来ると思うので理解は容易いと思う。計算のやり方がわかってしまえば、今度はそれをライブラリを使って簡単に処理する方法を使いこなすことが出来るというスタイルで授業が進行していってます。

数式は世の中の事象を説明するための文章である

現実問題をどのように解ける形にするのかを考え、数式にすることで量子アニーリングマシンが解決出来る為の橋渡しができる。数式は意図を伝えるための文章と同じなので丁寧に書こうねというのが大関先生の教えでした。高校生だったら聞き流していたかもしれないけど。

上述の数式は、最終的に展開していって簡易化していくとpythonのプログラムで掛けるようになる。入れ子にしたfor文で書くと行列がいい感じにできる。とはいえ、これを毎回やるのは面倒なのだ。そこで(株)リクルートコミュニケーションズが作ったPyQUBOというライブラリを使うことができる。天才の所業だと思う。神ライブラリである。

上述のように、基本的な考え方が腹落ちしたタイミングでPyQUBOを導入するとコーディングが遥かに簡単になるのだ。

講義の聞き方

基本的に大関先生はLiveなので、講義ノートに沿った形で進んでいくのだけど、ノートに書いてあるけど喋ってない事があったりする。これって通常の大学の授業でもそうだよなって今更思う。授業ノート&配信アーカイブのセットがあると理解がしやすい。

量子アニーリングで数値を特定する

二次関数で0〜10までの数値の間でどこかが頂点になっている事を想定する。例えばx=3が頂点だったとすると、その3を導き出したい。

量子アニーリングではxiは1or0しか表すことができない。そこで、頂点xを量子アニーリングで表すには

x = x1 + x2 + x3 + .....

とする。xiは0 or 1 だから、xが1〜10だとすると最大値が10、最小値が0として表現することができるんだと。ある特定の条件の数値を特定したいというときにはこのような形でxを特定することができる。なるほどな〜。

Slackを使ったコミュニティ活用

大学の授業と違って、生徒である参加者の皆さんは直接顔を合わせる訳ではないのだが、Slackを使ったコミュニティを活用している。

分からないところを質問してみたり、講義にあった内容を少し発展させてやってみた、とかやってみたら動かなかったんだけどヒントがほしい!みたいなやり取りがあったり、大関先生側から高校生に向けて難易度どうだった?みたいなやり取りがあってリアルタイムに次回の講義の方向性が決まっていく感じになってる。

参加者の熱量が高いから成り立ってる部分はあるのかもしれないけど、参加者にとってはありがたい仕組みだよな〜って。

結局の所、学んだことを誰かに説明するときが一番自分が成長しているときだったりするので、そういうのを相互に提供できるというのは学習環境としてはとても強いものがある。

ということで、実はあと数分で第三回の講義が始まる訳ですが、今回も楽しみにしていますという話でした。より現実的な問題にアプローチする回になる予定になっています。

小話:量子アニーリングマシンのメンテナンス

所詮は機械なので使ってるとヘタってくるのだ。そうすると定期的にメンテナンスが入る。そうするとなんとびっくり。当然メンテナンス前後で出力が変わってしまったりするんですよね…。これは実装に使ってるとしたら恐ろしい話だな。


noteにはこれまでの経験を綴っていこうかと思います。サポートによって思い出すモチベーションが上がるかもしれない。いや、上がるはずです。