武器としての交渉思考

武器としての交渉思考 (星海社新書)

武器としての交渉思考 (星海社新書)

(2014-01-26読了)

武器としての決断思考 と同時に買って半年ほど放置されていたので読んだ.

1つ目の大切な概念としてBATNA (Best Alternative To Negotiated Agreement) という概念が出てくる.すなわち現在の合意条件に対して最善の選択肢である.たとえば,店頭で見かけた商品がAmazonでより安い値段で売っていた場合にはそのBATNAを交渉材料として使える.交渉を始める前に多くのBATNAを用意しておくのが交渉を有利に進める上では大切.

裏を返せば「BATNAを一切持っていない」ことが相手にバレると足元を見られてしまう.何かの購入に関しては値下げは期待できないだろう.

相手のBATNAを知り,相手に自分のBATNAを悟られないことが基本原則.一方で自分のBATNAを提示することで交渉を有利に進める場合には,相手が自分のBATNAをきちんと認識できるよう伝えるべし.

もうひとつの概念として ZOPA (Zone Of Possible Agreement) を認識すること.もしかしたら,お互いの希望にZOPAが存在しない場合がある.そんな状況で交渉を進めてもお互い疲れるだけ.

3つ目はアンカリング.最初の提示条件によって相手の認識をコントロールすること.これには大統領選の写真利用の話が出てくるのだけれど,「トムソーヤのペンキ塗り」もある意味のアンカリングなのではないか.他の例としては,失敗をした際に間違いの責任追及の話ではなく,解決策の具体案を出すことによってそちらに論点を集中させるという方法.アンカリングは普段から使えると思うので,こっそり練習していこう.

あと真ん中あたりで書いてあった "就職活動の場合は採用担当に「自分を取らないと損」という判断を下させる交渉である" というところは本当にそう思った.歳を取って学生さんたちと話していると「〜したい」「〜ということがやりたい」という言葉はよく聞いて,「自分が採用担当だったらそんなこと言われて採用したいと思う?そもそも採否の判断ができないよね」というようなコメントをした記憶がある.

社会に出て驚いたのは「相手にYES/OKと言わせるための道筋を意識していない」人が多いということ.自分の子供もそうなってしまうのかなぁと思うと,物をねだられたら「なぜ親がそれを買い与える必要があるのか」ということを説得させるように教育しようか.それはそれでたいそう理屈っぽい性格になりそうだけれど.

本書はよくまとまっており,良書だと思う.しかし,この本を読んで目からうろこが出てしまう人はある意味危険信号かもしれない.

というようなことを書いて武器としての決断思考の読書記録を読みかしたら,同じような締め方をしており,本人はそのことをすっかり忘れていた.おじいちゃんそれ何度も聞いたわよ状態である.

メモ

  • ソクラテスメソッド (p.7)
    • 答えのない問いを与えてとことん議論する教育
  • パクタ・スント・セルヴァンタ (合意は束縛する)
    • 法の基本思想
  • エスタブリッシュメント層から支持されろ
    • 三木谷氏と堀江氏の比較
  • ロマンとソロバン
    • ソロバンなくしてロマンは実現せず
    • 恒産なくして恒心なし (孟子)
  • スタンフォード大学スタンフォード鉄道王の名前
  • 譲歩の条件
    • 1. 無条件譲歩は絶対しない
    • 2. 「相手にとって価値が高いが,自分にとって価値が低い条件」を譲歩の対象とする
  • いまいる組織で秘密結社をつくれ
  • "Do your homework" (p.328) by ジム・ロジャース

ヒラノ教授の論文必勝法

(2013-01-06読了)

好きなヒラノ教授シリーズ最新刊? ヒラノ教授シリーズとは違うけれど今野氏の著者は すべて僕に任せてください 以来.

以下,適当なメモ.

OR分野では情報系と異なりジャーナル重視であるという点で異なるものの,あとはおおむね参考になる内容.レフェリーに多少蹴られても何が役に立つかわからないからとにかく投稿しなさいという論調.線形計画法の父であるDantzigが線形計画法の考案した当初,フォン・ノイマンとのディスカッションを通じて双対定理が成立することを予想し,その後証明をレポートにまとめたが,ジャーナルにするまでもないと投稿しなかったという.その後KKT条件で有名なキューン,タッカーとゲールが独自に双対定理に関する証明を論文発表をしてしまい,歴史上彼らが発明したことになってしまったという.

偉大なOR研究者なのだけれど,自身をエンジニア (工学研究者) と呼んでいるのが印象的.自分はエンジニアだから100年後に役に立つことではなく,今役に立つことをやっているのだ,というような表現が出てくる.

あとは研究は運の要素が強いので,結果が出ない (スランプが続くことをスプランと呼んでいるらしい) 時期にいかにそれをしのぐかということが大切ということが書かれている.

