ITエンジニアのための勉強会・イベントレポート情報メディア

「勉強会に行ってみた!」第49回「Pythonデータサイエンス入門【found it project セミナー#4】」
event

「勉強会に行ってみた!」第49回
「Pythonデータサイエンス入門【found it project セミナー#4】」

2017.03.13

 
  • このエントリーをはてなブックマークに追加

今回はPythonによる機械学習です。エキスパート二人が、たとえば画像認識の下準備はこうやるといいよ!みたいな具体的な話をしてくれるんだそうです。経験者だけが知る、ハマリがちなところみたいな感じでしょうか。どんな話が聞けるのか楽しみです。

三土たつお

会場は東京の飯田橋でした。

このところおしゃれなピカピカの会場が多かったので、久しぶりに親しみやすい会場でした。主催の「メディア工房」のオフィスは赤坂にあるんですが、参加希望者多数のため、別に会場を確保したとのこと。

中はこんなふうになっていました。まさに会議室という感じで、落ち着きます。

講演:画像認識モデルを作るための鉄板レシピ

最初は、久保隆宏さんによる画像認識のお話から。

久保隆宏さん(TIS株式会社 https://www.tis.co.jp/

自己紹介で言っていたんですが、久保さんは会社で、みんなが15時に帰れるように業務改善を行うプロジェクトを担当しているんだそうです。なんかいろいろとすごい話ですね!ぼくも15時に帰りたい…。

料理に例えるなら、機械学習がよい調理法だったとしても、素材となるデータや下ごしらえが悪ければ美味しい結果になりません。

これはなんとなく分かります。たとえば顔認識用のデータを揃えようとする場合、目の位置を合わせて学習させないと精度が悪くなるみたいな話ですよね。とにかく適当に集めた画像を学習させればいいわけじゃないんだ!と驚いたのを覚えています。

画像認識の鉄板レシピは、調査から始まります。

(久保さんのスライドより。以下同様)

画像の収集は分かります。ひたすらネットとか自分で撮影したりして、認識させたい画像を集めるんですよね。アノテーションは、それらに自分でラベルをつけること。でも、モデルの要件を設計するってなんでしょう?

モデルの要件の設計とは、入力と出力についての定義をすることです。入力画像はどんな性質か?どれくらい縮小させるか?認識させたいクラスの数は?など。この設計を怠ると学習データの作り直しや認識精度の低下などを招きます。

なるほど。最初にしっかり設計すると。続いて画像の収集。

画像の収集は、TwitterのようなSNSのAPIや、Kaggle Datasets のような公開セットを主に使います。それと、自分で撮影したりするような人力での収集も馬鹿になりません。

データの収集っていうと、合計で何万枚も集めないといけないイメージがありますが、大雑把な目安としては、1クラスにつき100枚もあれば概ね足りるそうです。これには理由があって後述しますとのこと。よくあるデータセットって合計で何万枚もあって、これ自分で集めるの無理だよなあと思っていたんですが、もはや世界は変わっているんですね!

続いて、画像へのアノテーションです。

アノテーションというのは、つまりラベルづけですね。このやりかたには、自力と他力と半自動があります。

自力というのは、何百枚もある画像を自分一人でラベル付けしていくことですね。これは分かります。すごく大変だと聞いています。他力は、クラウドソーシングとかでみんなに頼むこと。なるほど。

そして半自動は、これまでに自力でアノテーション付けしてつくったモデルを使って予測させて、それを修正するという方法です。

半自動はなるほど便利ですね!言ってみれば、弟子を育てて途中からは弟子にやらせると。もし間違っていたら修正が必要だけど、育つにつれて弟子に任せられるようになってくるってことですね。

重要なのは、アノテーションが全部終わってから最後に一気に学習させるんじゃなくて、少しずつ学習させて精度を見るっていうことです。じゃないと、苦労して全部やり終えたのに、結局この画像の作り方じゃだめだから全部やり直し、っていうことが最後にわかることになって、手戻りが大きい。

少しずつ精度をみれば、データ量に応じて精度がちゃんと上がっているか確認できますからね。だめそうだということが早い段階で分かる。

次のステップは、前処理です。

画像を学習しやすいように加工するのが前処理です。学習速度を向上させたり、精度を高めることができます。

たとえば全画像のRGBの平均を計算して、それを各画像から引くことで平均を0に整えたりします。それと、水増し。

左右反転したり、一部を切り出して並べたり、明るさを変えたりすることで、元の画像を何倍にも増やすことができて効率的!
しかも、効率的というだけじゃなくて、モデルの汎用性を高めるっていう意味があるんだそうです。たとえば、人間なら左右反転しても認識できるはずだから、左右反転した画像を用意しておくことには意味がある、という具合です。

それから、こういう画像の加工は事前にではなく、学習中に自動で行うのが一般的とのこと。じゃないと手間ばっかりかかるし、ディスクも圧迫します。

そうやって画像データができたら、いよいよ学習させます。が、ここにもコツがあります。

それは、事前学習済みのモデルを使う、ということです。世の中には、有名な AlexNet とか、GoogLeNetとかの学習済みのモデルがあります。それを利用して、自分の用意した画像セットを学習させてチューニングする、というのが最近のやり方なんだそうです。

画像を何万枚も集めて、すごいメモリとGPUを積んだ高いコンピュータで何日もかけてやるっていうイメージを持っていたので、時代はあっという間に変わるんだなと驚きました。

この際は、Kerasというライブラリを使うと便利!とのことでした。さっそく調べてみようと思います。

学習の結果うまくいかないと、ついついパラメーターを調整してしまいがちですが、本当に必要なのはその手前のデータの下ごしらえであることがほとんどだそうです。下ごしらえをしっかりやりましょう、とのことでした。

講演:Pythonを使った機械学習の学習

つぎは、加藤公一さんによる機械学習の学び方のお話。

加藤公一さん(シルバーエッグ・テクノロジー http://www.silveregg.co.jp/

加藤さんは「データサイエンティスト養成読本 機械学習入門編」を書いたり、「科学技術計算のための Python」という本を訳したりしています。

そんな加藤さんが、自分はどうやって勉強してきたかという話です。基本は3つ。

  • ・本を読む
  • ・自分で実装する
  • ・既存の実装を見る

いまの会社に入るときに、まずはこれを読んでと言われてとりあえず読みました。

有名なPRMLっていうやつですね。その他、大学のときに読んだ微積分や線形代数の本を改めて読み直したとのこと。

そして、アルゴリズムを自分で実装してみるんだそうです。

便利なライブラリがあっても、理解のためにあえて自分で作ってみます。最新の論文に書かれたアルゴリズムは自分で実装するしかなかったりもします。

すぐれた実装があることを知らずに自作するのは再発明といって批判されますが、学習のために自作するのは間違いなく効果がありますよね。アルゴリズムの内部をよく理解することができますし、逆に理解しないと実装できません。

実装ができたら、すごく当たり前のケースで動作を確認します。たとえば上のスライドでは、ユーザーU4は商品I1とI2を買っています。その他のユーザーは同じケースで必ずI3を買っているとしたら、U4へのお薦めはI3に決まってますよね。こういうのがそのとおりに動くかどうか。

実装にするにあたっては Python だと便利なライブラリがあり、数値計算だと NumPyや SciPy があります。これらは当たり前だとして、お薦めは Sympy だそうです。

上のスライドのように、二次方程式も解けるし、因数分解とか式の微分、積分もできます。しかも数値計算じゃなくて、式としての微分積分ができるので、桁落ちの問題もありません。

それから scikit-learnというものがいいそうです。

サポートベクターマシンで分類ができても、それだけじゃ嬉しくない。肝心のサポートベクターがどうなってるか見たいですよね?

サポートベクターマシンっていうのは、データの分類とかをするときに使う手法でいるか知りたい、というときも、scikit-learnならドキュメントが充実しているので、そういうのも分かる。

理論やアルゴリズムの中身を理解したかったら手を動かしながら勉強しよう、そして中身を理解しようということでした。

ツールをただ使えるというだけじゃなく、「中身をよくわかっている」ということが競争力になる、という指摘はまさにそのとおりだと思いました。

まとめ

今回は二つのお話が対照的でどちらも興味深いものでした。久保さん画像認識モデルを作るためのレシピでは、半自動アノテーションと事前学習済みモデルの利用に目から鱗が落ちました。なるほど便利です。加藤さんの Python を使った機械学習の学習では、自分で実装して学ぶという点と、中身をよく分かることが競争力になるという点に感心しました。ふだん、ツールは使うだけで中身をよく知らないなあ、と反省しきりでした。久保さんの言っていた Keras は知らなかったので、調べてみようと思います。

今回行った勉強会:「100席に増枠!Pythonデータサイエンス入門【found it project セミナー#4】」
https://foundit-project.connpass.com/event/47824/

原稿:三土たつお
1976年生まれ。プログラマー、ライター。プログラマーとしてはふだんPHPを書いてます。ライターとしてはニフティのデイリーポータルZとかで書いてます。近著「街角図鑑」(実業之日本社)。
http://mitsuchi.net/

「勉強会に行ってみた!」第49回「Pythonデータサイエンス入門【found it project セミナー#4】」

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW