森博嗣の思考術とでも言うべきか.あとがきには仕事術に関する本を書いてくれと頼まれたとあるが,元研究者の著者としてはその二つは同義だろう.本書は「抽象的思考」を軸に,著者が世の中のあらゆる問題に対してどう考えていくのかといったことが丁寧に解説される.とは言うものの,人の脳みその中で行われる捉えどころの無いものを,直接文字として起こすことはできない.本書においても,方法論として述べられるところはあるものの,基本的には森博嗣本人が「どのような考え方であるのか」ということが中心となる.しかしながら,それはアプローチの方法であり,問題の定義の仕方であり,問題に対して自分がどう接していくのかということに繋がる.何も突拍子もない思考の跳躍をしているわけではなく,問題を一歩引いて眺めたり,多面的に捉えたりと,そのアプローチには「枠」があり,それが抽象化である.

さて,本書で個人的に一番面白かったのが,著者が思考というものを「庭」に喩えている最後の章だ.抽象的思考というものを抽象的に捉えたらということを突き詰めた結果,著者は趣味のガーデニングに行き着いたようだ.ガーデニングは思いの外難しいらしい.思い描く理想の庭を人工的に作っても,植物はいずれ朽ちてしまう.どれだけ手を加えても,時間の流れには逆らえない.しかし,その摂理に虚無的になるのではなく,継続して何かし続けることで,その行為がまた新たな結果を生む.そういった論理では測れない「自然」的な要素が,著者の考える思考の本質なのだという.自分の思考を育てるという意味で,地道な努力によって自分の「庭」を作っていくほか無い.それは,人に強制されたり刷り込まれるものではなく,自発的なもの,結論が出るまでに時間を要するもの,人の一生をかけて理想に近づけていくというものであるというのが著者の思考術である.



はじめに

Machine Learning Advent Calendar 2013の15日目を担当する@yag_aysです.専門はバイオインフォマティクスという計算機を使って生物学をする分野で,生モノではなく遺伝子の文字列相手に格闘している大学院生です.今回は初心者の人を対象に,なるべく数式を使わずにEMアルゴリズムについて解説してみたいと思います.

EMアルゴリズムは,SVMやニューラルネットワークといった華々しい機械学習の手法の一つではなく,機械学習の中で使われる尤度最大化という一部分を担当するアルゴリズムです.そのため多くの人にとってEMアルゴリズムは,それ単体を使ってみたりだとか独自に改良をしたりするような対象ではないでしょう.でも,EMアルゴリズムなんて仰々しい名前が付けられているだけあって,いざ自分の仕事に組み込む場合には中身を理解していないと「なぜEMアルゴリズムを使ったの?」であったり「それを使うと何が嬉しいの?」といった質問が来たときに困るし,とりあえず概念だけでも一通り理解しておきたいと思う人もいると思います.そこで今回は,大雑把にEMアルゴリズムを理解することを目的に,細かい定義やら数式は抜きにしてイメージで覚えられるような解説を書いてみました.まあ結局PRMLの受け売りなのですが,紙の上で見るよりかは分かりやすくしたと思うので勘弁してください.

  • この記事の対象となる人
    • EMアルゴリズムについて聞いたことはあるけどよく分かっていない人
    • 例えば「これEMアルゴリズム使ってるけど,局所解に落ちてるんじゃない」って言われたとして,???ってなる人
  • この記事の対象ではない人
    • 「パターン認識と機械学習」(PRML)下巻9章を読み通した人
    • イメージと聞いて情報幾何の話だと思った人

EMアルゴリズムとは

EMアルゴリズムは,潜在変数が存在する時の尤度関数を最大化するアルゴリズムです.機械学習の文脈では,よく混合ガウス分布(GMM)などの潜在変数を用いたモデリングの際に用いられます.PRMLで言うところの下巻9章「混合モデルとEM」ですね.また,今回のMLAC 2013ではm_ishihataさんの記事でも出てきますので,何に使うのかピンと来ない人はそちらも参照してもらえればと思います.

ここで覚えておいて欲しいのは,尤度関数を最大化するということです.確率的な機械学習の手法を使っていると,ときどき尤度関数というものが出てきます.特にEMアルゴリズムのような潜在変数が存在する時には,尤度関数は数式には書くことができても,実際にそれがどういう形をしていてどの値で最大になるのかといったことは全く予想ができません.尤度関数に適当に数字を入れれば値が帰ってきますが,それをパラメータすべてについて計算することは現実的には不可能です.そういった条件でどうにか上手いこと計算して効率よく最大値を求めたいといったときに,EMアルゴリズムは使われます.

イメージで理解するEMアルゴリズム

前置きはこのくらいにして,では実際にEMアルゴリズムが何をしているのかをスライドで見てもらいましょう.なお,これはあくまでイメージですので,実際にはデータ数に依存する高次元の空間ですし,EMアルゴリズムの計算途中で対数尤度関数がこのように図示できるわけでもありません.その点は注意してください.なお,以下の解説はPRML下巻9章の図9.14 (P.169)を参考にしています.

さて,PRMLの図を動かしてみたという感じですが,どうだったでしょうか?途中に少し記号を書いてしまいましたが,あまり気にしないでください.EMアルゴリズムの各ステップを更新していくことで,対数尤度の山を徐々に登っていく様子が何となくつかめたと思います.初期値だったパラメータも,と更新されて,尤度関数を最大化するパラメータが求められたことがわかります.

EMアルゴリズムにおける下界

とは言うものの,下界って何だとかどうやって計算するんだとか色々あやふやなところがあるので,その辺を少し補足しておきましょう.下界(Lower Bound)とは,その名の通り対数尤度がここよりも小さくならないということを表しています.EMアルゴリズムでは,この下界というものを使ってだんだん底上げしていくことで対数尤度を増加させていくという感じです.Eステップでパラメータを固定したときの下界というものを求めて,Mステップで潜在変数の分布を固定したときの下界と対数尤度の値が同じになるように下界を押し上げます.あとはこれの繰り返しになるのですが,必ず下界よりも対数尤度は上にあるので,決して対数尤度が小さくはなりません.こうやってEMアルゴリズムは対数尤度を最大化していきます.

下界の求め方も今回は数式を使わずに説明するということで,対数尤度式からアレコレ計算すると出てくる程度に捉えておいてもらえればと思います.例えば混合ガウス分布にEMアルゴリズムを適用する場合だと,Jensenの不等式を使って数式の変形することにより下界は求めることができます.下界と対数尤度の差が実はKLダイバージェンスになっているという話もあるのですが,潜在変数の分布について話してないのでここでは割愛します.詳しくはPRMLの数式を追ってみてください.

イメージで分かるEMアルゴリズムの性質

ここからは,EMアルゴリズムで注意しなければいけない点を解説します.先ほど紹介したイメージを持っていれば,数式を使わずともEMアルゴリズムの持つ問題点を指摘できるはずです.

各ステップを繰り返す必要がある

当然ですが,EMアルゴリズムはEステップとMステップを繰り返す必要があります.EMアルゴリズムが適用できる問題ならば各ステップの計算自体は簡単ですが,パラメータや対数尤度値がある程度収束するまでは,計算し続けなければいけません.

初期値に依存し,局所最適解に落ちることもある

先ほど示したイメージでは,下界を引き上げていく際に二次関数のようなものの頂点と対数尤度関数を行ったり来たりしていました.ということは,きちんと勾配にしたがって最大化してくれるという保証がある一方で,それらがある程度一致したところでパラメータは更新しようがないということになります.そのため,EMアルゴリズムは初期値によっては局所最適解に落ちる可能性があります.

まとめ

いかがだったでしょうか?この記事で少しでもEMアルゴリズムのイメージがつかめてもらえれば幸いです.そうすれば,PRMLなどの数式の出てくる参考書を読んでも,EMアルゴリズムというものが一体何がしたいのかといったことが理解しやすくなるんじゃないかと思います.

少し個人的な話になりますが,私自身はこうやって模式図やイメージを実際に頭のなかで組み立てると,とても理解が捗ります.私が機械学習の勉強をするときにこういうことを意識しはじめたのは,PRML復々習レーンで第3章の線形回帰モデルの冒頭を発表したときでした.そのときには3.1.2の「最小二乗法の幾何学」という項が一体何を言っているのか全く分からず,発表の際に堂々と「分かりませんでした!」と言ったことをよく覚えています.その時に発表の際に参加者の皆さんに教えていただいたおかげで,最小二乗法の理解が一気に深まったように思えました.よくわからない数式の最小化という漠然とした状態から,数式の各項が何を表していて,何を最小化するのかということまで具体的に理解できたのはこのときでした.こういった感覚はPRMLを読むうちに何度もあり,自分の中できちんと理解に落としこむことの重要性を実感しています.今回の記事では,その一つとしてEMアルゴリズムをイメージでつかんでもらえるような紹介の仕方をしてみました.勿論のことながら,自分で自由自在に使いこなすくらい理解するにはきちんと数式を追わなければいけないですし,図式としてイメージできないことも多々あります.しかしながら,どんな難しいアルゴリズムや手法でも,やってることは絵にかけるほど単純なのだというリラックスした感覚で臨めば,意外と理解につながるものだと思います.機械学習の勉強で壁にぶち当たったときは,ぜひ図を書いたり具体的な絵にして考えなおしてみると上手くいくかもしれません.

