« 読了:Ljungqvist, et al.(2015) 重度の精神疾患患者に毎月お金を渡したら? | メイン | 読了: Ronkko, McIntosh, & Antonakis (2015) PLS-SEMに怒りの鉄拳を »
2016年1月 7日 (木)
Domingos, P. (2012) A Few Useful Things to Know about Machine Learning. Communications of the ACM, 55 (10), 78-87.
たまたま見つけて、前半はお茶を飲みながらぼけーっと眺めていたのだけれど、途中でこりゃあ勉強になるわと気づき、心を入れ替えて真剣に読んだ。大変面白かった。
きわめてイイカゲンな訳だが、メモをとっておくと...
みんな機械学習使ってますね。教科書もいっぱいありますね。でも、機械学習をうまく使うためには、知っておかなければならない「民間伝承」(folk knowledge)があるのだ。よろしいか、よくお聞きなさい。
1. 学習=表現+評価+最適化。
要するに、鍵はこの3つだ。たとえば分類課題だとして、(1)分類器はなんらかの形式的言語で表現されてないといけない。事例ベースとか(K最近隣法やSVM)、超平面ベースとか(ナイーブベイズやロジスティック回帰)、決定木ベースとか、ニューラル・ネットワークベースとか。(2)分類器の良し悪しを知るには評価関数が必要。エラー率とか二乗誤差とか尤度とかなんとか。(3)良い分類器を探す手段が必要。貪欲サーチとか勾配降下とか線形プログラミングとか。
たいていの教科書は表現によってまとめられている。評価と最適化のことは見過ごされがちだ。
2. 大事なのは汎化だ。
初心者のよくあるミスは、訓練データでテストして成功の夢をみちゃうことだ。テストデータを使ってチューニングしまくるのも同じこと。訓練データとテストデータは厳密に分けるべし。
ふつうの最適化とはちがって、機械学習では最適化関数にアクセスする方法がないのだ(訓練エラーはテストデータの代理物にすぎない)。ポジティブにいうと、目的関数が真の目標の代理であるからこそ、完全に最適化する必要がないのだともいえる。単純な貪欲サーチでみつけた局所最適解が大域的最適解よりも良い、なんてこともあるわけだし。
3. データだけでは十分じゃない。
手元に事例が100万件あり、2値変数が100個あるとしよう。あなたはすべての事例について知っているといえるか? まさか。手元の事例はたったの$10^6$個、可能な事例は$2^{100}$個だ。手元にない事例についてどうやったらわかるというのか?
完璧な学習器なんて存在しない(ノー・フリー・ランチ)。いつだって、データを超えたなんらかの知識・想定が必要になる。幸いなことに、スムーズネスとか、似た事例は似たクラスに属するとか、複雑性に限度があるとか、そういったすごく一般的な想定が、たいていの場合うまく効く。
ここから次のことがいえる。表現を選ぶ際には、その表現で楽に表現できるのはどんな知識か、ということが鍵になる。もしあなたが事例の類似性をつくりだしているものについて知識を持っているならば事例ベースの手法がよいし、もしあなたがそれぞれのクラスにどんな前提条件が必要かという知識をもっているならIF-THENルールを使うのがよい。便利な学習器とは、そこに想定が組みこまれているような奴というだけではなく、それを使えばあなたの知識を明示的に表現できるような奴、いろんな知識を表現できるような奴、学習を通じて知識を自動的に統合できるような奴、である。機械学習は魔法じゃない。必要なのは知識とデータの組み合わせだ。
4. オーバーフィッティングにはいろんな顔がある。
機械学習における恐怖の化け物、それがオーバーフィッティングであることは誰もが知っている。しかし、奴はいろんな形で現れ、すぐには目に見えない。汎化エラーにはバイアスという側面と分散という側面があるのだ。
奴と戦う武器のひとつは交差妥当化である。決定木のサイズを交差妥当化で決めるとか。しかしこれも万能薬ではない。たくさんのパラメータを交差妥当化で決めることは、それ自体がオーバーフィットのはじまりだ。
ほかに、評価関数に正則化項を加えるという手や、新しい構造を加えてよいかどうか検定するという手もある。しかし、解決策があるなどと安易に信じてはならない。分散が小さくなったと喜んでいたらバイアスが増えていた、なんていうことはままあることだ。
オーバーフィッティングについてのよくある誤解に、ノイズのせいでオーバーフィッティングが起きる、というのがある。ノイズがなくたってオーバーフィッティングは起きます。
多重検定(multiple testing)という問題はオーバーフィッティングと密接に関係している。標準的な統計的検定は、あるひとつの仮説だけが検定されると想定する。しかし現代の学習器は膨大な量の検定を簡単にこなす。その結果、有意に見えるものも実はそうではない、ということが起きる。仮説の数を考慮して有意性検定を修正すると、こんどはアンダーフィッティングが生じる。より良いアプローチとしてはFDRがある。[←多重比較についてこういう視点で考えたことはなかったなあ...まだちょっと腑に落ちてないけど、勉強になる]
5. 高次元では直感は無力だ。
オーバーフィッティングに次ぐ大問題は次元の呪いだ。正しい汎化は特徴の数とともに指数的に困難になる。さらに困ったことに、類似性ベースの推論は高次元では破たんする。類似性指標としてハミング距離を使う最近隣分類器について考えよう。いま、クラスは単に $x_1$かつ$x_2$であるとしよう。特徴がこの2つだけなら楽勝だ。いっぽう、あと98個無関係な特徴があったら、そこからくるノイズのせいで、最近隣分類器はまったく機能しなくなる。では、その98個もクラスと関連していたら? それでもだめだ。高次元ではどの事例も互いに似てきてしまう。
幸いなことに、次元の呪いに対抗する効果がある。「非一様性の祝福」とでも呼ぼう。たいていの場合、事例は空間に一様に分布しているのではなく、低次元の空間に固まっている。学習器は暗黙的にこの低次な次元を利用したり、明示的に次元を縮約したりする。
6. 理論的保証ってのは見かけ通りのものではない。
機械学習の論文は理論的保証のてんこ盛りである。良い汎化のために必要な事例数が有界ですとか。
たとえばこんなのだ。分類器の真の誤差率が $\epsilon$より大きいとき、その分類器は「良くない」ということにしよう。「良くない」分類器が$n$個の独立な訓練事例と整合する確率は$(1-n)^\epsilon$より小さい。いま、学習器の仮説空間$H$における「良くない」分類器の数を$b$としよう。そのなかの一つ以上が整合する確率は$b(1-n)^\epsilon$より小さい。学習器が常に整合的な分類器をひとつ返すとしよう。その分類器が「良くない」確率は、$b \leq |H|$より、$|H|(1-n)^\epsilon $以下だ。ゆえに、あなたはがこの確率を$\delta$以下にしたかったら、
$n > \frac{\ln(\delta / |H|)}{\ln(1-\epsilon)} \geq \frac{1}{\epsilon} (\ln|H| + \ln(1/\delta))$
とすればよい...
申し訳ないけど、こんな保証は眉唾だ。このようにして得られる範囲というのは通常きわめていいかげんなものである。上の例では、必要な事例数が$|H|$と$1/\delta$とともに対数的にのみ増大する。残念ながら、関心がもたれる仮説空間というものは、ふつう特徴数$d$とともに二重指数的に増大する。$d$個の二値変数からなるブール関数の空間を考えよう。もし可能な事例が$e$個あったら、可能な関数は$2^e$個あることになる。この空間には可能な事例が$2^d$個あるんだから、関数の数は${2^d}^d$個だ。さらに、上で求めた範囲は非常に悲観的であることに注意。二値特徴100個、決定木の深さが10までだとして、$\epsilon=\delta = 0.01$を達成するには50万個の事例が必要だということになるが、経験上そこまで必要ではない。
さらにいうと、上で言っている有界ってなんのことだ。「あなたの学習器がいま目の前にある訓練セットと整合する仮説を返したら、その仮説はたぶんよく汎化します」ってこと? ちがうよね。「訓練セットが十分に大きければ、あなたの学習器は高い確率で、よく般化する仮説を返すか、あるいは整合する仮説を返せないでしょう」ということなのだ。さらに、良い仮説空間の選び方については何も述べていない。「もし仮説空間が真の分類器を含んでいたら、学習器がよくない分類器を返す確率は訓練セットのサイズとともに減少します」と述べているだけだ。
ほかによく聞く台詞は、無限大のデータが与えられれば、この学習器は正しい分類器を出力することが保証されている、というものだ。我々はふつうそんな漸近トピア(asymptopia)にはいない。無限大のデータの下では学習器Aの勝ちでも、有限のデータの下では学習器Bの勝ちかもしれない。
ユーザよ、用心せよ(caveat emptor)。学習とは複雑な現象だ。ある学習器が理論的に正当化されており、かつうまく機能しているからといって、うまく機能している理由が理論的な正当化にあるとは限らない。
7. 特徴づくりが鍵だ。
機械学習のプロジェクトは、最終的には成功することもあれば、失敗することもある。そのちがいをもたらすものとは? もちろん、いちばん大事なのは特徴だ。初心者はびっくりするが、機械学習プロジェクトにおいて機械学習に割かれる時間は極めて短い。 労力のほとんどは特徴の構築に捧げられる。それは領域固有な知識を必要とする困難な部分だ。また、もっとも面白い部分でもある。それは技術力、直感、創造性、そして黒魔術の世界だ。
もちろん、機械学習の聖杯のひとつは特徴づくりの自動化である。その主な手法は特徴の候補集合からの選択だが、単独ではクラスと関連しない特徴でも組み合わせでは関連するかもしれない。とはいえ、膨大な特徴のなかから有益な組み合わせをみつけるのは時間がかかるしオーバーフィッティングを招く。結局、頭の良さに勝るものはない。[←このくだり、Deep Learningがもてはやされる2016年現在だと、ちょっと書き方も変わってくるかも...]
8. アルゴリズムの賢さよりデータの大きさ。
あなたは最良の特徴のセットを選びました。でもあなたの分類器の正確さはいまだ十分でありません。次の一手はなんでしょう? 選択肢その一、もっと良い学習アルゴリズムを設計する。選択肢その二、データを増やす。研究者は前者を選びがちだが、成功への近道は後者だ。アホなアルゴリズムと死ぬほどたくさんのデータの組み合わせは、賢いアルゴリズムとそこそこのデータの組み合わせに勝つ。
賢いアルゴリズムが報われないのはなぜか。その理由のひとつは、賢くてもアホでもやってることは同じだ、という点にある。どの学習器も、要するに、近くの事例を同じクラスにまとめているだけだ。「近く」という意味がちがうだけである。データが一様に分布しているんなら話は別だが、どこに境界線を引いたところで、予測はたいして変わらない。強力な学習器が不安定であるにも関わらず正確でありうる理由がここにある。
というわけで、お勧めはこうだ。簡単な学習器を先に試すこと。ロジスティック回帰よりもナイーブ・ベイズが先、サポート・ベクター・マシンよりもk最近隣法が先だ。複雑な学習器にはつまみがいっぱいついているし、中でなにやってんのか不透明だ。
世の中の学習器には2種類ある。表現が固定サイズの奴と(線形分類器とか)、データとともに成長する奴だ(決定木とか)。固定サイズの学習器は、データが大きくてもそんなに得しない。可変サイズの学習器は、原理的には十分なデータのもとであらゆる関数を学習できるが、現実には局所解や計算コストのせいでそうならないし、次元の呪いのせいで、どれだけデータがあっても足りないかもしれない。こうした事情を勘案して賢いアルゴリズムを選ぶことは、最終的には報われるかもしれない。学習器の設計と分類器の学習とは明確には分けられないわけで、機械学習プロジェクトの締めくくりが学習器の設計となることも少なくない。実務家も少しは勉強しておいた方が良い[←あれれ? 途中でいっていることが微妙に変わってきてませんかね...]。
9. 多くのモデルを学習せよ。
かつて人々はお気に入りの学習器を持っていた。人々は自分のお気に入りの学習器が優れていると信じるアプリオリな理由みたいなものを持っていた。人々はその学習器のいろんなバリエーションをつくっては最良のものを選ぶことに心血を注いでいた。しかるに、学習器の優劣は場面場面で違っていることが明らかになり、いろんな学習器を組み合わせて使うモデル協調の時代がやってきた。バギング、ブースティング、スタッキングといった手法だ。
モデル協調をベイジアン・モデル・アベレージング(BMA)とごっちゃにしないように。モデル協調は仮説空間そのものを変えるし、いろんな形式をとりうる。BMAは元の仮説空間における仮説群にウェイトを割り振るだけで、そのウェイトは(バギングやブースティングとちがって)極端に偏っており、事実上、いずれかひとつの分類器を選んでいるに過ぎない。
10. 単純だからといって正確とは限らない。
オッカムの剃刀って有名ですよね。機械学習でいうと、同じ訓練エラーをもつ2つの分類器があったら、単純な奴のほうがテスト・エラーが低いだろう、これすなわちオッカムの剃刀だ... なんて主張をよく見かける。しかし、ここでもノー・フリー・ランチだ。たくさん反例を挙げられる。
たとえばモデル協調。ブースティング協調の汎化エラーは、訓練エラーが0になってしまった段階でさえ、分類器の追加によってさらに改善する。たとえばサポート・ベクター・マシン。無数のパラメータを持つがオーバーフィッティングしない。たとえば関数 sign(sin(ax))。この関数はx軸上の任意のサイズの任意のラベルの点を判別できてしまうが[←そ、そうなのかなあ??]、パラメータ数はたったひとつだ。
複雑さについてのもっと洗練された見方を紹介しよう。複雑さとは仮説空間のサイズだ。空間が小さければ仮説は単純に表現される。たしかに、仮説をつくる際に我々は単純さを好む。しかし、仮にその仮説が正確だったとして、それは我々の好みが正確だったからであり、仮説が単純に表現されていたからではない。
さらにややこしいのは、たいていの学習器は仮説空間を漏れなく探索したりしないという点だ。広大な仮説空間から少数の仮説をつくろうとする学習器のほうが、小さな空間からたくさんの仮説をつくろうとする学習器よりもオーバーフィッティングしにくい。つまり、仮説空間のサイズそのものはおおまかな目安に過ぎないということだ。訓練エラーとテスト・エラーにとって本当に問題になるのは、仮説を選択する手続きだ。
というわけで、次のようにアドバイスしたい。単純な仮説のほうが望ましいというのは本当だ。でもそれは、単純さそれ自身に徳があるからであって、正確性とは関係ない。思うに、オッカムがもともと云わんとしたのもそういうことであろう。
11. 表現できるからといって学習できるとは限らない。
サイズ可変な学習器に使われている表現はなんであれ、次のような形のなんらかの定理を用意しているものだ:「この表現を用いればあらゆる関数が表現できる、ないし近似できる」。その表現のファンたちはこれに舞い上がっちゃって他のことを忘れがちだ。しかし、ある関数を表現できるからといって、それを学習できるとは限らない。たとえば、決定木は訓練事例以上の枚数の葉を持てない。また、仮説空間のなかで評価関数が多数の局所解を持ち、真の関数を見つかられないかもしれない(表現はできるのに)。だから、大事なのは「表現できるか」じゃない、そんなのはたいていどうでもよい。本当に大事なのは「学習できるか」だ。[←なるほどねえ。ここは勉強になった]
ある関数についてある表現よりも他の表現のほうが指数的にコンパクトだ、ということがある。当然、後者が必要とする訓練データのサイズも指数的に小さくなる。多くの学習器は単純な基底関数の線形和をつくる(サポート・ベクター・マシンがそうだ)。このときnビットの表現には2のn上の基底関数が必要になる。でも、多層な表現を使うと(つまり入力と出力のあいだにもっとステップをおくと)、おなじnビットが線形なサイズの分類器で符号化できたりする。こういう深層表現をどうやってみつけるかというのが、機械学習の最前線の課題のひとつだ。
12. 相関は因果を意味しない。
これ、耳にタコができていると思うけど、ここで質問。学習器による結果が因果関係として解釈されているの、みたことありませんか? あれは間違いなの? 仮に間違いなら、なぜみんなこぞって間違えるの?
予測モデルをつくる目的は、たいていの場合、行為を導くことにある。ビールとおむつが一緒に売れているんなら、並べて売れば売上が上がるかな、なんて思うじゃないですか。本当にそうなるかどうかは実験してみないとわからない。でも、観察によって得られる相関は、ありうる因果的結びつきのサインであり、さらなる検討のためのガイドなのだ。
この世界に真の意味での因果関係というものがあるのかどうか知らないが、実務的にいえば、機械学習にとってのポイントはふたつ。我々は相関だけじゃなくて行為の効果を予測したいのだということ(それを「因果的」と呼ぶかどうかは別にして)、そして、もし実験ができるんならなんとしても実験すべきだということだ。
以上だ。諸君のさらなる精進を期待するぞ。チャオ! [←とは書いてないけど、まあそういう雰囲気のことが書いてある]
論文:データ解析(2015-) - 読了:Domingos(2012) 機械学習について知っておきたい12の事実