読者です 読者をやめる 読者になる 読者になる

黄昏より暗きもの、血の流れより赤きもの

自分の好きな事を好きなように書いて行きます。

とりあえず統計・機械学習を始めるのに必要な、データを集める4つのアプローチ

確率 統計 機械学習

今日は統計・機械学習を始めたい全ての方を対象とし、統計・機械学習処理を行なうためのデータの集め方について話したい。

まずはじめに

画像認識などではニューラルネットワークと言うアルゴリズムが採用される事がある。そのうちの一つである「Deep Learning」使われ方についてもの申した記事があった。

約数年前、自分の大学で画像処理らしき事をやった事がある。ところが、実質「画像をなんらかのアルゴリズムにつっこんでみた」と言う代物だった事が恥ずかしい。

こういった研究は中々成果を出すのに苦戦するが、それは機械学習も同じなようだ。

あのな、Deep Learningみたいに膨大なパラメータを持ってる学習モデルは簡単に過学習を起こすから、素人が下手に扱うとむしろ精度が落ちるもんだ。

そこそこ難しいタスクに対して上手く学習するには、とんでもない量の訓練データが必要になる。

しかも、Deep Learningは手動で設定する必要があるハイパーパラメータの数も膨大で、学習率とかノード数、正則化のパラメータみたいなやつらを地道に調整しなけりゃいけない。

以下、統計・機械学習のデータについて論じたい。

第1章:教師あり機械学習を行なうのに必要なデータ量は?

統計の場合

統計を勉強すると、ニュース記事の統計のnと言う数値に目が行くようになるだろう。このnというのは標本数であり、どれだけ精度の高い統計なのかを読み取る一つの指標とも言える。

例えば、世論調査で内閣を「支持する」「支持しない」かをn人に対してアンケート調査する場合を考える。直感的に10人よりも、20人に対し調査した方がより正確に計測できそうだ。

このような限定されたケースの場合で、n個のデータが同じ状況(分布)に従うとき、その誤差は正規分布に近似的に従う(中心極限定理)性質が存在する。具体的には、

平均μ、分散σ^2の同一確率分布に従う確率変数X_1,X_2,X_3,....,X_nにおいて、\overline{X} = \frac{X_1+X_2+...+X_n}{n}(標本平均)とおく。このとき、Z=\frac{\overline{X}-μ}{\sqrt{\frac{σ^2}{n}}}(標準化)はn \to \inftyで標準正規分布N(0,1)に従う。

これは実験回数を増やせば増やす程、誤差が落ち着く事を示している。世論調査で過半数p=0.5かどうか調べる場合、ある計算により500人に対し調査したときの誤差は8.77%で、1,000人の場合は6.20%にも上る。

このように統計の場合だと、誤差を抑えるにはどれだけのサンプルを取るべきかの計算法がある。*1

教師あり機械学習の場合

しかし教師あり機械学習の例だとどれだけのサンプルだとどれだけ誤差が出るか?と言った事は、筆者の自分が単に知らないだけか、無いと思い込んでいるか、ひょっとするとやっている人の経験則に依るのが現状のようだ。そこで過去の研究事例から、どれだけのデータが必要か?を探してみた。

なんでGoogleとかがDeep Learningで成功しているか、少しでも考えたことあるか?あいつらは過学習なんて関係なくなるほど、無茶苦茶たくさんのデータを手元に溜め込んでるんだ。しかも、ハイパーパラメータ設定の勘所を掴んでる職人みたいな技術者を金の力でどんどん集めている。

Webの大手のシステムなどで、1秒間あたりSQLにInsertされるレコード数をiとしよう。ここでi > 1,000(件/秒)位だと仮定すれば、1日当たりで1,000*24*60*60=86,400,000(件/日)以上もののデータがInsertされる推計だ。

多く出版されている書籍、発表事例だと基本i > 1,000(件/秒)や、i > 10,000(件/秒)のデータ量がInsertされる前提で動いている場合が多い。このためそもそもの所で真似にならない場合もあるので注意されたい。


f:id:program_study:20160626201323p:plain
図:白黒画像から元の画像の色を復元(早稲田大学)

SQLのInsertでは無いが最近、早稲田大学に依る白黒画像から元の画像の色を復元する研究論文「Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification(PDF)」に依れば、205個の状況(Class)に対し、ニューラルネットワークに使った画像数は2,327,958枚(training images)にものぼるようだ。

