前回はTensorFlow.org掲載の「GET STARTED」をテンソル版に拡張した例を用いて行った学習過程および結果のデータをTensorBoardで可視化して機械の学習の様子を見てみました。
前回 http://qiita.com/MATS_ELB/items/e5761be146a400586392
今回は「精度の高い学習」について哲学的に考えます。
ほぼ「閑話休題」レベルの話です。
我々が生活している地面について「東経○○度、北緯○○度は標高○○メートル」という実際の計測データを集めて、「それなら、行ったこと無いけど、100メートル向こうは標高○○メートルだろう」と推測するモデルを機械学習で作る作業を考えた場合、推測の精度を考える上でいくつかの疑問が浮かびます。
疑問1:実測データ(=学習データ)はどれぐらいの数を集めれば良いのか?
疑問2:計測するポイントの間隔はどれぐらいの距離が適切なのか?
つまり、ホントに正確な標高を推測したければ1ミリ間隔で標高を計測して膨大な学習データを用意していけばいいわけで、そうなるとわざわざ推測モデルを作ることに意味あるの?実際に計測しまくればいいんじゃない?となりそうです。逆に、10メートル間隔で標高を計測していった場合、道路にあるマンホールのように1カ所だけ急激に標高が変化する場所を見落としてしまうのではということになります。と考えると、そもそもこの推測モデルは誰が何のために使うんだったっけ?という話になりそうです。象の地図に使うのであれば数十センチの段差は気にもならないでしょうし、蟻の地図に使うのであれば数センチの段差も大事な情報でしょう。使用目的によって適切な尺度というのがありそうです。
余談ですが、アラブの遊牧民達はラクダの呼び方について年齢や性別からはじまり「水を飲んでいるラクダ」「寝ているラクダ」「草を食べているラクダ」などラクダの状況によって異なる呼称を持っています。我々と異なり、彼らの生活はラクダと密接な関係にありますから、その分だけラクダを認識する尺度が繊細なのでしょう。彼らに対して我々の感覚で「ラクダとヤギを判別するシステム」を提供したとしても「どの状態のラクダかまで判別できないと困る」といわれるかもしれません。
ということで、機械学習の精度については使用目的によって適切な尺度を考慮することが大事なようですが、皮肉なことにこの「適切」は人間が判断するしかないのでしょうか?それとも、機械学習によって「このユーザーはこのレベルの違いには関心無いな」などと自動で調節するようになるのでしょうか?現時点での機械学習に対する一般的な認識を総括すると「できるだけ多くのデータを持っている方が有利」との傾向が感じられます。しかし、これは一昔前に「できるだけ多くのメールアドレスを持っている方が広告配信に有利」といわれていた状態に似ている気がします。結果として、多くの人々はメールで送られる広告に見向きもしなくなりました。闇雲にデータ量に依存するのではなく、「目的に叶った適切さか」を見極める「チューニング力」が我々に求められているのではと思います。
次回はTensorFlowの技術的な話に戻ります。皆さんからのアドバイス・ご意見をいただきたく。
続編はこちらへ http://qiita.com/MATS_ELB/items/db85de80c72be28fc60b