「欠測データ処理」を読んだ

データ分析の前処理における重要なポイントの一つとして、欠測データをどのように扱うかがある。
入門向けの記事だと単純に平均値や0埋めなどを施して、そのまま機械学習モデルに投入する例が多いが統計学的にはこのような単一代入法と呼ばれる手法はバイアスを生じる。
そこで使われるのが多重代入法と呼ばれる手法である。

多重代入法について詳しく知りたかったので、評価の高い「欠測データ処理」を読んだ。

本書では欠測データの種類、単一代入法・多重代入法の理論的な側面とともにRによる実際のコード例も紹介されている。
例えば、一口に欠測データといってもその生成メカニズムとしてMCAR, MAR, NMARなどの種類が存在する。ある調査では経験的に完全にランダムに欠損が生じているデータ(MCAR)は公的統計の調査においては約10~20%程度という結果もある。
MARによる欠損は単一代入法ではバイアスが生じるため、多重代入法を利用するべきである。多重代入法とは欠測データの分布から独立かつ無作為に抽出されたM個のシミュレーション値によって欠測値を置き換えるものである。

最後の「おわりに」の章にある3つの疑問に対する回答が、なぜ多重代入法を使うのかという説明として非常にわかりやすかった。「なぜ複数回の代入が必要なのか」という疑問に対して、複数回の代入を行うことで推定に関する不確実性を代入されたデータに取り入れることで、標準誤差を適切にすることができると書かれている。これによって母集団パラメータの推定を妥当なものとすることができる。

外れ値処理の一手法:Winsorizingについて

機械学習や統計の分野における外れ値処理の手法の一つとしてWinsorizingと呼ばれる手法がある。日本語の解説が少なかったので書いてみる。

手法自体は非常に簡単で、外れ値を外れ値以外の最大値・最小値で置き換えるというものである。表形式データを考えると、単純に外れ値を除去するよりも、データサイズが少ない場合はほかのカラムの情報を有効活用することができる。

ちなみに英語版のWikipediaにはページが用意されている。
https://en.wikipedia.org/wiki/Winsorizing

このページにあった例を見てみると、numpy配列の上下5%のデータを最大値と最小値で置き換える方法が書かれている。

import scipy.stats
import numpy as np 
a = np.array([92, 19, 101, 58, 1053, 91, 26, 78, 10, 13, -40, 101, 86, 85, 15, 89, 89, 28, -5, 41]) 
scipy.stats.mstats.winsorize(a, limits=[0.05, 0.05])

1053が101に、-40が-5へと置き換えられる。
少し考えるとわかるが、単純に外れ値を除去して平均を取った場合とWinsoringをしてから平均を取った場合では値が異なる。

機械学習による化合物テストツールの論文:「PrePeP – A Tool for the Identification and Characterization of Pan Assay Interference Compounds」

PrePeP – A Tool for the Identification and Characterization of Pan Assay Interference Compounds
Maksim Koptelov (University of Caen Normandy); Albrecht Zimmermann (University of Caen Normandy); Pascal Bonnet (University of Orléans); Ronan Bureau (University of Caen Normandy); Bruno Crémilleux (University of Caen Normandy)
https://www.kdd.org/kdd2018/accepted-papers/view/prepep-a-tool-for-the-identification-and-characterization-of-pan-assay-inte

KDD2018の論文読み3本目。Applied Data Science Trackの続き。

製薬分野における機械学習を応用した論文。製薬などの分野で新たな化合物を作った際に、所望の性質を満たしているかを確認する作業がある。
対象物質が増えるとこの作業に非常に多くの時間とリソースがとられてしまう。そこで著者らは化学者向けのツールであるPrePePを作成し、専門家たちがビジュアル的に化合物の様子を探索し、テストの結果予測やその理由などをわかるようにした。

結果としてはiFH(infrequent hitters)と呼ばれるテストに成功しない多数派のクラスをうまく分類が出来ておらず、今後の改良が必要と述べられている。

具体的な機械学習モデルとしては解釈性を持たせるために決定木ベースでランダムフォレストのような形で、予測モデルを作成した。
また、化学の専門家が簡易に使えるように、その界隈で有名なツールを拡張する形でGUI付きのソフトウェアを開発している。

化学の専門知識が足りないためか、なかなかイメージが理解しづらいが、機械学習部分は基本的な内容だった。こういった分野でも機械学習の応用が進みつつあるのだと実感した。

機械学習によるユーザ離脱率の予測論文:「I Know You’ll Be Back: Interpretable New User Clustering and Churn Prediction on a Mobile Social Application」