参考



本書は,地元岡山県北部で猟師になった著者が,猟銃や罠などを使ってイノシシやシカ,鳥などの動物を狩る「リアル猟師奮闘記」だ.実際に山に入って狩猟をするのは勿論のこと,狩猟仲間やベテランとのやり取りや日々の生活なども描かれる.

最近めっきり漫画を読まなくなってしまったのだけれども,ネットで評判になってる本書を見てたまたま買って読んでみたら,これがなかなか良かった.絵やコマの割り方が細かくないため素直に物語や知識を追えて,なおかつ実録モノというところが,個人的に気に入った要因だと思う.変に説教臭く無いのも好感が持てる.それでいて本能的な肉への欲求であったり,家畜化されていない動物を仕留めそして食べるという行為の心理的な変化を感じ,料理に化けるときの喜びのようなものがダイレクトに伝わってくる.要所要所に挟まってくる日本の狩猟のシステムであったり,狩りの方法や先人の智慧なども非常に興味深い.知的好奇心も満たされつつ一般人の日常では味わうことのない世界を覗くことができて,個人的には満足度の高い作品だった.狩猟時期が限られていることもあって新しいネタがどんどん出てくるわけでもないようだが,次のシーズンの狩猟の成果に期待したい.



分子ビューアのPyMOLをインストールしたので,そのときのメモ.今回は無料版をコンパイルするということでMacPortsからインストールしたのだが,FinkやHomebrewからもインストールすることができるようだ.

MacPortsによるインストール

通常のMacPortsのインストールの手順と同じで,以下のようにすればインストールすることができる.

1
$ sudo port install pymol

tclのバリアントによるエラー

のだけれども,自分の環境でMacPortsからそのままインストールを行うと以下のようなエラーが出た.

1
2
3
4
5
6
7
8
9
$ sudo port install pymol
--->  Computing dependencies for pymol
--->  Fetching archive for pymol
Error: org.macports.archivefetch for port pymol returned: tcl must be installed without +corefoundation.
Please see the log file for port pymol for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_science_pymol/pymol/main.log
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets
Error: Processing of port pymol failed

エラーログを見ると,どうやらtclのインストールの際にcorefoundationというバリアントが付いているせいでエラーが起きているようだ.MacPortsで入れたtclを見てみると,以下のようにcorefounderとthreadsのバリアントが付いていることが確認できる.

1
2
3
$ port installed tcl
The following ports are currently installed:
  tcl @8.6.1_0+corefoundation+threads (active)

この問題は既に報告されているようだが,tclを再インストールせずにエラーを回避するのは今のところできない模様.ここにも書かれている通り,tclはRなどの他のソフトウェアでも使用するものなのでなるべく弄りたくは無いのだが,今回はやむを得ない.

ということで,以下のようにtclを一度アンインストールして,バリアントを変えた状態でインストールしなおす.tclの依存関係にある他のプログラムも一度消さなければいけない.

1
2
3
4
5
6
7
8
$ sudo port uninstall py27-pmw
$ sudo port uninstall py27-tkinter
$ sudo port uninstall tk
$ sudo port uninstall tcl

$ sudo port install tcl -corefoundation
$ sudo port install tk -quartz
$ sudo port install pymol

アンインストールするpy27-pmw,py27-tkinter,tk,tclはそれぞれ依存関係で繋がっているので,この順番でアンインストールしないといけない.また,py27-pmwとpy27-tkinterはpymolを入れるときにdependenciesの関係で自動で入れてくれるので,アンインストールした後に明示的にインストールしなおさなくても良い.

これでPyMOLがインストールできるはず.

余談

PyMOLを動かすにはXQuartzが必要になるので,あらかじめインストールしておいたほうがいいだろう.

環境

  • Mac OS X 10.9 Mavericks
  • PyMOL Version 1.6.0.0

参考



この章のまとめ

この2章では,前回のようにモデルとなる大腸菌における様々な数や性質を紹介した後に,生物を構成する構造を大きさのオーダーごとに階層に分けて,各階層ごとの特徴について述べている.単に生物の構造を列挙しているだけに見えるが,それぞれがどの大きさレベルでの話をしているのかを把握し,それらの関係性を理解することが重要となる.ある構造を形作る小さな構造の集合という視点で眺めれば,生物の持つ複雑さを単純化して理解することができる.

大腸菌の概要