We filter the images by removing grayscale images and those that have little color variance with a small automated script. This results in 2,327,958 training images and 19,546 validation images.(Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification(PDF) page 7より)

まとめ

  • 統計では、特定の状況下において、誤差を考慮してどれだけのデータ量を集めれば良いかを計算する手法が存在する
  • 教師あり機械学習の場合、データ量に応じ誤差がどれだけ生じるか?と言う事は現状分かっておらず、場合に依っては数百万のデータを準備する必要がある

第2章:統計・機械学習処理を行なうためのデータの集め方について

一体全体200万もののデータをどうやって用意するんだと言う話だが、流石にいきなり100万を集める事は難しい。海外ではデータブローカーと言う人から、データを買うと言う方法があるようだ。しかしながらそれも難しい場合は手作業で1からやる事になる。以下データ量では200万に到底及ばないが、とりあえずやってみる方法を紹介する。

ここにたどり着くような物好きの皆さんの中には、丸善書店の分厚い黄色いPRMLなんて本を買い、シグモイド関数云々を勉強された方もいるかと思う。ここでシグモイド関数は分かったんだ!でもこれを何に使うの?そのネタが思いつかない」と言う心の病を発症した人も居たと思う。

自分もこういう商売で色んなテクニックを覚えて来たが、「これらを使って何をしよう?」という所で毎回困っている。それは今回の統計・機械学習でも同じである。ここからは統計・機械学習のネタ集めの4つアプローチを論じたい。

  1. 自分の調べたい事、又はやりやすい題材を探す
  2. Twitter,google,facebook,foursquare,LinkedIn,YouTube,flickr,pixiv,ニコニコ動画などAPIがある場合は、APIとDBをつなぐ準備をする

アプローチ1:アニメの画像をDeep Learning

まず1について。Deep Learningで良く話題に上がるのがアニメキャラクターの判定ネタではないだろうか?

これを題材にする利点は、画像を集め易い点だ。恐らくここまでアニメ x Deep Learning ネタが流行ったのも、同じ規則性を持ちやすい画像である他、確実に一定の量を画像を用意しやすいと言うのもあるように思う。

動画は画像を動かした物なので、25分のアニメでフレームレートが30fpsと仮定すれば、 なんと25(分)*60(秒/分)*30(枚/秒) =45,000[枚]ものの画像を用意できる。

この手の記事を読む限りは簡単そうに見えるが、実は下準備に時間を要するネタである事は覚えて帰って欲しい。

さて、45,000[枚]となれば手作業で代表的な画像を探すのも難しい。そこでオプティカルフローなどで動体のベクトルに注目し、激しく動きの無いものは除外すると言った前処理も必要な場合も出て来るだろう。

画像毎に調査し、調査結果を保存するためのバッチ処理のプログラムだって必要になって来るだろうし...

尤も良かった事例だけブログで説明する場合ならば、この限りでないが...ブログ記事などを見てソースコードが公開されている場合は、案外違った事例だと結果が変わりやすいと思うのでそれをネタに書いてもよいだろう(笑)。

アプローチ2:なんかのサイトを立ち上げ、そのデータを収集

「統計・機械学習の為に、なんかのサイトを立ち上げる」と言う考えもありっちゃあありだ。自作のアプリケーションがある場合は、フォームの入力時間。又はユーザーエージェントなど、後々何らかのカテゴリーに分けやすい情報があれば真っ先にデータベースにInsertしてしまおう。

このように集計をするプログラムを仕込み、一旦何らかのデータを集計する箱から先に作ってしまうと言うアプローチもある。

アプローチ3:Web APIでできる事をやる

ただ自前の種が無い場合も少なくない。こういった場合、Web APIでネタを自動集計するのもありだ。言い出しっぺで申し訳ないので、APIのつなぎ方を検索してみた。

アプローチ4:その他考えられる方法

その他の方法としては、Webスクレイピングウェアラブル端末の血圧などのデータ、カメラなどのハードウェアのデータを使って色々やってみると言うアプローチもある。これもYouTubeAPIの場合と同じで、そのAPIの中身を熟知する事が重要になって来るだろう。

最後に

今日は統計・機械学習処理を行なうためのデータの集める4つのアプローチについて中途半端に語ってしまった。

本記事が完璧なものだとは思っていない。むしろツッコミ所、こうやって書け!と思う事があったらコメント、Twitterはてなブックマークして頂ければ嬉しい限りである。