いやはやしかし,かなり謙遜している部分があるが,カーマーカー特許 (線形計画法カーマーカー法) の特許成立無効の訴訟を起こしたり,ジャーナル投稿にあたっては編集長とバトルをしたりと,非凡な行動力とエネルギーを持った方だと再認識.

"独創性は20歳でピークを迎えて以後減少して70歳で0になる.一方20歳で0だった分析力は時間とともに増大する,研究者の生産性は両者の積が最大になる45歳でピークを打ち,その後単調減少して70歳でゼロになる (p.157)" というノーベル物理学賞を受賞した江崎玲於奈博士の言葉を引用しており,30歳になってだいぶ自分の頭が変わったなと思った自分はなるほどと思った.

その他のメモ

  • 拙速をよしとする
    • 巧遅は拙速にしかず,を心がけようと思った
  • 謦咳 (けいがい) に接する
    • 今振り返るとそう思う

2013年を振り返る

今年は抱負をブログに書いていないので抱負の振り返りはなし.ただ,30歳を迎えていろいろ心身共に変化があったのでそれはまた後日時間を見つけて書きたいと思う.

とにかくいろんなものが確実にしんどくなっており,確実に頭が悪くなっている.なにより時間泥棒にけっこうやられている模様で,自分で使える時間が独身自体の1/3くらいになった感覚がある.

今年はとにかく無駄を省くことに注力し,なんとかアウトプットにつなげるようにしたが,振り返ってみると,やはり無駄な時間の使い方をしていたように思える.このままずるずるとやられるのは悔しいので,なんとか時間泥棒に反撃したいところ.

各月の思い出を振り返ってみる.うーむ薄い.

1月

  • 休み明けから知財関係の処理などバタバタ.社内展示会に向けて戦闘モード.
  • 1月の記憶はほとんどない.

2月

  • 社内展示会本番を迎える.2月も記憶がほとんどないが,業務遂行という意味では超絶なパフォーマンスを発揮した気がする.のちにこれが戦争ボケを引き起こす.
  • 体制が変わり,若いメンバー複数人の面倒を見る立場になる.自分の面倒すら見れないのに.毎週個別ミーティングを実施することで世の中の指導教官の偉大さを知る.これ,無理です.ただ,指導する側は勉強量が増えるのでその点では良い.

3月

  • 言語処理学会@名古屋.台湾ラーメンを3回食べる.同期のNが体調を壊す.夜中にS先輩に味仙矢場店に呼び出されたのは良い思い出.ネタの種を仕入れる.
  • 久々に英語論文を書いて某Workshopに投稿.

4月

  • 1-2月に追い込んだツケで少し遅い戦争ボケ状態が来た.これ以降頭にもやがかかった状態が続く.
  • 業務内容がかなり変わり,勉強と論文を読む日々.
  • 共著者の論文フォロー.その甲斐あってか某賞を受賞.共著論文の受賞は自分が主著で受賞するのとは違った嬉しさがあることを知る.

5月

  • WWW2013@ブラジル.ぼっち飯を食べようとしたところ3月の言語処理学会で会ったIさんとばったり.トップカンファレンスの空気に触れる.論文上でしか会ったことがなかった有名人たちがそこらへんにいた.
  • ブラジルにて30歳を迎える.
  • 帰国以来6月中旬まで謎の咳が止まらなくなる.

6月

  • JSAI2013@富山.還暦を昨年迎えた指導教官に富山ブラックを食べさせ,あまりのしょっぱさに自分は残すというゆとりっぷりを発揮.先生申し訳ありません.夜はT研究室のみなさまと飲んだり.
  • 富山から直接移動した京都の展示会で後輩の展示お手伝い.なぜか自分の写真が新聞に載り,母親に自慢したところ「これアンタの記事じゃないよね?」と看破される.
  • 共著者の国際会議論文フォロー.自分の論文より時間をかけた気がする.これくらい自分の論文にも時間をかければ,と思った.
  • SEXI2013読み会開催.当初はこんな勉強会あっていいのか? という感じであったが,終わってみれば壮絶な盛り上がりを見せた.ぜひ来年も開催したい.(SEXI2014が存在すれば,の話であるが)
  • 目覚めがよくなるというグリシンなるサプリメントを摂取するようになる.初めの数日は明らかに目覚めがよくなった.

7月

  • ICML2013読み会に参加&発表.どうやら世間的にはJubatusはPFI社による単独プロジェクトという印象があるらしい.まぁそうだろうな.
  • 夏休みに風立ちぬを見に行く.泣いた.「創造的人生の持ち時間は10年だ」という言葉にぞっとする.僕の風はまだ吹いているのだろうか?
  • 夏休みの家族旅行中にスマホを海水に水没させる.海水が悪かったのか,電池を変えても起動せず,メモリ復旧サービスでも吸出しができなくなった.いろいろショックであったが,別に電話帳がなくても人生困らないということを知る良いきっけかになった.