モデル生物としての大腸菌

大腸菌は以下の理由により実験的に扱いやすく,分割できる最小単位である単細胞の生物としての標準的な「ものさし」として利用が可能である.

  • 採取が容易
  • 好気条件下で増える
  • 実験室での培養が可能で,生育環境も変えやすい
  • 変異体の作成が容易(遺伝子操作)

実際に大腸菌に含まれているタンパク質の測り方

代表的な方法として,2次元ポリアクリルアミドゲル電気泳動により細胞内に入り混じったタンパク質を分離することができる.

  • 横方向:pH:電場の印加
  • 縦方向:分子量:電荷を持った界面活性剤に固定させる

生物学的構造を調べる実験手法

  • 計測方法
    • 対象とする構造との相互作用を測る
    • 対象とする構造に力を加える

具体的には,以下のような実験がある.

  • 光学顕微鏡
    • 特定の構造上に分布した蛍光物質から出る光を計測する
  • 原子間力顕微鏡
    • 表面を走査して構造の外形を計測する
  • 電子顕微鏡,低温電子トモグラフィ
    • 試料に放射した電子線やX線が散乱する様子を計測することによって内部構造を再構成する

大腸菌のスケール

図表参考.これから先はズームインしていく段階とズームアウトしていく段階をそれぞれ追いつつ,それらが成り立つ上での構造を詳しく見ていく.

様々な細胞とその構造

まず細胞からスタートする.ひとえに細胞と言っても,その大きさや機能は様々である.先ほど扱った大腸菌以外にも,単細胞の真核生物であったり多細胞生物の機能ごとに分化した細胞などがある.

  • 原生生物
  • 植物細胞
  • 出芽酵母
    • 単細胞の真核生物のモデル生物
  • 赤血球,線維芽細胞,ニューロン,網膜桿体細胞
    • 高度に専門化した細胞

スケールを下げて眺める

細胞小器官

細胞小器官が集まって細胞を構成している.

  • 小胞体
  • ゴルジ体
  • ミトコンドリア
  • リソソーム

これらに加えて,特定の機能に特化した細胞は,他の細胞にはない高度に専門化した細胞小器官を持っている場合がある.

生体高分子集合体

生体高分子集合体が集まって細胞小器官を構成している.

  • タンパク質,核酸,糖,脂質などが集まった通常の複合体

    • 10nmスケールの生体高分子の集合として,重要な機能を持つ
    • e.g. ヌクレオソーム,核孔複合体,レプリソーム,リボソーム,プロテアソーム,ATP合成酵素
  • 特定の高分子のユニットが連なった,らせん複合体
    • 同じ構造単位が繰り返され幾何的構造を取る
    • e.g. 微小管,細菌のべん毛,タバコモザイクウィルス,コラーゲン繊維,DNA

これらの高分子集合体が集まって,特徴的な細胞内構造を取ることもある.

  • 小胞体
    • 小胞体膜とリボソーム
  • 飛翔筋肉
    • 筋原線維(ミオシンフィラメントの集合)
    • ミトコンドリア
  • 上皮細胞
    • 微繊毛

また,ウィルスは生体高分子集合体の中でも特殊な分類に入る.独立した複製という細胞としての基本機能は持たないものの,宿主に寄生して自己増殖ができるという特徴を持つ.

  • キャプシドの多様性

    • 20面体のタンパク質の殻で,中にウィルスの遺伝物質が入っている
  • HIV

生体高分子

生体高分子が集まって生体高分子集合体を構成している.

  • タンパク質
    • アミノ酸の配列
    • 球と棒による表示,空間充填表示,リボン表示などの表現方法がある

スケールを上げて眺める

多細胞性

単体で生きることのできる細胞が集まることでコミュニケーションを行い協力する.

  • ストロマトライトの原始的なコロニー
  • 細菌のバイオフィルム
  • 粘菌の移動体と子実体

多細胞生物

多細胞生物は以下の3つの要素を獲得することにより,細胞の集合体としてより大きく多機能な生物個体を形成することができる.

  • 多細胞生物の細胞の大きさと複雑さの3つの要素
    • 大きな細胞共同体を構造的に支える細胞外マトリックス
      • e.g. 結合組織や上皮シート
    • 同じゲノム情報を持ちつつも別の機能を演じることができるような専門化
      • e.g. 上皮細胞やニューロンなど
    • 細胞が互いにコミュニケーションを取るための精巧な機構
      • e.g. ニューロンにおけるシナプス

個々の多細胞生物

生物個体を超えたさらに高次のレベルとして,ヒトと,ヒトの体に存在する微生物細胞群の関係も生態系として考えられる.