解釈可能なAI
MITのDimtrisがInterpretable AIという会社を(またまた)作ったようなので,中身の論文を読んでみた.簡単なので,学生に説明して実装を依頼したが,論文にバグがあってできなかったようだ.
論文には間違いがあるという前提で実装をしなければバグは見つからない.レフェリーも体裁さえ整っていれば,実際に実装する訳ではないのでミスは発見できないのだろう.
中身は簡単に言うと,数理最適化モデルで最適な決定木を作るというものだ.誰でも思いつきそうな内容で,論文を作るには技術がいる.ちゃんとした書きぶり,尤もらしい結論,ちゃんとした実験が最低限必要だ.
こんな感じでデータを準備する.
depth =2
T0 = 2**(depth) -1
T = 2**(depth+1) -1 #tree index t
Branch = [t for t in range(T0)]
Leaf = [t for t in range(T0,T)]
p = 2 #dim(feature) index j
n = len(y) #data index i
K = 2 #classes index k
X = [[0.1,0.1], [0.2,0.7], [0.3,0.4], [0.6,0.6], [0.7, 0.8], [0.6,0.1], [0.7,0.3] ]
y = [0, 0, 0, 0, 0, 1, 1]
あとは,論文通りのMIPモデルを作れば出来上がりだ.論文
の間違いは論文の式(9),(10)のb_tはb_mにする部分だ.
こういった良く書けていて単純な論文を読むと色々新しいアイディアが湧いてくる.確率的最適化で過剰適合を避けるとか,カテゴリカルデータに対する埋め込みを適用するとか色々ネタが有る.
後者はそのままではMIPソルバーに乗らないが.交互に最適化すれば良い.最適木の変数の一部(分類精度を計算する部分以外)を固定し,埋め込みの重みを最適化し(最初はランダム),次に決定木を構成するMIPを最適化することを交互に繰り返せば良い.
こういった解釈可能なAIは,深層学習などの良くわからないけれど結果だけ良いというアプローチを補完することができる.特に,医療や金融など,よくわからない方法論を適用できない分野には有効だ.
問題は,MIPが重いのでGurobiなどのパワフルなソルバーを使わざるを得ない点だ.重要な意思決定で,なぜそのような結果が出たのかを説明しなければならない応用に対しては,有効なツールになり得る.
課題としては,ちゃんとした実験(論文の実験はあてにならない)と決定木の可視化だ.dtree vizとつながれば良いのだが,学生に期待したい.