東京大学大学院新領域創成科学研究科基盤情報学専攻
矢吹太朗 伊庭斉志
taro dot yabuki at unfindable dot net
後の質問については、実はそれが適切な問いかどうかをまず考えなければならない。
そもそも、どんな問題にも適用できるよい探索アルゴリズムというのはあるのだろうか。
ここではこの疑問について考察する。
理解を助けるためにたとえ話を用いているが、政治的に正しくあるために、**という記号を使っている。
この部分は何か適当なもの(女や男、食材、ワイン、家具、家など)で置き換えて読んでほしい(いずれにしても“好み”などと言っている時点で政治的に正しくないのかもしれない)。
“**に入れる政治的に正しい例”で置き換えるのもいいかもしれない。
理想の**の探し方を研究したいんです。でも、自分にしか役立たない方法だと論文になりませんし、誰も聞いてくれないじゃないですか。だから、誰にでも使える方法を見つけたいんですよ。題して、“理想の**の探し方-好みの違いを超えて-”
どんな問題も効率よく解けるようなアルゴリズム(聖杯)の存在を暗に仮定しているような研究は過去に多く行われてきた[6](キリストが最後の晩餐で用い、後に十字架の下で彼の血を受けたと言われる聖杯の名がなぜ万能のアルゴリズムを指すのに使われるのかは不明)。 「問題Aに関して、探索アルゴリズムBは他のいくつかのものより効率がよい」という研究は多くあるが、発表されるアルゴリズムは問題ごとに違っていて、聖杯と呼べるものは見つからなかった。 そして1995年にWolpertとMacreadyがno free lunch theorem (NFL)を発表し、これが聖杯の存在へのアンチテーゼとされたのである。
ここではこのNFLについて考察する。 以下では、ふつうは多項式時間で処理できるなどのように絶対的な意味で使われる“効率がよい”という言葉を、相対的つまり“他の方法より効率がよい”という意味で用いる。 さらに言えば、計算資源に関する効率は考察しない。 そのため、扱う計算モデルを厳密にする必要はないかもしれないが、一応チューリング・マシンのもののみと考えておこう。 量子計算のような計算モデルはここでの考察の対象にはならないだろう。
次のような問題
を考えよう。
0から7の整数に対して1から5の整数のいずれかを返すような関数直観的にはそのような方法は無さそうに見える。 実際にそのことを数学的に示したのが次の定理である。がある。
を4回呼んでその最大値を推測する最も効率のよい方法はどのようなものだろうか。
すべての評価関数に適用できる効率のよいアルゴリズムは存在しない。“すべての評価関数”というのは上の例で言えば“すべての
解の候補の有限集合を
、その要素のひとつを
とする。
評価関数
は
から有限集合
への写像である(
の要素のひとつを
で表す)。
の最大値を与えるような
が問題の解で、それを見つけたいのである。
このような探索問題を解くためのアルゴリズムには大きく分けて次の2つがある。
問題
において図1のような
が与えられたとしよう。
我々はこの答えを知っているが、探索アルゴリズムは何も知らないところから探索を始める。
適当な解の候補を
とする。
である。
の近傍を調べる。
であるから、山を上るために
に移動する。
であるから
に移動するが、これで4回
を呼び出したため探索は終わりである。
見つかったのは最大値(
)ではなく極大値でだった。
たまたま好みに合う**が見つかったとします。その周辺で最も好みに合う**を探します。そういうことを繰り返せばいつか理想の**にめぐり合えるように思えます。(例えば**が“女性”で周辺が“合コン友達”の場合には、“幹事MAX”(合コンでは幹事が一番いい)という経験則があって、僕は山を登れません。僕と正反対の好みを持つ人にとってはいい話のように思うかもしれませんが・・・。絶対的な女性の基準の有無については何も言っていません。あくまで僕の好みの話です。)
みんな結局これに似たことをやっているわけですよね。
「これから5番目にここを通る女の子をナンパしろ」みたいなのがこれです。試したことはありません。
探索においては、まずインスタンスの解の候補を空間(候補空間)の点に対応付けるようなコーディング方法を決める。 次に解の候補つまり点の評価値を返すような評価関数を定義する。 これによって探索空間が定まる。 そして探索アルゴリズムによって実際に探索する。 以上をまとめると図2のようになる。NFLが直接かかわるのは点線の内側である。塗りつぶされた部分は人間が工夫できる[しなければならない]ところである。
探索について記述するために、以下のような記号を導入する。NFLでは評価関数を評価した回数
に対する効率を考えるため、探索履歴
には重複がないようにしなければならない。
: 候補空間
: 評価値空間
: 探索空間
: 探索アルゴリズム
: 評価関数(
)
: すべての評価関数の集合
: 評価関数を呼んだ回数
: 探索履歴
(if
,
)
![]()
そもそも**を評価できない場合はどうするんだろうなどいうのは考えすぎです。あくまでたとえ話ですから、一目見たら評価できるんだと思ってください(評価できない**の評価値を低くするのも哀しいですし)。
アルゴリズム
の効率
は探索履歴
で決まると考える。
図3のように
は探索アルゴリズム
と評価関数
、それを呼び出す回数
を与えれば決まる。
つまり、

平均効率を求めるために、すべての
についての和をとる。図4からわかるように
と
を与えれば
が決まるため、
もある程度決めることができる。つまり、