I Know You’ll Be Back: Interpretable New User Clustering and Churn Prediction on a Mobile Social Application
Carl Yang (University Of Illinois, Urbana Champaign); Xiaolin Shi (Snap Inc.); Jie Luo (Snap Inc.); Jiawei Han (University of Illinois, Urbana Champaign)
https://www.kdd.org/kdd2018/accepted-papers/view/i-know-youll-be-back-interpretable-new-user-clustering-and-churn-prediction

KDD2018の論文読み2本目。産業界の応用事例を集めたApplied Data Science Trackのほうが自分の興味に近いのでそちらにシフトして上から読み始めた。

Snapchatの大規模なデータを集めて、ユーザタイプをクラスタリングにより6種類に分類して、その中の3種類のユーザタイプが平均よりも登録2週間後の離脱率が高いということが分かった。
このクラスタリング結果をもとにして、著者らはユーザ登録後の2週間のデータをもとにして離脱予測のモデルを作成した。

予測モデル作成において、いくつかの課題がある。
データが非常にノイズが多く、変動が大きいため、隠れマルコフモデルのような典型的な時系列モデルでは上手くいかない。また、データは非常にスパースであり、activityの数も非常に偏った(一部のユーザが非常に多くのactivityを行っている)データのため予測が難しいといえる。また、ユーザタイプによって離脱率が異なってくるが、最初の2週間のデータが少ない状態でユーザタイプの情報はそろっていないため、今までのモデルではユーザタイプの情報を使うことはできていなかった。

これらの課題を解決するために、複数のLSTMを組み合わせた予測モデルを用いて離脱率の予測を行っている。具体的には、活動をEmbeddingするレイヤーをLSTMの前に持たせてスパースなデータに対応し、2週間のデータからユーザタイプをクラスタリングシステムで予測し、そのユーザタイプを予測するようなK個のLSTMをトレーニングして、Attentionで着目するLSTMを決めて離脱率を予測するモデルを構築している。

この論文で書かれている離脱率予測のモデルはClusChurnというシステムとして、Snap Inc.のリアルタイム予測システムに組み込まれている。
機械学習による離脱率予測モデルの一例として参考となる論文であると思う。

[KDD2018 論文読み] Smoothed Dilated Convolutions for Improved Dense Prediction

Smoothed Dilated Convolutions for Improved Dense Prediction
Zhengyang Wang (Washington State University); Shuiwang Ji (Washington State University)
https://www.kdd.org/kdd2018/accepted-papers/view/smoothed-dilated-convolutions-for-improved-dense-prediction

KDD2018の論文読みを始めた。1本目。

Image Segmentationの分野でよく使われているdilated convolutionという手法はグリッド状のアーチファクトがでるという課題があった。
Dilated Convolutionは周期的なサンプリングをしてそこに畳み込みフィルターをかけて、並びなおすという操作を行う。並べなおされた後は、隣のピクセルは離れたピクセルの畳み込み後の値なのでアーチファクトが出てしまう。

これを解消するために、著者らはSmoothed Dilated Convolutionsという手法を提案し、公開データセットにて通常のDilated Convolutionに比べて精度が向上していることと、実際にグリッド状のアーチファクトが軽減されていることを確かめた。

具体的には、Group Interaction Layerという各Dilated Convolutionフィルタ間の全結合ネットワークを用いて、各フィルタ間の関係性を学習させている。

また、Dilated Convolutionをかける前に、Separable and Shared Convolutionという各チャネルごとにフィルタをかける形の処理を行うことで、Dilated Convolution処理の前に関係性を学習することができる。

PSCAL VOC2012データセットを用いて評価しており、全体的に過去の高性能モデルよりも良い結果が出ている。また、ERF可視化という方法でグリッド状のアーチファクトが軽減されていることを確認している。

XGBoost 0.81でtrain()が落ちる

タイトルの通り、XGBoostの現時点での最新バージョンを入れてtrain()を呼び出したところ、Jupyter Notebookで「”The kernel appears to have died. It will restart automatically.”」と出て強制終了となった。どうもデータかパラメータに依存して起きる現象っぽい。

色々と調べて試してみたが、ここを参考にしてバージョンを下げたところ問題なく動くようになったのでバグっぽい。

インストール方法:

pip install xgboost==0.80

【書評】中国のAI技術と進むべき方向性:「AI Superpowers: China, Silicon Valley, and the New World Order」

最近、アメリカのAmazonで話題となっている「AI Superpowers: China, Silicon Valley, and the New World Order」という本を読んだ。
色々と面白い内容が多かったので、ここに書きたいと思う。

まず、この本の著者であるDr. Kai-Fu Leeは台湾で生まれてアメリカのカーネギーメロン大学で音声認識の分野でPh.Dを取った、人工知能の専門家である。現在はベンチャーキャピタリストとして北京を活動拠点にしている。
著者がどんな人かを手っ取り早く知りたい人は以下のTED動画を観ると良いと思う。
https://www.youtube.com/watch?v=ajGgd9Ld-Wc

