機械学習の解釈性とパフォーマンスの両立を目指して:Human-in-the-Loop Interpretability Prior

機械学習、特にニューラルネットワークなどのアルゴリズムを使った場合、出力された結果は何万・何十万次元のベクトル演算の結果であり、人間が直接解釈することは難しい。ニューラルネットワークの解釈性については近年様々な研究が行われている。一般的に解釈性の低いモデルは高い精度を出すことが多く、適度な解釈性と適度な精度のバランスが取れたモデルが必要なケースが考えられる。

この論文「Human-in-the-Loop Interpretability Prior」は機械学習モデルに対して人間がある尺度(論文ではHIS:Human Interpretability Scoreという、人間がモデルに従って入力から出力を予測するのにかかった時間の逆数)を事前確率として、データXが与えられた際にそのデータを最も適切に説明できるモデルMをp(M|X)をMAP推定することにより選択するという手法を用いている。著者らは4種類のデータセットで実験を行っており、タスクごとにreasonableな解釈性を持ったモデルを選択できていることを確かめている。

読んだ感想としてはHISの決め方が果たして、人間がかかった時間の逆数という尺度を使うのは解釈性の尺度として適切なのか?といった疑問や、新しいモデルを作るたびにユーザの評価が必要になり汎用性は低そうに思った。HISを何らかの尺度(例えば計算時間や消費メモリ)によって算出することが出来れば、この手法を人の手を介さずに適用することも可能なのではないかと考える。

大規模データのクラスタリングには Mini Batch K-Means を使うべきという話

タイトルの通りですが、大規模データをクラスタリングする際には単純なK-Means法ではなく、Mini Batch K-Means法を使うべきという話です。

とある大規模データ(150万件ほどの文章ベクトル)をクラスタリングしたいことがあったのですが、単純にScikit-learnのK-Means法に投げてクラスタリングを走らせていたところ、数時間経っても一向に終わる気配がありませんでした。色々と調べていると、大規模データのクラスタリングにはMini Batch K-Means法を使うべきという記述を見つけました。公式ドキュメントによると、大体1万件を超えるデータをクラスタリングする場合にはMini Batch K-Meansを使うべきとのことです。

APIとしては単純にKMeansをMiniBatchKMeansに置き換えれば動きます。理論的な背景としては、論文 “Web Scale K-Means clustering” D. Sculley, Proceedings of the 19th international conference on World wide web (2010)に書かれており、ざっと読んだところランダムサンプリングしてクラスタの中心を計算していくのですが、KMeansとは異なり、各点ごとに中心を逐次的にアップデートしていくことで計算量を減らしています。

論文に載っていた速度比較ですが、圧倒的にMiniBatchKMeansが高速です。図の青がMiniBatchKMeans、赤がKMeans、横軸が時間。

この手法を使ったところ、KMeansでは数時間経っても終わらなかったクラスタリングが、MiniBatchKMeansでは数分程度で終わりました。ということで、大規模データのクラスタリングにはMIniBatchKMeansを使うべきということを学んだという話でした。

RNNのDropoutはどこに入れるべきか?:Where to Apply Dropout in Recurrent Neural Networks for Handwriting Recognition?

タイトルの通り、RNNに対してDropout層を追加する場合、どこに入れるのが適切なのか?と思い少し調べてみました。

ことの発端は、KerasにあるLSTMとGRUの、GPUによる高速化版であるCuDNNLSTMとCuDNNGRUには、dropoutとrecurrent_dropoutというCPU版には存在するパラメータが無いため、これらの層の前後にDropoutを入れても効果あるのかな?と疑問に思ったことが始まりです。

以下のKerasのgithubでこれらのパラメータについての議論が行われており、作者のChollet氏は以下のように述べており、通常のDropoutはRNNに対して効果が無いように読み取れます。https://github.com/keras-team/keras/issues/8935

Recurrent dropout is not implemented in cuDNN RNN ops. At the cuDNN level. So we can’t have it in Keras.

The dropout option in the cuDNN API is not recurrent dropout (unlike what is in Keras), so it is basically useless (regular dropout doesn’t work with RNNs).

Actually using such dropout in a stacked RNN will wreck training.

その後、少し調べてみるとタイトルにある論文「Where to Apply Dropout in Recurrent Neural Networks for Handwriting Recognition?」を見つけたので読んでみました。この論文では、手書き文字認識タスクにRNNを使用して、DropoutをRNNの前、中、後に入れてみて汎化性能を試しています。何種類かのデータセットで実験を行っていますが、結果はまちまちで、傾向としてはRNNの前にDropoutを使うのが性能が良いことが多いが、中、後に入れる場合も性能が良くなることがあり何とも言えない感じの結論となっています。ただ、著者らは複数層のRNNモデルに対しても実験を行っており、その場合にはネットワークの最初と最後にDropoutを入れるのが良い性能の傾向があると結論付けています。

はっきりとした結論は言えそうも無く、結局はタスクによるんじゃないかという感じですが、この辺はやはりディープラーニングはハイパーパラメータチューニング職人の世界であるといわれる一因なんじゃないかと感じました。

 

CNNによる価格予測の論文:「The Price is Right: Predicting Prices with Product Images」を読んだ