|
|
求めたいのは、アルゴリズムの効率
のすべての
に関する平均である。
そのために
を計算する。
この
に関する和は
に関する和に置き換えることができる。
なぜなら、考えられる
は全部で
個あって、そのひとつひとつに対して、
と
を与えたときに得られるような
を満たす
は
個あることがわかるからである。
確かに、
となって、すべての
を尽くしていることがわかる。
よって、

証明には確率理論の次の公式を用いる。
を指定したときに探索の結果が(勝手に与えた)
になる確率
のすべての
についての平均
のとき、
次に
のときに(2)が
によらないと仮定する。
公式2を使うと、


![]() |
(3) |


NFLにおいて、探索アルゴリズムの効率
の詳細については何も仮定していない。
実際、何によって効率を測るかには柔軟性がある。
しかしながら、ここでいう効率は、異なる
に対して
を評価した回数
に関するものだという点で一般に言われる効率とはかなり異なっている。
ふつうアルゴリズムの効率として考えられるのは、必要とする計算時間や記憶容量に対してどの程度よい解が得られるかということである。
たとえば先に挙げたランダム探索、山登り探索、焼きなまし法、遺伝的アルゴリズムなどは、同じ点を複数回評価する可能性がある。
NFLにおいてはそのようなことは無視している。
計算時間と
の関係がたとえ線型だとしても探索アルゴリズムごとに違っているだろうからふつうに使われる効率に簡単に変換することはできない。
探索アルゴリズムを修正して同じ点を評価しないようにすることはできるが、そのためには一度評価した点をすべて記憶しておかなければならないうえに、そうしたところでふつうに使われる効率がわかるようになるわけではない。
いずれにしてもNFLは計算資源に関しての効率については何も主張していない。
また、そのような効率をすべての
について平均しようとしても、得られる結果は意味のないものになるだろう。
そのような場合にはランダム探索の効率がよくなる。
なぜなら、ランダム探索は重複せずにたくさんの点を評価できるからである。
さらに言えば、
と順に評価していくアルゴリズムのほうが乱数を計算する必要がないぶん効率がよいことになるだろう。
ここでは紹介しないが、すべての評価関数についての平均ではなく分散など他の統計量を用いて効率を定義しても、その平均はアルゴリズムによらない[4]。
例えば問題
のための探索空間の場合、
を10進数(
)で表して、それを1次元の空間(図5)に並べることもできれば、2進数で表して3次元空間(図6)に配置することもできる。
に局所的最大値を持つ図5と比べれば、そのような点を持たない図6のほうが山登り探索にとっては扱いやすいことが予想される(もちろん1次元の候補空間のほうが探索しやすいような問題
のインスタンスもあるだろう。これはNFLに似た話になっている)。
つまり、問題に対して3要素を固定してしまうと、インスタンスによっては探索が困難になるということが起こりうる。
それならば、インスタンスが与えられたときに、図7の左側のような(以下、富士山型と呼ぶ)探索空間を簡単に(たとえば多項式時間で)作る方法があればよいように思える。 しかしながら、そのような方法はおそらく存在しない。
もしそういうことが可能だとすると、NP完全問題にそれを適用して富士山型の評価関数を作ることができる(NP完全問題とは候補が解かどうかを多項式時間で決定できる問題の中でもっとも難しいと思われている問題である[5])。
皮肉なことに、富士山型の評価関数はここで扱っているような探索アルゴリズムによってではなく統計的な方法によって多項式時間で最適化できることがわかっている[3]。
そうすると、NP完全問題を多項式時間で解けることになり、一般に正しいと信じられている仮説“P
NP完全”に反することになってしまう。
ただし、このことが富士山型の評価関数を作ることができないことを意味しているわけではない。実際それは可能であることが示されている[7]。ただ、それが多項式時間ではおそらく不可能だということである。
NFLの主張は、すべての
を効率よく最適化できるようなうまい話は存在しないということであった。そして確かに問題
はその一例になっている。実は
は探索空間で定義できる関数すべてよりも小さく取ることができることがわかっているが、その場合も
が組替えについて閉じているかぎりNFLは成立する[2]。
神性は多少損なわれてしまったわけだが、聖杯を求める円卓の騎士はまず次の2つの可能性(独立ではない)を考えなければならない。
おそらくこのどちらもふつうは成り立っているだろうと思われる。 そのような問題(の一部)について最適な探索アルゴリズムを与えるためには何が必要だろうか。 図2に示したように、探索アルゴリズム以外で人間が工夫しなければならないもの(探索空間と評価関数、コーディング方法)は互いに関連しており、最適なものを独立に作ることはできないだろう。 先にみたようにインスタンスごとに探索空間を変えたほうがよい可能性もある(自己言及的に変化するアルゴリズムはうまく探索できるだろうか)。
そこでまず、探索アルゴリズムと探索空間、評価関数を与えたときに、探索の効率をある程度推定する指標を考えたい。 もしそのような指標があれば、それを用いて先にあげた3つの要素を同時に考慮しながらよりよい組み合わせを探索することができるだろう。
探索の過程で探索空間や評価関数が変化しないなどのNFLにおける仮定を再検討することでも、何らかのヒントが得られるかもしれない。
見つかったけど[1]、どうしていいかわからないって?