この本を読むと、とにかく中国のAI活用がものすごいペースで進んでいるということが分かる。もちろん、筆者が中国をベースにビジネスをしていることを割り引いて考える必要はあるかと思うが、筆者の中国がAI実装の分野で力を付けていくだろうというビジョンは本書を読むと説得力がある。
筆者はディープラーニングによる世の中のシフトは、2つの変革として表れていくだろうと述べている。すなわち、「発見の時代から実装の時代」のシフトと「専門家の時代からデータの時代」へのシフトである。

今現在も続いている専門家がアルゴリズムを考えて、新たな有効な機械学習手法を編み出していく時代から、その手法を実際に社会実装していく時代が来るだろうとの考えから、このシフトを筆者は考えている。最近は多くの研究者がarxivなどに論文を学会で発表する前に載せており、コード実装を公開する例も多い。インターネットさえあれば、それらの世界最先端の技術を学ぶことができ、ビジネスに応用していくことが出来る時代である。

ビジネスとして最先端の機械学習の成果を利用するには、必ずしも最先端の研究者が必要なわけではない。筆者は「Today, successful AI algorithms need three things: big data, computing power, and the work of strong — but not necessarily elite — AI algorithm engineers.」とも述べている。
このように機械学習の社会実装という面だけで考えれば、中国はアメリカに劣っていないという。また、研究面でも中国出身の研究者が多くの論文を発表するようになってきており、AAAIというAI関連の有名な学会の日程が旧正月と被るために日程を変更せざるを得なかったという象徴的な出来事があった。
https://www.theatlantic.com/technology/archive/2017/02/china-artificial-intelligence/516615/

このようにAI研究や社会実装で中国の力が伸びてきており、半分冗談であるが「中国がシリコンバレーにAI研究でどれほど遅れているか?」と聞かれた中国の実業家は「16時間」と答えたらしい。これはカリフォルニアと北京の時差である。「When asked how far China lags behind Silicon Valley in artificial intelligence research, some Chinese entrepreneurs jokingly answer “sixteen hours”—the time difference between California and Beijing.」と答えたらしい。

また、中国企業のハードワークさも今後のビジネスの行方に有利に働くと考えている。筆者に言わせると、中国企業に比べてシリコンバレーの企業はとてもゆっくりと怠けて仕事をしているスピード感の違いを感じるそうだ。また、非常に熱心に学ぶ中国の学生やエンジニアの話も紹介されており、英語圏の著名なAI研究者の動画などにはすぐに中国語の字幕や翻訳が出るとのことで、将来性ももちろん感じる。この辺りの話を読んでいると、高度成長期時代の日本の姿に重なるものを感じる。
もちろん筆者だけでなく、世の中の著名な人物も似たような評価を下している。たとえばエリックシュミットは講演のなかで「Trust me, these Chinese people are good. . . . If you have any kind of prejudice or concern that somehow their system and their educational system is not going to produce the kind of people that I’m talking about, you’re wrong.」と述べたそうだ。

この本のなかでは、一体何が中国をAI実装の分野で強くしているのかといったことが書かれている。例えば、独自の文化圏、国家主導の仕組みづくり、テクノロジーを一段飛ばしで来たこと、データを使われることへの許容、ハードウェアに強い深圳を持つこと、などなど様々な点が強みとして挙げられている。
例えば、独自の文化圏として、昔の話であるがグーグルサーチは中国市場を単なる一地域としてしか見ておらず、本格的なローカライズのペースが遅かったと言う(ちなみにこのころは著者はGoogle Chinaで働いていたそうだ)。通常、検索結果をクリックするとそのページへ飛ぶが、中国人は検索結果を「ショッピングモール」のようなものだと思っており、検索結果をクリックしてもそのサイトは別タブ・ウィンドウで表示され、検索結果のページが残ったほうが効果的であったという。Baiduはいち早くそのように実装し、Googleに対して優位性を取ったという。
また、国家主導の仕組みづくりとしては、地方自治体が競うようにしてITベンチャーを簡単に設立できる特区のような地域を作るなどして、ベンチャー企業が数多く設立される仕組みを作っている。