タイトルの通り、CNNモデルを利用して、自動車・自転車の画像から価格を予測する論文、「The Price is Right: Predicting Prices with Product Images」を読んだ。

この論文を読んだ動機は、ネットを調べるとCNNを用いて画像を分類するという例は山ほど出てくるが、CNNを用いて画像から何らかの数値を出力するregression問題に取り組んだ例があまり見つからず、ちょっとそういったことをやる必要に迫られたので読んでみた。

自転車と自動車の画像からそれぞれの価格を推定するregressionタスクにCNNを用いた。ベースラインモデルである多クラスSVMと線形モデルに対して同等~高い精度が出た。VGGとMobileNetによる転移学習よりも精度の高いネットワーク構造PriceNetReg CNNを提案している。また、CNNモデルに関して、画像のどの部分が予測に効いているかをVisualizationすることにより示している。

CNNモデルが画像のどの部分に着目して判断を行っているかということをVisualizationしているのが面白い。次はこういった可視化技術の論文を読んでみたい。

まとめスライドはこちら。

The Price is Right Predicting Prices with Product Images_slide

CNNによるセグメンテーション論文:「U-Net Convolutional Networks for Biomedical Image Segmentation」を読んだ

タイトルの通り、CNNを用いて医療画像をセグメンテーションするU-Netというネットワーク構造の論文を読んだ。

2015年に発表されたネットワーク構造だが、その後セグメンテーションでは古典的な内容になっており、いくつか発展形のネットワークも提案されている。

論文のまとめは以下。

U-Net Convolutional Networks for Biomedical Image Segmentation_Slide

不良品予測チャレンジの解説 「Using Big Data to Enhance the Bosch Production Line Performance: A Kaggle Challenge」を読んだ

Kaggleのコンテスト(Bosch Production Line Performance Challenge)としてBoschがデータを提供しているコンテストの解説論文を読んだ。

Using Big Data to Enhance the Bosch Production Line Performance: A Kaggle Challenge

このコンテストは工場の様々なセンサーデータを用いて生産されたパーツの良・不良を判定するもの。時系列のデータとなっているが、この論文の手法だと時系列の影響は特に使っていないようだ。

とにかく特徴量が多いので、カテゴリ変数を一つの数値変数に変換する手法を使ったのち、カラム数を減らしてXGBoostを用いてモデルを構築している。

また、データ量も多くメモリに乗りきらないのでオンライン学習の手法を用いている。

モデルの良さの評価にはMatthew’s Correlation Coefficientという、頻度の低いイベントの評価指標に使えるものを用いている。

所感としては、Kaggleで人気のXGBoostはsparseで大量のデータに対して強いんだなあと感じさせられる。

「Machine Learning – A Probabilistic Perspective」第7章を読んだ

前回の続き。第7章は線形回帰について。このあたりでようやく1/4までたどり着いた。先は長い。

目次は以下の通り。

  • 7 Linear regression
    • 7.1 Introduction
    • 7.2 Model specification
    • 7.3 Maximum likelihood estimation (least squares)
      • 7.3.1 Derivation of the MLE 219
      • 7.3.2 Geometric interpretation
      • 7.3.3 Convexity
    • 7.4 Robust linear regression *
    • 7.5 Ridge regression
      • 7.5.1 Basic idea
      • 7.5.2 Numerically stable computation *
      • 7.5.3 Connection with PCA *
      • 7.5.4 Regularization effects of big data
    • 7.6 Bayesian linear regression
      • 7.6.1 Computing the posterior
      • 7.6.2 Computing the posterior predictive
      • 7.6.3 Bayesian inference when σ2 is unknown *
      • 7.6.4 EB for linear regression (evidence procedure)

線形回帰のMaximum likelihood estimationから始まり、outlierに強い線形回帰の方法やリッジ回帰、PCA、Regularizationなどが説明され、最後にベイズ統計による線形回帰の話が述べられている。

リッジ回帰はペナルティ項が加わった線形回帰。overfitする可能性を減らすことが出来る。数値計算する際にも良い性質があるとのこと。

最後のベイズ推定の部分は、リッジ回帰でpointを推定できるけど、完全なwやσ^2の事後分布を知りたいことがあるのでベイズ推定を使うと良いということらしい。

無料で読めるオライリー公式のデータサイエンス・ビッグデータ e-books

Free Data Ebook Archiveというサイトを見つけた。オライリーが出しているデータサイエンスやビッグデータ関係の電子書籍が無料で読むことが出来る。名前とメールアドレスを入れるとePub, mobi, pdf形式でダウンロードすることが出来る。

ざっと見た感触としては、オライリーの動物が表紙になっている本よりかは短めの内容が多く、技術的なものもあるが理論よりも実運用を意識した内容のものが多いと感じた。

ちょっと気になったのは以下のタイトル。短めの本が多いようなので、機械学習関係の現状を把握したりシステムアーキテクチャの概要を掴んだりするのに良いかと思います。

・The Path to Predictive Analytics and Machine Learning
・Practical Artificial Intelligence in the Cloud(クラウド上でのAIアプリケーションの運用例など)
・Fast Data Architectures for Streaming Applications (ストリーミングデータに対するアプリケーションのアーキテクチャ構成例が挙げられている)