量子アニーリングマシン
(イジングマシン)
のプログラミング
2018-01-12 サイボウズラボ勉強会
西尾 泰和
2018-01-26 加筆
このスライドの目的
• 量子アニーリングマシンについて解説
• 量子アニーリングマシンで問題を解くための
入力フォーマット「イジングモデル」を解説
• イジングモデルの設計の仕方を解説
2
量子コンピュータ
いわゆる「量子コンピュータ」には2種類ある
量子ゲート方式: 素因数分解などが理論上指数関
数的に早く解けるアルゴリズムが知られているが
今のところ約20qbit程度しかない
量子アニーリング方式: 最適化問題を早く解けそ
うな気配がある(理論的保証なし、要実験)
2011年にD-waveが商用販売を開始。約2000qbit
このスライドでは量子ゲート方式の話はしない
3
イジングモデル
二値変数の間の関係をイジングモデルで記述する
コスト(ハミルトニアン)を定義する形になる。
コストが最小になる解が高い確率で出てくる
4
解きたい問題をどうやってこの式の形に落とすか
がアニーリングマシンでのプログラミングに相当
ℋ = − ෍
𝑖𝑗∈𝐸
𝐽𝑖𝑗 𝑥𝑖 𝑥𝑗 − ෍
𝑖∈𝑉
ℎ𝑖 𝑥𝑖
注: 一般的な物理ではハミルトニアンは2次の項までで制限されない。
イジングモデルの制約。今回はスコープ外なので使い分けないがQUBOとも呼ぶ。
普通のプログラミングと違う
C言語などのような手続型の言語でのプログラミ
ングとは全く違う
SATソルバに似ている: 二値変数の間の関係をCNF
の形で記述し、SATソルバに入力すると、非充足
な項を最小化する解*が返る
再掲: 二値変数の間の関係をハミルトニアンの形
で記述し、アニーリングマシンに入力すると、
ハミルトニアンを最小化する解が返る
5
* 充足する(非充足項=0)の時は確実にそれが返る。非充足の時に何が返るかは実装次第
「量子」でないアニーリングマシン
(例)富士通のデジタルアニーラ:
イジングモデルを入力として取るのは同じ
最適化に量子効果を使うのではなく
FPGAで専用回路を組むことによって高速化
長所: 量子効果のために超低温まで冷やす必要が
ない。普通の半導体なので普通に設置できる。
グラフが全結合*。
短所: 「量子~」ではない
6
* D-waveのマシンは辺を張れない場所があるため
解きたい問題をその制約の下で表現する、という
別の最適化問題を事前に解く必要がある
「量子」である必要はあるのか?
解きたい問題が高速に解けるなら量子かどうかと
無関係にビジネス上は有用である。
常温で動くこともデバイス設置場所の自由度を上
げてビジネス上有用。GPUが乗ったグラフィック
ボードがCPUと分業して問題を解いてきたように
イジングモデル処理ユニットが乗ったボードが
CPUと分業するかも。
→今後、量子かどうかは気にせず、まとめて
「イジングマシン」と呼ぶことにする
7
コンピュータの歴史のおさらい
8
1952年 IBM 701
IBMの最初の商用コンピュータ
9
画像出典: https://en.wikipedia.org/wiki/IBM_701
真空管1071本
月額レンタル料1~2万ドル
1954~1957年 FORTRAN
• FORmula TRANslation system(数式変換系)
• 現代のほぼすべてのプログラマが使う
「プログラミング言語」のはしり
• 抽象レベルの高い数式で書いた指示を
抽象レベルの低い機械語で書いた指示に
変換するシステム(自動プログラミング*)
10
* “The Fortran Automatic Coding System for the IBM 704” (1956)
システムができたのが54年、このマニュアルができたのが56年、
一般に入手可能になったのが57年。
プログラミング言語の歴史
11
http://cdn.oreillystatic.com/news/graphics/prog_lang_poster.pdf
プログラミング言語の歴史
12
http://cdn.oreillystatic.com/news/graphics/prog_lang_poster.pdf
2011年 D-wave One
初の商用量子アニーリングマシン
13
写真は128qbit
売値は1000万ドル~1500万ドルと言われる
Photo by D-Wave Systems, Inc.
参考: Alloy
SATソルバに入力するCNFを
人間に分かりやすい記述で生成するための言語
14
抽象によるソフトウェア設計−Alloyではじめる形式手法
sig Object{
has: one Object
}
run {
some Object
} for exactly 3 Object
p cnf 57 78
-2 -1 -10 0
10 -14 0
-1 11 0
-2 11 0
1 2 -11 0
:
57変数、78節
(not v2 or not v1 or not v10) and
(v10 or not v14) and …
イジングモデルプログラミング言語
新しい計算デバイスが商用化されると、顧客は
「より低いコストでプログラムを書きたい」
という商業上のインセンティブを持つ
→プログラミング言語の発展を進める力になる
イジングモデルを人間に分かりやすい記述で生成
するための高級言語がたくさん生まれるだろう。
15
イジングモデルの設計
実際にいくつかの問題について
イジングモデルの設計方法を学ぼう
この2つのパラメータを決める
16
ℋ = − ෍
𝑖𝑗∈𝐸
𝐽𝑖𝑗 𝑥𝑖 𝑥𝑗 − ෍
𝑖∈𝑉
ℎ𝑖 𝑥𝑖
参考文献: [1302.5843] Ising formulations of many NP problems
https://arxiv.org/abs/1302.5843
Q: EとVって何? A: グラフの辺と頂点の集合。慣習的にこう書かれてるけど
グラフを全結合にしてiやjが1~Nを走りJijやhiは単なる行列とベクトルと考えてもよい
Number Partition
N個の数が与えられる。
これを2つのグループに分けて
グループごとの和が一致するようにせよ
例 {1, 2, 3, 4, 5, 6, 7, 8} → {1, 4, 5, 8} {2, 3, 6, 7}
どうすればこの問題を解くイジングモデルが
実現できるか考えてみよう!
17
Number Partition
ヒント:
N個の数があるので、N個の二値変数を用意し
それの値が+1か-1かでどちらのグループかを
表現するようにしよう。
18
Number Partition 解答編
かっこの中身が「グループごとの和」の差になる
2乗した値は、中身が0の時に最小値になる。
19
ℋ = ෍
𝑖∈𝑉
𝑛𝑖 𝑥𝑖
2
ℋ = ෍
𝑖∈𝑉
෍
𝑗∈𝑉
𝑛𝑖 𝑛𝑗 𝑥𝑖 𝑥𝑗
最初なので一応確認
展開してみる
ℋ = ෍
𝑖∈𝑉
෍
𝑗∈𝑉
𝑛𝑖 𝑛𝑗 𝑥𝑖 𝑥𝑗
これは
ℋ = − ෍
𝑖𝑗∈𝐸
𝐽𝑖𝑗 𝑥𝑖 𝑥𝑗 − ෍
𝑖∈𝑉
ℎ𝑖 𝑥𝑖
𝑤ℎ𝑒𝑟𝑒 𝐸 = 𝑖, 𝑗 𝑖 ∈ 𝑉, 𝑗 ∈ 𝑉 ,
𝐽𝑖𝑗 = −𝑛𝑖 𝑛𝑗, ℎ𝑖 = 0
20
補足: 二値変数
二値変数が {0, 1} だとするケースと
{-1, +1} だとするケースがあるけど、
どちらかの仕様で二次の項までで表現できれば
もう片方の仕様でも二次の項まえで表現できる
𝑥𝑖 ∈ 0, 1 , 𝑦𝑖 ∈ {−1, +1}について
2𝑥𝑖 − 1 = 𝑦𝑖の時
𝑦𝑖 𝑦𝑗 = 4𝑥𝑖 𝑥𝑗 − 2𝑥𝑖 − 2𝑥𝑗 + 1
21
Exact Cover(言葉での説明)
サイズnの集合Uがある
Uの部分集合Viがm個ある
Vの中からいくつか選んで、
どの2つもdisjointで、
かつ全部unionしたらUになるようにせよ
22
Exact Cover(数式での説明)
日本語はあいまいなので数式で書く。
𝑈 = {𝑥𝑖|0 ≤ 𝑖 < 𝑛}
𝑉 = 𝑉𝑖 𝑉𝑖 ⊂ 𝑈, 0 ≤ 𝑖 < 𝑚
がgivenとして、以下の条件を満たすSを求めよ
𝑆 ⊂ 𝑉
𝑓𝑜𝑟 𝑎𝑙𝑙 𝑆𝑖, 𝑆𝑗 ∈ 𝑆, 𝑆𝑖 ∩ 𝑆𝑗 = 𝜙
ራ
𝑆 𝑖∈𝑆
𝑆𝑖 = 𝑈
23
Exact Cover(実例と図解での説明)
{V1, V2}は、unionはUだが、disjointではない
{V2, V3, V4}はdisjointでunionがUなのでこれが解
この問題をどうやってイジングモデルで表現する
か?
24
発想の転換
“どの2つもdisjointで、かつ全部unionしたらU”
と
“任意の頂点について、
Sの中に出現する回数は1である”
は等価である
25
発想の転換(数式での説明)
以下のように定義すると
𝑆𝑖𝑗 ≔ ൝
1 ⋯ 𝑥𝑖 ∈ 𝑆𝑗
0 ⋯ 𝑥𝑖 ∉ 𝑆𝑗
以下が言える
∀𝑖, ෍
𝑗
𝑆𝑖𝑗 = 1
なぜなら
26
∀ 𝑆𝑖, 𝑆𝑗 ∈ 𝑆, 𝑆𝑖 ∩ 𝑆𝑗 = 𝜙 ֞ ∀𝑖, ෍
𝑗
𝑆𝑖𝑗 < 2
ራ
𝑆𝑖∈𝑆
𝑆𝑖 = 𝑈 ֞ ∀𝑖, ෍
𝑗
𝑆𝑖𝑗 > 0
次の一歩
∀𝑖, ෍
𝑗
𝑆𝑖𝑗 = 1
これをイジングモデルで表現する
27
Exact Cover解答
iは頂点を走る。jはm個のVを走る。
xjは{0, 1}で「VjがSの要素のとき1」とする。
具体的なVがgivenならSijの{0, 1}の値が確定し
単に展開すればHはxの2次までの項で表現できる
28
ℋ = ෍
𝑖
1 − ෍
𝑗
𝑆𝑖𝑗 𝑥 𝑗
2
余談: Alloyのone述語
Alloyでは変数の集合に対して
「この集合の中の1つだけがTrueである」
と宣言する述語oneが存在する。
29
塗り分け
グラフの頂点を白黒2色で塗り分けて
「辺の両端は違う色である」
という条件を満たすにはどうしたらよいか。
30
塗り分け解答
色は{+1, -1}とする
同じ値の時に正の値、
異なる値の時に負の値になる。
値が小さくなるように最適化を掛けるので
両端の色が異なる辺が多くなる方向に進む。
これ排他的論理和だよね。
31
ℋ = ෍
𝑖𝑗∈𝐸
𝑥𝑖 𝑥𝑗
Vertex Cover
グラフを白黒2色で塗り分けて
「辺の少なくとも片方は黒である」
という条件を満たしつつ、
黒の頂点を最少にするにはどうしたらよいか。
32
補足: 「黒の頂点を最少にする」という条件がなければ全部黒で塗ればいい
Vertex Cover解答
色は{0, 1}とする
両方0である時にペナルティを発生させたい
1から引くことで論理否定して、
掛け算することで論理積を取り、
頭にマイナスがついてないので論理否定され、
結果的にこれ論理和だよね。
33
ℋ = ෍
𝑖𝑗∈𝐸
(1 − 𝑥𝑖)(1 − 𝑥𝑗)
ド・モルガンの法則!
ここまでのまとめ
one, xor, and, not, orが出てきた
34
今回のラスボス: 3SAT
N個の二値変数がある。これを連言標準形で組み
合わせた論理式が与えられる。
論理式を充足するように各変数の真偽値を定めよ
連言標準形とは:
m個の節がandで結ばれており、
各節の中はorで結ばれている形。
例: (x1 or x2 or x3) and (x3 or not(x1) or x4)
今回は各節の中の変数が最大3個とする(3SAT)
35
組み合わせて…
andやorやnotはもう出て来ているから
組み合わせればいい!
…というのはCPU脳
36
三次の項
a and b and c は手続型の考え方のCPU脳では
「a and bを計算してxとし、
それからx and cを計算すればよい」となる
一方、二値変数を{0, 1}としたら
a and b は a * b で表現できるが、
a and b and c は a * b * c になって
三次の項になってしまう!
37
三次の項を二次に落とすルール
もし仮に新しい変数xを導入して
ab = x となる制約を作ることができれば
三次の項abcは二次の項xcに落とせる
ab = x はどうすれば作れるか?
38
全通り書き出してみる
*: ab=c とする。
a b c ab bc ca *
0 0 0 0 0 0 T
0 0 1 0 0 0 F
0 1 0 0 0 0 T
0 1 1 0 1 0 F
1 0 0 0 0 0 T
1 0 1 0 0 1 F
1 1 0 1 0 0 F
1 1 1 1 1 1 T
39
数学パズル
Tの時0、Fの時正の値になるような式Hを作れ
a b c ab bc ca *
0 0 0 0 0 0 T
0 0 1 0 0 0 F
0 1 0 0 0 0 T
0 1 1 0 1 0 F
1 0 0 0 0 0 T
1 0 1 0 0 1 F
1 1 0 1 0 0 F
1 1 1 1 1 1 T
40
数学パズル
Tの時0、Fの時正の値になるような式Hを作れ
a b c ab bc ca *
0 0 0 0 0 0 T
0 0 1 0 0 0 F
0 1 0 0 0 0 T
0 1 1 0 1 0 F
1 0 0 0 0 0 T
1 0 1 0 0 1 F
1 1 0 1 0 0 F
1 1 1 1 1 1 T
41
H=c で8ケース中6ケース充足
111の時、H=0にしなければ
ならない
110の時、H>0にしなければ
ならない
111の時H=0
「他に影響せずに111の時だけ-1する」
→無理。「111の時だけ」を表現するのに
三次の項が出てくる
どういう影響なら許されるか?
→非0の値が、別の非0の値に変わるのはOK
42
数学パズル
Tの時0、Fの時正の値になるような式Hを作れ
a b c ab bc ca * H
0 0 0 0 0 0 T 0
0 0 1 0 0 0 F 2
0 1 0 0 0 0 T 0
0 1 1 0 1 0 F 1
1 0 0 0 0 0 T 0
1 0 1 0 0 1 F 1
1 1 0 1 0 0 F 0
1 1 1 1 1 1 T 0
43
H=2c – bc – caなら
111の時H=0
次は110の時H>0を
目指す
数学パズル
a b c ab bc ca *
0 0 0 0 0 0 T
0 0 1 0 0 0 F
0 1 0 0 0 0 T
0 1 1 0 1 0 F
1 0 0 0 0 0 T
1 0 1 0 0 1 F
1 1 0 1 0 0 F
1 1 1 1 1 1 T
44
110の時H>0で
Tの時0になるような式H’
があれば、それを足して
やればよい
a, bの係数は0であるべき
ab, bc, caが100の時正で
111の時0になる式H’
2ab – bc – ca はどうか?
数学パズル
a b c ab bc ca * H'
0 0 0 0 0 0 T 0
0 0 1 0 0 0 F 0
0 1 0 0 0 0 T 0
0 1 1 0 1 0 F -1
1 0 0 0 0 0 T 0
1 0 1 0 0 1 F -1
1 1 0 1 0 0 F 1
1 1 1 1 1 1 T 0
45
2ab – bc – ca は 011と101
で-1になる
これが悪影響を及ぼさな
いためにはその2つのケー
スでH>1である必要があ
る
H=2c – bc – caだと1にな
るのでH=4c – 2bc – 2caに
すればよいのではないか
数学パズル
合計すると
H=4c+2ab-3bc-3ca
検算してみるとHは
Tの時0、Fの時正の値
めでたしめでたし
46
a b c ab bc ca * H
0 0 0 0 0 0 T 0
0 0 1 0 0 0 F 4
0 1 0 0 0 0 T 0
0 1 1 0 1 0 F 1
1 0 0 0 0 0 T 0
1 0 1 0 0 1 F 1
1 1 0 1 0 0 F 2
1 1 1 1 1 1 T 0
Tの時0、Fの時正の値になるような式Hを作れ
三次の項を二次の項に
というわけでH = abcは
H=cd+4d+2ab-3bd-3da
検算してH=0の所を観察すると
確かにabc=0になる7パターンだけが
H=0になっている
47
0,0,0,0: H=0
0,0,0,1: H=4
0,0,1,0: H=0
0,0,1,1: H=5
0,1,0,0: H=0
0,1,0,1: H=1
0,1,1,0: H=0
0,1,1,1: H=2
1,0,0,0: H=0
1,0,0,1: H=1
1,0,1,0: H=0
1,0,1,1: H=2
1,1,0,0: H=2
1,1,0,1: H=0
1,1,1,0: H=2
1,1,1,1: H=1
解法1
上記解法1は参考にしたサイト*で
変換式が天下り的に与えられていたので
「ab=dの制約を入れる」という点だけ採用して
変換式を自力で導出してみたもの
参考サイトと違う形の式になった!
というわけで別解は色々ありそう、試してみよう
48
* イジング模型への変換 – Quantum Computing Information Site
https://quantum.fixstars.com/introduction_to_quantum_computer/
quantum_annealing/programming/conversion/
解法2
abcはすべてが1の時だけ1
つまり (a + b + c) = 3 の時だけ 1
H = (a + b + c – 3) ** 2 とやると
111の時だけ0… あ、目的と逆だ…
49
0,0,0: H=9
1,0,0: H=4
0,1,0: H=4
1,1,0: H=1
0,0,1: H=4
1,0,1: H=1
0,1,1: H=1
1,1,1: H=0
解法3: 機械学習
イジングモデル設計とはいわば
N^2+N個の係数を定める作業
機械学習の一部のアルゴリズムは
「好ましいふるまいについてのデータ」
を与えることで係数を調整するアルゴリズム
→連携できるのではないか?
50
実験
3bitの入力とその2次までの掛け合わせを
入力データとしてロジスティック回帰
→線形識別できて、係数は以下のようになった
7.8 * (ab + ac + bc) - 1.12 * (a + b + c + a^2 +
b^2 + c^2)
51
検算
111の場合だけハミルトニアンが
かなり大きくなることがわかる(差15以上)
52
a b c aa ab ac bb bc cc
[0, 0, 0, 0, 0, 0, 0, 0, 0] 0 0.0
[1, 0, 0, 1, 0, 0, 0, 0, 0] 0 -2.24494646
[0, 1, 0, 0, 0, 0, 1, 0, 0] 0 -2.24494646
[1, 1, 0, 1, 1, 0, 1, 0, 0] 0 3.33641013
[0, 0, 1, 0, 0, 0, 0, 0, 1] 0 -2.24494646
[1, 0, 1, 1, 0, 1, 0, 0, 1] 0 3.33641013
[0, 1, 1, 0, 0, 0, 1, 1, 1] 0 3.33641013
[1, 1, 1, 1, 1, 1, 1, 1, 1] 1 16.74406977
任意のNbit入力
入力ビット数を増やしても線形分離
=任意のNbitの乗算をNbitで近似できる
ただしビット数の指数オーダーの時間がかかる
ビット数 所要時間(秒)
12 0.495441913605
13 1.25184321404
14 2.98895788193
15 6.37683296204
16 19.0442888737
17 34.7080688477
18 97.6587619781
53
future work
• 今回ロジスティック回帰で実験したが、
解法1をやってみて「0か非0か」が重要だと
わかったのでコスト関数の工夫が有益そう
• 数学パズルの解法を言語化できれば
それを素朴に実装して探索問題として
解くこともできるかも
54
future work
• 今回ロジスティック回帰で実験したが、
要求仕様に合わせてコスト関数を変えた方が
良さそう
• Trueの場合とFalseの場合に十分な差があれば十分
or Tの時にHが0である必要がある
or T, Fが{0, 1}に対応する必要がある
• 数学パズルの解法を言語化できれば
それを素朴に実装して探索問題として
解くこともできるかも
55
数学パズルの解法
今回の僕の解法を言語化しておく
• まず最も要求を充足する変数を選ぶ
• 非充足な行を充足に変える方法を考える
• 非0を0にする方が制約が厳しいので優先
• 0を非0にする修正に関しては、
他の非0の行に影響を与えてもよい
正の影響なら無視、負の影響なら適当にス
ケールすることで影響をなくせる
56
追記
中谷さんからab=cの数学パズルに関して
線形不等式の解を求める問題として捉えたら
探索空間の次数が割と小さくて網羅的探索できる
という指摘がありました。
整数係数の範囲で
c=3 では ab=1, bc=ca=-2 の1つだけ。
c=4 では ab=2, bc=ca=-3 と
ab=1, bc=-2, ca=-3と
ab=1, bc=-3, ca=-2 の3通りがあり、
cを増やすと無数にあるとのこと。
57
まとめ
• イジングマシンの上でのプログラミングは
係数を調整して二次式を組み立てること
• 機械学習などの既存の手法を使って
人間の「プログラミング」を支援出来そう
• きっとこれに特化したプログラミング言語が
生まれてくるに違いない
→とても面白い
58
59
追記
60
SATの実応用問題の大きさ
最も大きいもので200万変数
61
http://www-erato.ist.hokudai.ac.jp/docs/seminar/nabeshima.pdf
ビット数の観点
今CPU上でのSATで競われている問題
(出題されるが大きすぎて解けない問題)
が現時点のアニーリングマシン(2000qbit)の
およそ1000倍の大きさ。
qbitが仮に1.5年で2倍になるとすると
その規模に達するのは15年後。
ビットコインのマイニングで
CPU→GPU→FPGA→ASICの流れに掛かった年数を
考えると、金が絡めば速くなるのではとも思う。
62
商業的観点
そもそもSATはCPU上で効率よく解く方法を
長年試行錯誤されてカリカリチューンされてる。
SATで解ける問題はSATソルバーに押し付けて
SATの形にうまくフィットしない問題を
イジングマシンで解くという分業が良さそう。
3D描画のニーズでGPUが生まれ
AI高速化のニーズでTPUが生まれたように
Ising Processing Unitが生まれてCPUと分業する
のが正しい進化の方向なのではないかと僕は思う
63

量子アニーリングマシンのプログラミング