8月

  • 人生初コミケ.子供を連れて行こうと思ったら妻に全力で止められる.結果的に連れて行かなくてよかった.本当に暑い.後輩の出店に顔だして帰る.
  • 夏休みにひとりで谷川岳に日帰り登山.楽しかったけれど超疲れた.ひとり旅はとても良いリフレッシュになった.来年もどこかにひとり登山したい.行きに風立ちぬの原作のひとつ「菜穂子」を読む.だいぶ話が違うなぁ.

9月

  • 新規テーマでごりごり実験.落ち着いてコードを書ける幸せを噛みしめる.
  • 妻の親戚がいる帯広を訪れる.義理のおじに銀の匙のモチーフになった帯広農業高校を案内してもらう.人生二度目のばんえい競馬.やはり迫力があって楽しい.
  • エリアダス終了.いろんな想い出が走馬灯のごとく(ry

10月

  • 妻の職場復帰に伴い子供を保育園に連れて行く日々が開始.朝ちゃんと起きるようになり,高校生以来の規則正しい生活を送る.
  • IBISMLチュートリアル参加.@haraponさんたちと担担麺を食す.久々にS君に会う (実に3年ぶり?)

11月

  • DBS研->WebDBF@京都にて発表.ひさびさの研究発表.K先生に質問攻めにあう.WebDBFでは久しぶりの懐かしいメンツに会う.
  • 11月29日 (イイニクの日) には1日2回焼肉を食う.夜は大好きなU氏を囲んでの焼肉会.

12月

  • 北大出張.とても楽しい時間を過ごす....が帰宅して体調崩す.
  • 仕事納めも近いタイミングで急性胃腸炎を患う.風邪ひいてばかり.
  • 2回目の風立ちぬ.ガラガラの映画館のど真ん中でポップコーンをむさぼりながら見る.1回目より早いタイミングで泣いた.もうスクリーンで宮崎駿作品が見れないと思うと感慨深い.
  • ようやく前の前の携帯から電話帳をコピーして大体復帰した.4か月間電話帳全くなしで困ったことは義理の両親に連絡すること必要が出たときくらいだったので,携帯が必要ないのではないかと痛感した.

2013年のまとめ

とにかく歯がゆい一年であった.いろんな意味で.自由に使える時間が極端に減った.家庭的な意味で.

とうとう30歳を迎えてしまった.年齢が関係しているのかわからないが恐ろしいほど体力と気力が落ちた.頭がはっきりしている日が少なく,記憶力もだいぶ低下した実感がある.このまま線形オーダーで脳機能が低下していくと5年後にはスマホを操作できなくなると思う.30歳になっていろいろ感じたことがあったのでそれは後日何かの機会にまとめたいと思う.

子供が保育園に通い始めてからとにかくよく風邪を引くようになった.噂に聞いていたことが現実になり,辟易している.子供はもちろんかわいいが,生産性の観点のみで考えるとマイナスでしかない *1.このマイナスをうまく無視できるようなスタイルを作ることが目下の課題.

ここ2-3年目覚めがすっきりしない日々が続いており,グリシンなるものを飲むようにした.今のところ継続して飲み続けているけれど,最初の方に実感した効果はなくなっているような気がする.

論文を読む量は昨年比で増えたものの.新しくものを知るという経験が明らかに減っているような気がする.たとえば,問題に対してxxというアプローチで解いていたとしても,頭の中でyyというアプローチでも定性的には同じ効果得られるんじゃん? というような感想を持ってしまい,xxアプローチ自体に感動をあまり感じなくなったということが影響している気がする.

趣味の観点ではカメラは相変わらずぼちぼち撮る感じ.今年はいろんなところに行ったのでそれなりに良い写真が撮れたと思う.新しい趣味として昨年末から万年筆にハマり始めた.昔にも一瞬はまったことが2回ほどあったのだけれど,とうとう本格的なハマり方.年末にふとしたきっかけでインクにもこだわるようになり,いろいろ困っている.まぁ書くことは悪いことではないので,これは来年も引き続きぼちぼち続けていくのだと思う.

要約すると「おっさん」になった一年であった.

*1:間接的なプラスは多々あるのだろうがは検証が難しいので無視する

matplotlib.mlab.bivariate_normalの使い方

ML Advent Calendarの記事を書くための実験に二次元ガウス分布確率密度関数が必要になってmatplotlib.mlab.bivariate_normalの存在を知って使っていたのだけれど,どうもおかしいということに気づいて,引数の意味を勘違いしていたのでメモ.

API Documentを眺めるとこんな感じになっている.

matplotlib.mlab.bivariate_normal(X, Y, sigmax=1.0, sigmay=1.0, mux=0.0, muy=0.0, sigmaxy=0.0)
Bivariate Gaussian distribution for equal shape X, Y.

See bivariate normal at mathworld.

(http://matplotlib.org/api/mlab_api.html より抜粋)

sigmax,sigmay,sigmaxyと書いてあったので分散共分散行列の値を利用して使ってみたけれど,どうもおかしい.自作多変量ガウス分布の密度値と異なる.念のためRのdmvnorm関数で確認してみたところ,どうやら自作関数が正しいようだ.

結局いろいろ確認したところ,引数の意味を勘違いしていたというオチに気づく.分散共分散行列の対角要素はsigmax^2, sigmay^2ということ.すなわち引数に渡す際にsqrtを取ればよかったのだ.引数にはsigmaxyと書かれていたが,正確にはVxyと記述すべきだろう.

使い方サンプルコード

import numpy
import matplotlib
from matplotlib import pyplot
from matplotlib import mlab

mu    = numpy.array( [-2,-2] )
sigma = numpy.array( [[3,1],[1,3]] )

X, Y = numpy.meshgrid( numpy.linspace( -6, 3, 100 ),
                       numpy.linspace( -6, 3, 100 ) )

Z = mlab.bivariate_normal( X, Y,
                           numpy.sqrt(sigma[ 0 ][ 0 ]),
                           numpy.sqrt(sigma[ 1 ][ 1 ]),
                           mu[ 0 ], mu[ 1 ],
                           sigma[ 0 ][ 1 ] )

pyplot.pcolor(X, Y, Z)
pyplot.show()

しかし,関数としても使いづらいので,muをベクトル,sigmaを行列で受け取れるような以下のようなラッパーを自分で書くのがよいと思う.

def 2dgauss_pdf (X, Y, mu, sigma):
    return mlab.bivariate_normal(X, Y,
                                 numpy.sqrt(sigma[ 0 ][ 0 ]),
                                 numpy.sqrt(sigma[ 1 ][ 1 ]),
                                 mu[0], mu[1],
                                 sigma[ 0 ][ 1 ])

近いうちにscipy.statに多変量ガウス分布確率密度関数が追加される予定らしいという情報もチラっと見たのだけれど,develバージョンのdocumentにもそれらしい記述がなかったのでしばらくは自作関数を利用するのがよいと思った.

自分はこのURLのコードを少し改造したものを自分用のライブラリとして利用することにした.

2014-01-08追記

以下の情報によると SciPy 0.14.0.dev-16fc0a から追加されたとのこと

from scipy.stats import multivariate_normal
var = multivariate_normal(mean=[0,0], cov=[[1,0],[0,1]])
var.pdf([1,0])

ビッグデータ時代のサンタ狩り - ML Advent Calendar 2013 最終日

Machine Learning Advent Calendar 2013 の最終日を担当します @sleepy_yoshi です.
ふだんはブログ記事をである調で書いていますが,なんとなく今日はですます調で書きます.あとクリスマスのノリで適当なことを書いているので,ネタをネタとしてとらえていただければと思います.

更新が遅くなり大変申し訳ありません.今年もサンタ狩りに参加していた結果,太平洋上空に逃げたサンタクロースを追いかけてサモアまで来てしまいました.残念ながらサンタを逃してしまったところです.というわけでこのブログ記事はサモアより更新しています.まだこちらはクリスマスです.

...というブログ記事をクリスマスに書いていたのですが,サモアでは通信環境を確保できず,日本に帰国したらこんな時間になってしまいました.


さてオオトリをおおせつかったわけですが,プレッシャーでお腹が痛いです.当初は初心者にもわかりやすくVC理論の素晴らしさを紹介し,Vapnik教を布教したかったのですが,聖夜ということもあり宗教戦争を起こしかねないのでやめました.そもそも自分自身がVC理論をちゃんと理解していません.また,人口が集中している都市部におけるサンタクロースの最適配置問題を今流行りの劣モジュラで解くという話をしようかとも思ったのですが,劣モジュラとかやっぱりよくわからなかったのでやめました.


さて最終日の今日は,このビッグデータ()時代におけるサンタ狩りへの機械学習適用について考えてみたいと思います.大量のデータが利用可能になっている*1といわれている昨今ですが,すべてのデータにラベルづけするのは困難であり,教師あり学習そのままでは,データの増加の恩恵を受けることができません.しかし,ラベルなしデータをうまく使うことができれば,ビッグデータ()の恩恵を受けることができます.

機械学習でいうところの半教師あり学習というアプローチを解説したいと思います.具体的には半教師あり学習の中で混合モデルと呼ばれるアプローチの説明を行います.ただし,手法自体は10年以上前に確立されており,内容としては古いです.今回,混合モデルによる半教師あり学習の解説を選択した理由は混合モデルによる半教師あり学習は,教師なしの混合モデル推定の特殊ケースとして説明できるので,やや混合分布やEMづいている(cf. 8日目,15日目) 今回のML Advent Calendarにふさわしいと考えたためです.

たぶんML Advent Calendarの読者の多くの方は知っている内容だと思うので,その場合にはそっと画面を閉じてください.

はじめに

近年,サンタクロースが増加の一途をたどっています.免許制が施行されてから世界中に公認サンタは増加しており,またクリスマスが近づくと,色めく街に一時的に雇われた傭兵サンタや無免許サンタもはびこります.聞いたところによると,子どもを持つ父親が仕事中に急にスーツを脱いでサンタの衣装に着替えて「靴下にアレを入れないと靴下にアレを入れないと」と意味不明の発言をして仕事を投げ出して帰宅する事案が報告されています.その他「メリークリスマース!」と叫びながらカップルをどついて回る辻斬りサンタも報告されています.

このようなサンタクロースの急激な増加は社会問題になりつつあると,専門家は指摘しています.戦う企業人であるお父さんがサンタ化することにより,会社業務や取引が停滞することで日本のGDP減少に影響を与えます.また,辻斬りサンタは暴力的な行為を行うため,治安の観点からも人々に不安を与えています.

サンタ化する人々は人狼のように自分がサンタクロースになっていることを自覚していません.自覚症状がないため,自然にサンタを減らすことが難しいという問題があります.


しかし,悲観することはありません.我々にはサンタバスターズがいます.普段我々があまりサンタの被害を受けていないと思うのはサンタバスターズのおかです.サンタバスターズは,みなさんの目に見えないところで「サンタ狩り」を実施し,人々の不要なサンタ化を抑制しています.日本,いや世界を守っているわけです.サンタバスターズについては政府の最高レベルの機密情報であり,秘密保護法に抵触するため,残念ながら詳しい話はできません.

我々も何かしらサンタバスターズのお役に立ちたいと思い,サンタ狩りのいちタスクである「サンタ判別」を機械学習によって高精度化することを目指します.

サンタバスターズの朝は早い。サンタは一見すると一般人の様子をしており、本人にもその自覚がないためだ.クリスマスシーズンが近づくとサンタバスターズは子どもがいる家庭の張り込みから開始する.ゴミ出しの時間帯が始まるとサンタバスターズはゴミ袋の中からレシートを探す.ド○キホーテでサンタの衣装など購入していないか確認するためだ.けしていかがわしい目的のためではない.このような理由から変質者として通報されることも少なくない.このようにサンタバスターズは (社会的な意味で) 命がけの行動によってサンタ狩りを実施しているわけだ.

(民明書房刊「聖夜を狩る者・狩られる者」)


それでは半教師あり学習の中でも混合モデルのアプローチについて紹介したいと思います.混合ガウスモデルフィッティングを理解していれば,その特殊ケースとして理解できます.

今回のML Advent Calendarでも8日目と15日目にEMアルゴリズムの素晴らしい解説があるので,これをお読みの方はきっと混合ガウスフィッティングのEMアルゴリズムによる推定は理解していると思います (ニッコリ).

まぁ混合ガウスモデルを理解している人は,すでにこれから話す内容を理解している可能性も高いのですが..

まずはいったん理想的な状況を想定し,ラベルありデータが十分に利用可能な場合 (ケース0) にどうするのかということにいったん触れてから,ラベルありデータが一切利用できない状況 (ケース1) を説明し,その特殊ケースとして一部ラベルありデータを利用可能な状況 (ケース2) において半教師あり学習が可能であることを説明したいと思います.


箇条書きにすると以下の流れです.

  • ケース0: 大量のラベルありデータが利用可能な場合 (理想)
  • ケース1: ラベルありデータが一切利用できない場合 (最悪のケース)
  • ケース2: ラベルありデータが一部利用可能な場合 (現実的な状況)

準備

まず今回は説明のため*2,かなり極端な仮定をおきます.サンタ,非サンタの判別には体重 (x_1) と年収 (x_2) という2つの特徴が判別に有効であり,かつその2次元特徴空間上で,サンタ,非サンタはそれぞれ固有のガウス分布に従うという仮定をおきます((体重と年収を調べる特徴抽出自体が判別そのものより難しいのではないかということは気にしません).

したがって,仮にサンタと非サンタの散布図を描くと以下のようなどっかで見たことのあ
るような図になります.今回はサンタは平均=[-2, -2], 分散Σ=[[3,1],[1,3]]のガウス分布,非サンタは平均=[1,1],分散Σ=[[-2,1],[1,-2]]のガウス分布からランダムに生成した25個ずつのデータを利用しています.少し偏ったサンプル結果が得られるような乱数シードを選択しました.

ケース0: 大量のラベルありデータが利用可能な場合 (理想)

優秀なサンタバスターズたちの手によって十分な数のサンタ,非サンタに対してラベル付与が行われた状況を想定します.この場合には,通常の教師あり学習のアプローチを利用して分類器の構築が可能です.

今回は各クラスが生成される分布を仮定しているので,観測データが与えられた際に事後確率が最大になるクラスに分類する生成モデル (ベイズ識別器とも呼ばれます) による分類を説明します.

ベイズ識別器では,観測データXが与えられた場合に,クラスYの事後確率P(Y|\mathbf{X})が最大となるクラスを選択します.式で書くとこんな感じです.

\hat{Y} = \mathrm{argmax}_Y P(Y|\mathbf{X}) = \mathrm{argmax}_Y P(\mathbf{X}|Y) P(Y)

この予測に必要な情報は,P(\mathbf{X}|Y)P(Y)です.今回はガウス分布を仮定しているのでP(\mathbf{X}|Y=Santa)にはサンタのガウス分布P(\mathbf{X}|Y=Non-Santa)には非サンタの確率密度関数を利用します.クラス事前分布P(Y=Santa)はサンタ,非サンタの割合を利用します.

以下の点だけ覚えておけば大丈夫です.

生成モデルの予測には各分布のパラメータとクラス事前分布が必要

さきほどの散布図に事後確率の差の値に基づいて色分けしたのが下図です.ちょうど0の値である薄いきみどり色の部分が分離線になります.この図ではP(\mathbf{X}|Y)に対応する2つのガウス分布のパラメータは25個ずつの観測点から最尤推定しました.カラープロットは密度関数の値の差を表しています.カラーバーが表す0の値がちょうど分類結果が変化する点です.

このようにデータ点に対して十分な数のラベルが付与されていれば,我々はサンタの分布,非サンタの分布というように別々に分布パラメータの推定が可能となり,その結果を使って分類することができます.

参考までにデータを生成した元の分布で色分けした場合には下図になります.

サンプル数が少ないため,真の分布と最尤推定でフィットした分布の形がかなり異なることがわかりますね.



少し余談になりますが,P(\mathbf{X}|Y) のパラメータ推定に今回はきちんと共分散を考慮したガウス分布のフィッティングを行っています.たとえば,共分散が0であるようなガウス分布を考えると,多次元ガウス分布は1次元ガウス分布の積で表現できます.

2次元ガウス分布の場合ですとこんな感じです.

N(\mathbf{X}; \mathbf{\mu}^{Santa}, \Sigma^{Santa}) = N(x_1; \mu_1^{Santa}, \sigma_1^{Santa}) N(x_2; \mu_2^{Santa}, \sigma_2^{Santa})

共分散が0ということは,特徴空間の各次元が独立であるということを仮定しており,これはいわゆるナイーブベイズ仮説というやつです.ML Advent Calendar 20日目でも紹介されていますよね.ナイーブベイズはテキスト分類の文脈で利用される場合が多いためか,離散分布とセットで説明される解説が多いですが,ガウス分布のような連続分布でももちろん利用可能です.

この記事の最後にナイーブベイズを利用した半教師あり学習についても一言触れますが,それまで基本的にナイーブベイズのことは忘れて大丈夫です.

ケース1: ラベルありデータが一切利用できない場合 (最悪のケース)

さてデータに対するラベルは誰が付与するのでしょうか? サンタのラベル付けには高度な技術が必要となり,なかなかラベルを利用することができません.

そこでまず極端な状況としてラベルありデータが一切利用できない状況を考えます.そのような場合においてどうするかということを考えます.幸いなことに今回は「体重と年収」という特徴空間においてそれぞれ固有のガウス分布に従うという知識が利用可能とします.ただし,それぞれのガウス分布のパラメータ (平均,分散) や事前分布 (混合比) はわかりません.

与えられた知識を利用すると,データ集合に対して混合数2の混合ガウス分布フィッティングをすることによって,なんとなくサンタのガウス分布,非サンタのガウス分布を推定できそうな気がします.

ではやってみましょう.みなさん耳タコの混合ガウス分布フィッティングは,EMアルゴリズムで推定すると以下のアルゴリズムで推定できます.

 Algorithm: 混合ガウス分布フィッティング
     INPUT: ラベルなしデータU, 混合数K
    OUTPUT: K個のガウス分布パラメータ,混合比

1: K個のガウス分布パラメータを適当に初期化する
2: 収束するまで以下のEステップ,Mステップを繰り返す
3:   Eステップ:
       現在のパラメータを用いてUに含まれる全データについて
       K個のガウス分布から生成されてるっぽさ (負担率) を計算する
4:   Mステップ:
       推定された負担率を用いてK個のガウス分布の平均,分散と混合比を推定する.
       混合ガウス分布の場合,負担率を重みとした重みづけ平均,重みづけ分散となる.

ポイントは「各データ点についてどの分布に属しているかわからないため,各分布に属している具合を表す負担率を計算し (Eステップ),その負担率に基づいて分布パラメータを再計算する (Mステップ)」ということです.


混合ガウス分布フィッティングによって2つのガウス分布は推定できましたが,このままではどちらがサンタでどちらが非サンタかわかりません.たとえば,そこに事前知識として「サンタは非サンタに比べて体重も年収も多い」という知識が利用可能な場合には,ラベルを一切利用せずに生成モデルの分類器を構築することが可能です.すなわち分布に対する知識が十分にあれば,事例に対応するラベルは必ずしも必要ないということです.

(脱線ここから)

少し横道にそれます.予測問題を機械学習を用いて解こうとすると,正解ラベルを用意して教師あり学習を用いるンだ,という考え方をしてしまいがちですが,必ずしもそれだけではありません.上述の例のように,問題に対して人間サマが持っている知識を整理して,それらの知識をフルに活用できる形で適用するべきだと考えています.

奇しくも本日最終回を迎えた機械学習はじめようの最終回でも「機械学習を使わずのすすめ」という話題がありました.人間サマの知識を直接活かせる手段があるならば機械学習は使わなくてもよい,というように解釈すると,さきほど申し上げたように人間サマが持っている知識を軸に考える点において同じ考え方だと思っています.

(脱線ここまで)


さきほどのデータについて2混合ガウス分布フィッティングを行った結果を示します.いずれもEMアルゴリズムによって得られた局所解における結果です.わかりづらいですが,各データ点の色が負担率を表しています.また,カラープロットにおいて色が濃くなっているところがガウス分布の密度が高いところです.2つのガウス分布の密度の差に基づいてカラープロットしたので,赤色が濃いエリアと青色が濃いエリアで2つのガウス分布の山を表現しています.

(a)の結果が一番まともです.(b)もなんとなく許容できる結果です.しかし,(c)や(d)はなかなかアナーキーな結果ですね.今回のケースでは,(a)の対数尤度が最大になっており,一番よい局所解を選ぶだけで(a)の結果を選択することができます.しかし,今回は2つの異なるガウス分布からサンプリングされたデータを用いているということもあるので,必ずしも対数尤度の最大化が一番良いフィッティング結果を生み出すとは限らないということを補足しておきます.混合ガウス分布の場合は特異性の問題もありますしね.


ケース2: ラベルありデータが一部利用可能な場合 (現実的な状況)

さて現実的な状況としては,ラベルありデータが一部利用可能であり,ほとんどの観測はラベルなしデータであるという状況が自然です.このような場合には,どんなアプローチが取れるでしょうか?

通常の半教師あり学習では,"ラベルありデータに加えて" ラベルなしデータが利用可能である,というような流れで解説されることが多いですが,今回は逆にラベルなしデータが大量に存在している状況において,"一部のデータにラベルが付与されている" というように解釈して話を進めましょう.

そう考えると,基本的にはケース1の状況と変わりません.やはり2つのガウス分布であるという知識を利用して,混合ガウス分布フィッティングを考えます.

異なる点は一部のデータについては真のラベルがわかっているという点です.さきほど「各データ点についてどの分布に属しているかわからないため,各分布に属している具合を表す負担率を計算し (Eステップ),〜」という説明をしました.しかし,ラベルが付与されたデータについてはどの分布に属しているかわかっています.そのため,負担率を計算する必要がありません.

ラベルありデータについては負担率は固定できる.

ということです.


ではその部分だけ変えて半教師あり混合ガウスフィッティングを考えてみましょう.アルゴリズムに直すと以下のとおりになります.

 Algorithm: 半教師あり混合ガウス分布フィッティング
     INPUT: ラベルなしデータU, ラベルありデータL (new!), 混合数K
    OUTPUT: K個のガウス分布パラメータ,混合比

1: Lを用いてガウス分布のパラメータと混合比を推定する.(new!)
2: 収束するまで以下のEステップ,Mステップを繰り返す
3:   Eステップ:
       現在のパラメータを用いてUに含まれる全データについて
       K個のガウス分布から生成されてるっぽさ (負担率) を計算する
       ラベルありデータLについては負担率を指定されたクラスに固定する (new!)

4:   Mステップ:
       推定された負担率を用いてK個のガウス分布の平均,分散と混合比を推定する.
       混合ガウス分布の場合,負担率を重みとした重みづけ平均,重みづけ分散となる.

何が違うかわかりますか? 変わった部分に(new!)と付けてみました.さきほど言ったようにラベルありデータについては「負担率を固定して」Eステップ,Mステップを計算していることがわかります.

PRMLEMアルゴリズムの説明のところで完全データ,不完全データという言葉が出てきたと思います.教師なしの状況においてはすべてのデータが不完全データですが,半教師ありの状況においては,一部のデータは完全データとして存在するわけです.

改めて言われるまでもなく「そりゃそうだ」という感じですよね.


一部のラベルありデータを利用した場合の混合ガウス分布推定の可視化結果は以下のとおりです.

今回は○で囲まれた各分布3つずつのデータにラベルを付与しました.さきほどの混合ガウス分布フィッティングの結果(a)と変わっていません.しかし,今回の場合にはガウス分布パラメータの初期値がラベルありデータによって決定されるため,(b)-(d)のような結果になることはありません.

本当はラベルを一切使わない状況に比べてよい結果が得られることを示したかったのですが,すべての図を作り直す必要があるためあきらめました.


さて,それでは「ラベルありデータだけ」を利用した場合にはどうなるでしょうか.ケース0においてラベルありデータが6つだけ利用可能な状況です.ラベルありデータのみを用いてガウス分布パラメータと事前分布 (3つ3つなので0.5, 0.5) を最尤推定しています.

こちらはわかりやすく悪い結果になってくれましたね.少し離れた点に対して非サンタラベルを付与しているため,ガウス分布の分散パラメータが大きく推定されました.サンタクラスについてはそれなりにまとまっているデータ集合にラベルが付与されているため,ガウス分布の分散パラメータは小さめです.その結果,事後分布P(Y|X)がひっくりかえる線がへんなところに存在しています.


おわりに

本日は半教師あり学習の一手法である混合モデルについて,混合ガウス分布を例に挙げて教師なしの混合分布フィッティングにおいて,負担率計算の部分を与えられたラベルで固定する,という流れで説明しました.

Nigamら[1]は,テキスト分類における混合分布の半教師あり学習を適用を提案しています.一言でいえば半教師ありナイーブベイズです.Nigamらは分布として多項分布を利用しています.多項分布にナイーブ仮説をすることによって,半教師ありナイーブベイズモデルのできあがりです.

ナイーブベイズ->半教師あり,と説明するよりも混合分布フィッティング->半教師ありへの拡張->分布に対してナイーブベイズ仮説適用という流れの説明の方が理解しやすいかなぁと思ったのが今回の記事の発端だったりします.

なお今回は1クラス1分布の仮定を置いていましたが,当然成立しない状況があります.先述のNigamらも1クラスに複数分布を用意する方法について言及しています.さきほど述べたようにサンタにも公認サンタ,傭兵サンタ,無免許サンタ,辻斬りサンタさまざまな種類がありますから,内部に複数の分布を考えるモデルの方が高性能になりそうです.

教師あり学習にはいろいろなアプローチがあり,混合モデルはその一つです.最初にラベルありデータで分布パラメータを計算してから,EMを回す様子はラベルありデータを使って構築された分類器の予測結果をそのまま新たなラベルとして利用するself-trainingとも似ていることがわかります.

グラフベースの方法ではZhuのGaussian Random Field [2]が有名です.今年ICML2013 Classic Paper Prizeを受賞したことも話題に上がったりしました.グラフベースの半教師あり学習については@niam さんの資料が参考になります.

とたくさんあるのですが,完全にエネルギー切れです.Python+NumPy+matplotlibによる作図にエネルギーを注ぎすぎました*3

まったくもってオオトリに見合わない内容だと思いますが,参加 (執筆) することに意義があると信じてML Advent Calendar最終日の記事をしめくくりたいと思います.ML Advent Calendar幹事の @naoya_t さん.執筆者のみなさま,読者のみなさまありがとうございました.ここまで読んでくださりありがとうございました!

エピローグ

こうして聖夜は終わり,奴らは去った.しかし,やつらはまた帰ってくる.2014年もサンタとサンタバスターズの戦いは続くのだ! 来年は Google Glass にサンタ判別機能を実装して道行く人々をサンタ判別するネタを書きたいと思います! Ok, Glass! それではみなさんよいお年を!


References

*1:本当でしょうか?

*2:魔法の言葉.なんでも思い通りの世界を描くことが許されます.

*3:使い方に癖があるが,慣れてしまえば図の作成を自動化できるので大変便利.カッコイイ図が簡単にできます.

PRML復々習レーン#15に参加して発表してきました

PRML復々習レーン#15に参加してきました.

前回のあらすじ資料を以下にアップしました.


9.3.4と9.4を担当.発表資料を以下にアップ.


割と熱を入れて発表させていただいた.EMアルゴリズムでなぜ対数尤度を増加させることができるのか,ということをかなり丁寧に説明できたつもり.EステップとMステップの意味というもの,Q関数とはなんだろう,というあたりもようやく理解できたので,個人的には満足のいく発表資料.

9章のあとには変分法について付録Dをエクストリームリーディング.へとへと.
この記事も1か月以上経って書いているので,細かいことは忘れてしまった.

ブログ記事アップまでが勉強会で(ry

PRML復々習レーン#14に参加して発表してきました

台風で延期になったPRML復々習レーン#14に参加してきました.

前回のあらすじ発表資料をアップしました.

あとはscikit-learnの素晴らしさについて語ったり.2か月あとくらいに本記事をアップしているのだけれどほとんど記憶にない.ブログ記事アップまでが勉強会ですとはよく言ったもの.