テクノロジーを一段飛ばしで来たことは、例えば多くの人にとってはデスクトップやラップトップを経由せずにスマートフォンがメインのデバイスとして使われるようになり、スマホ特化のアプリやベンチャーが生まれたり、クレジットカードを経由せずにQRコードによる支払いが進んでいくようになったことなどが挙げられる。
データを使われることへの許容とは、直接的に言及されていないが中国政府による検閲やプライバシーといったものの意識が近年まで問題になっていなかった背景などもあり、企業に個人データを使われても、それで便利になるならば許容する精神が西側諸国よりかは大きいのだと思われる。
また、深圳はハードウェアのメッカとして知られているが、現状では他国の企業に比べて中国企業は文化・言葉などの面でビジネスをしやすいという。他国が苦労しながらもハードウェアを深圳で作ろうとしている間に、中国企業は様々なトライアルアンドエラーを行ってAI技術を用いた新しいデバイスを作れるようになるだろうと著者は予測する。
このほかにも今後数年~十数年のうちに実現するであろう、AI技術を社会実装した例なども挙げられており、専門家の目から見た将来像を学ぶ上で有益な一冊であると言える。

後半は前半とは大きく変わって、著者のTEDトークにもあったステージ4のがんであると診断された後に気付いた人生の目的やそれに向けたAI活用の話になってくる。著者は、がんと診断される前は仕事一筋で、どれだけ自分が社会に与える影響を最大化できるかといったことだけを考えて生きてきたという。しかし、人との関りや家族友人を大切にすることこそが一番重要だと思うようになったと語る。よく言われていることだが、死の間際にあの時もっと働いていれば良かったと思う人はほとんどいない。
そういった出来事を踏まえて、AIの発展した時代には人間は人との関わりを活かした仕事を進めていくべきであると言う。例えば、誰もステージ4のがんを機械に宣告されたくないはずで人間的なアプローチを持った仕事は残っていくし重要であるだろうと予測している。この辺りはTEDトークを見てもらえれば良く分かると思う。

個人的にはこの本がアメリカのAmazonで大ヒットしている現実を見ると、やはり欧米諸国は中国とパートナー関係を結んでビジネスを進めていこうという流れが出来てくるだろう。最後の方にもこの本のタイトルである「AI Superpowers」は決して、冷戦や宇宙進出の競争の時代にあったような対立関係を煽るものではなく、米中で協力してAI技術を発展させていくべきであるとも述べている。そうなった際に置いてけぼりにならないように、日本企業が中国企業から学ぶべきところは多いだろうと思う。

Kerasで転移学習をする際にはpreprocess_input()を呼ぼう

画像に関するタスクを扱っている際に、事前学習済みの重みを利用した転移学習を行うことは良い精度を出すことが多く広く使われています。Kearsには学習済みのいくつかのモデルが用意されており簡単に転移学習を行うことが出来ます。

(https://www.kaggle.com/amadeus1996/fruits-360-transfer-learning-using-keras)

公式のサンプルなどを見れば問題無いのですが、この事前学習済みのモデルを使う際にはpreprocess_input()という関数を呼び出して画像に対して前処理を行うことが想定されています。しかしながら、いくつかのブログ記事などを見たところpreprocess_input()を呼ばずに、転移学習を行っている記事があったため今回この記事を書きました。厄介なことに、preprocess_input()を呼ばなくても、VGGやResNetなどの高容量なモデルは前処理分の処理を学習するようで割と良い精度を出します。本質的には前処理しないことで、無駄な訓練が行われていることになるので、忘れずにpreprocess_input()を呼ぶべきでしょう。

ちなみにpreprocess_input()の中では、モデルによって画像の正規化、ImageNetデータセットのRGB各チャンネルごとの平均値を引く、などの処理が行われているようです。

Batch Normalization と Dropout は併用しない方が良いという話

Deep Learningのモデルを訓練していたところ、思うようにvalidation lossが下がらないことがあった。色々と調べた結果、Batch NormalizationとDropoutを併用していたのが原因であったので、誰かの為に書いておく。

この論文その解説にある通り、Batch NormalizationとDropoutを併用するとパフォーマンスが悪化することがある。原因は、「Dropoutを行うことで学習時と評価時で分散が変わってしまう一方、Batch Normalizationは学習で得られた分散を評価時もキープしてしまうため齟齬が生じることが原因」とあり、言われてみればなるほどという感じである。

結論としては、DropoutかBatch Normalizationのどちらか一方だけで試してみてvalidation lossを下げようとするのが良さそう。Deep Learningを使えばすべて解決するわけではなく、パラメータチューニングやモデル構造のチューニングが良いパフォーマンスを出すためには必要だと分かる事例の一つ。

MITのLex Fridman氏によるAIポッドキャスト

MITのresearch scientistである、Lex Fridman氏がAI関連のポッドキャストを始めたそうです。AI関連のBig-pictureについて著名なゲストと話すとのことです。https://lexfridman.com/ai/

少し聞いてみましたが、音質も良く英語も分かりやすい方だと思うのでオススメできそうです。以前、データサイエンス関連のポッドキャストをまとめた記事も書いているので、そちらも参考にしてください。

Lex Fridman氏はMITでDeep Learningによる自動運転に関する講義などを行っており、授業の様子はYouTubeで公開されています。