機械学習にまつわる3つの誤解

昨晩寝る前に発表タイトルと概要についてコメントをしたのだが、朝の4時にミルクで起きることに成功したので、もう一度コメントを送る。この往復が好きなのだが、往復する度にクオリティが上がっていくのが楽しいからかもしれない。

今日は午前に出かける予定なので朝の散歩は省略。最近は暑いので、たまたま気温が低い日でないと、朝早くに行かないと汗だくになる。今日は特別暑そうだし……

午前中は、現在第一希望の認証保育園まで見学に行く。以前も1回行っているのだが、妊娠中だったので、娘を連れてもう一度行きたかったのである(雰囲気が合うかどうかもあるし)。外が暑かったし、今日は自分も体調も悪くないので、バスではなく車で行く。タイムズ駐車場を検索したところ、満車かどうかまで教えてくれて、便利。空いている駐車場に車を止めて、保育園に向かう。

先週電話したときは、来年の4月1日から入りたい場合は9月1日の10:45から先着順で受け付けるので電話してほしい、と言われていて戦々恐々としていたが、我々は認可の保育園にも出さない、こちらの保育園が第一希望、ということを伝えると、電話しなくても待機リストに入れてくれることになった。ここは各学年?の定員が4人で小学校に入るまで預かってくれるのだが、子ども3人に保育士1人いるので、かなりアットホームでいいと思うのである(いまは子ども23人に対し保育士7人らしいが)。

ちなみに、今年度の0歳児の待機リストは20人以上あって、5月8日の娘が生まれた数時間後に予約した我々は今年度の14人目の待機者で、我々より上の子どもは1人しか入れていないので、年度の途中から入ろうとしてもまず不可能である。9月1日は研究会の準備で南大沢に行かないといけなかったため、電話がつながらなかったらどうしようかと思っていたので、ダメ押しで見学してよかった。

昼からは大学に出勤してミーティング。よくありがちな誤解だが、機械学習を使えばどんなタスクも魔法のように解決、というふうに思っている学生がいたので、その認識は間違っている、と正しておいた。たとえば今回のタスクは正例が1%ほどしかラベル付きデータに含まれないタスク(8,000事例中90件が正解)なのだが、これを当てるモデルを学習するのは、外れ値検出(outlier detection)のタスクに近く、正確に推定するのは難しい。別に学生だから誤解しているというわけではなく、とある企業でもよくある話で、そういう上司に当たると地獄だと聞いたことがある(教えてくれた人たちは、両手で数えるほどいたのに、全員もうその企業にいない)。

単なる推測だが、以下のような極端な意見を見ることがあるが、どちらも正確ではないので、一歩引いてみたほうがいいと思う。

  • 機械学習でやるほうが人間でやるよりはるかに精度が高い。(あるいは、人間がやれば、全てのタスクは精度100%にできるはずだ。)→ルールを書くほうが適切なこともあるし、機械学習に適さないデータであったり、人間ですら難しいタスクもある。
  • アノテーションの仕様はそっちで決めてほしい。こちらは精度だけ出す。(あるいは、何が正解かはこっちで決める。ただし、データは出せない。)→実例を見ないと、作っているほうはプログラミングできて楽しいかもしれないが、全く誤った方向に行くことがある。あるいは、データがないと話が進まないのに、(何が正解か、恐らく当事者たちも整理できていないため)出てこないことがある。
  • 訓練事例で精度を出すのは、馬鹿。(あるいは、訓練事例でテストして得られた精度が高ければ、よい。)→そもそもデータにモデルが適合していない場合、いくらテスト事例で精度を見ても不毛なので、訓練事例でちゃんと学習できるか見ることがある。逆に、訓練事例でだけ精度を見ても、モデルが過学習しているだけのことがあるので、未知のテスト事例で精度を出す必要がある。

あと上記に関連して、1年前に勉強したせいか、学生が正則化について完全に忘れていたようなので、高村さんの機械学習本やグラムさんのNLPチュートリアルを復習してほしいと伝えたのだが、正則化や頻度による足切りは夏休み前に今年度勉強したばかりの別の学生からも質問されたので、確かに初学者には分かりにくい概念なのかもしれない。特に過学習の概念(ヘルドアウトデータを使う意味)を理解していない、ということと表裏一体であるが、自分もこのあたりが腑に落ちたのはD3のころだったし……(PRML を読んだのと、L1/L2 正則化のイメージを [twitter:@hillbig] さんがチュートリアルで説明していたのを聞いて、なるほどな、と)。

結局実際のデータで実験して場数を踏んで、ときどきは基本の勉強を(復習)する、というサイクルの繰り返しで、どこかでハッと理解できる、といういうなもののように思うので、実装しっぱなしでも、逆に全く実験をしなくても、どちらでもピンと来ないのではなかろうか。「復習する」というのは意外と効果が高いので、1年に1回くらいは教科書やチュートリアル的なものを流し読みしてみるといいのではないかな。自主的にやれれば理想だが、強制的にやったほうがいいんだろうか? (右も左も分からないうちは除き、)自発的に勉強しない人はこの業界向いてないと思うので、スクリーニングのためにあえて自主性に任せる、という考え方もあるだろうが……。

午後は科研費の説明会。基盤Aを取ったり審査委員を務めていたりする方による、採択率アップの方法、というトークに期待して行ったのだが、NAISTで聞いた同様の話のほうが参考になった。NAISTの説明会は、どこが採択する・落とすポイントか、ということも細かく教えてくれたが、首都大の説明会は、「5段階評価の評点4ではリードできないので、5をもらえるようにしましょう」というような「指導」で、それで満点がもらえるなら苦労はない(もちろん、「図を入れましょう」のような話もあったが、添付されているサンプルには図はないし……)。

もし具体的な研究計画書の書き方や実例について知りたいなら、この説明会に出るくらいなら、以下の本を読んだほうがはるかによかったと思う。

せっかく書き方について(不採択だった申請書と、それをどう直して通ったか、という実例まで豊富な)充実した書籍がある現在、採択率アップのための小手先の技術ではなく、ぶっちゃけ話や薀蓄、研究に対する心構えのような精神論でもいいので、本では書けないような話をしてくれるといいのになぁ。

夕方はメールの処理(学会のお仕事)と原稿の執筆。やっぱり Word で適切にリファレンスを入れられない。APA スタイルで入れたいのだが、どうやら学会が配布しているテンプレートが中国語仕様のもので、pages が「頁(ただし中国語のフォント)」になってしまったり、Jobs, S. のように表記してほしいのに JobsSteve のように出力されたり(日本語や中国語で論文を書いているなら、それでよいのだが)、適切な場所がイタリックになってくれなかったり。しばらくがんばっていたが、そもそもこの知識が今後も活かされる可能性は高くないし、〆切までの残りの時間を考えるともはや時間の無駄だと思ったので、敗北感はあるものの、手打ちすることにした。

最近、MS のアプリケーションに苦しめられることが多い……。