:date: 2017-01-27 20:40 :tags: Python, PyData ========================================================================================== Pythonデータサイエンス入門【found it project セミナー#4】参加メモ #foundit ========================================================================================== データサイエンスの勉強会に参加しました。その時のメモです。 https://foundit-project.connpass.com/event/47824/ 免責事項: 雑なメモなので間違ってる部分もあるかもしれません。 [第一部] 講師:久保隆宏 氏 ==================================== * テーマ:画像認識モデルを作るための鉄板レシピ * スライド: https://twitter.com/icoxfog417/status/824929490170048512 自己紹介 * 「kintoneエバンジェリストなので何でも聞いて下さい」 * 「所属チームのミッション: ティータイム(15時)に帰る」おもしろい 鉄板レシピの全体構成 * 画像認識モデルを構築するプロセス * Survey * Processing * Training * モデルの要件を設計する(Survey) * 認識したい画像がどのようなものか調査する * 画像の傾きや映っている物がどんな状態なのか、性質毎の項目をシートにまとめるとよい * 学習用の画像を収集する * 最近はいろいろなデータソース(SNSのAPIやKaggleなど)が利用できる * 人力で写真を撮りまくるのもアリ * アノテーション * つまりラベル付け * この段階で実装を始める。実装上の難点を早めに洗い出す。収集画像の性質が間違っていたら後の作業が全部やりなおしになる。失敗は早めに検出する。 * 自分でやるか、だれかにやってもらうか、半自動か * いっぺんに全部とかやらず、100枚やったら学習させて、学習結果を見ながらまた人力でやって・・だんだん賢くなってくる * イケてるアノテーションツールは世の中に出てないので作るといいよ! * インクリメンタルにやっていこう * 前処理(Preprocessing) * 画像認識精度を高めるため * 画像の正規化、白色化 * データの水増しをする * 左右反転 * 一部を切り出す * 明るさやコントラストを変える * データが増えれば学習精度が上がる * 位置を揃える(目の位置を基準に写真の中心を変える) * 輪郭を抽出して強調する * ただし、補正すると、補正した画像でないと認識できなくなるという点は注意 * 中間データがたくさん発生するのでDISKに全部とっておくとかありえない。学習しながら前処理をやっていく * 前処理がバグってると認識精度が出ないのでしっかりテストしておく 学習(Training) * 事前学習済みモデル * さまざまなライブラリが学習済みモデルを配布している * Kerasは学習済みモデルを非常に手軽に使えるのでオススメ! * Kerasオススメ。深層学習モデルやるならこれ。これしかない * Kerasの開発者がGoogleに行ったのでTensorFlowもこうなるんじゃないか * 注意 * ハイパーパラメータ調整地獄に陥る前にデータをしっかり整えよう * ハイパーパラメータで逃げる、のは小細工 * データを整える段階でしっかりやっていこう * TensorFlowには水増しAPIが用意されている 感想 手戻りを嫌う感じで手法を確立していったんだろうなあ。 たしかに画像分類とか時間かかるので失敗しないお膳立てをちゃんとできると効率がよさそう。 Q&A --------- * 水増しを自動でやってしまうと、意味のないデータがたくさんできてしまうことはない?(はむかずさん) * 一部きりだしで人間も認識不可能な部分を切り出してしまうとNGだけど、ちょっとくらい * どういう画像を認識させようとしているのか?1クラス10枚から100枚でなんとかなる、のは学習済みモデルを使うから?それとも知らない画像でもいいの?(おおすぎさん) * 学習済みモデルから離れればその分枚数はもっと必要になる * 位置、セグメンテーション... (聞き取り間に合わなかった) * データが増えれば精度が上がる、は単に過学習なのではないか?どうやって精度を測るの?(おおすぎさん) * テストコレクションを分けて検証します * 画像内の識別個数を調べることで分布ができるので、最終的に認識したいものを中心にそこでテストデータと学習データに分けるなどをやる * 水増しのところで明るさの話が出たが、画像はRGB以外にHSVなどもあって、彩度を変えるなどはやるのか?(あべさん) * カラーチャンネルをいじるのはあまり実際に見た事は無い * ブライトネスをいじるのがほとんど * 色彩が失われた画像を認識したいのか? * 人間が認識できるグレースケールで学習させるのは一般的 * 水増しについて、フォトショップなどで水増ししてもいいのか?(お名前不明) * 人間の手間がかかる、DISKも食ってしまうので、学習過程でやるのが経済的です [第二部] 講師:加藤公一 氏 ========================================= * テーマ:Pythonを使った機械学習の学習 * スライド: https://twitter.com/icoxfog417/status/824929490170048512 機械学習を学習していこう 自己紹介 * Pythonの高速化芸(今日はその話はしません) * 「データサイエンティスト養成読本 機械学習入門編」共著 * 「科学技術計算のためのPython」翻訳 今日の発表は「科学技術計算のためのPython」からインスパイアされたものです。 * 機械学習を効率良く勉強するには? * 私はどうやって勉強したか * 本を読む * 自分で実装する * 既存の実装を見る * (まずこれ、といってスライド表示した本が英語の長いタイトルの本・・・) * (線形代数の本を先に読まないと読めないらしい) * 自分で実装する * SVMを勉強する人がSVMを実装してみるのは非常に価値がある * 便利なライブラリがあっても理解のために自分で作って見る * 論文は理論が難しいのであって実装はそんなに難しくない(こともある) * 人口データでの確認 * レコメンデーションのデータ例を用意して、ちゃんとレコメンドされるか見てみる * 自明なケースで確認すると理解が進む * (いきなり実データをやると勉強にならないということだろうなあ) * 内部動作の可視化 * 低次元で十分 * 可視化しやすいデータとアルゴリズムでやってみると理解が進む * Lassoが疎になるのはなぜか?L2ノルムとL1ノルムの可視化を通して試してみる * 微分 * SympyをJupyterNotebookで使うと式の微分結果を綺麗に表示してくれる * 数値微分は極限に近づくと精度(桁数)が落ちてしまうが、数式で微分できると(式が分かると)精度を落とさずに計算できる 理解とは別に、実践では既存のライブラリを使っていく * とりあえずscikit-learn * APIがそろっている、ドキュメントがそろっている * 便利、あやめの色分けできた * で、SVMの仕組みを知りたいと思わないの? * ``svc.support_vector_`` で取れるってscikit-lernのドキュメントに書いてあるよ * support_vectorを取り出して分類した色分け図にプロットしてみよう(これがサポートベクターだ) * 内部データ構造を見ることで機械学習アルゴリズムの理解に役立つ * scikit-learnが全てではない * Gensim(自然言語処理のライブラリ) * Gensimのサイトには特徴的な単語を取り出すデモが書いてある(だけ) * 内部パラメータを見たい!けどGensimはドキュメントになにも書いてない * scikit-lernは良くできすぎているので、Gensimのようにドキュメントに内部データのことまで書いてないほうが一般的 * でもコードは大抵よく整理されてるので、コードを読めば色々理解できる * まとめ * Pythonはいいぞ * Sympyはいいぞ * 「中身をよく分かっている」というのは競争力 * 扱えるだけでちやほやされるブームは去った * 中身を知っていると最新の研究や論文を試す地力が付く 感想 独特な発表で面白い。前にPyDataの発表聞いた時も、中身の仕組みを理解しようという話だったので、そういうアプローチを共有したいんだなというのがよくわかった。機械学習学習のいいアプローチは自分の勉強の役にも立ちそう。 Q8A ------ * 深層学習ならどのフレームワークをオススメしますか?(お名前不明) * CaffeとTensorFlwoしか触ったことが無いのでオススメできる立場にないです * 最近実装された論文について教えてください(お名前不明) * 言うと企業秘密に触れちゃうのでちょっと言えないです... * ちょっと前だとBPRというレコメンデーション系のアルゴリズムをやりました * Pythonの2系と3系は今後どうなるの?(お名前不明) * 機械学習をやるならどっちでもいいなじゃない? * 私はPython3を使ってます * あ、みんな3に移りましょう!(笑) * 自分で実装するとしても、Gensimとかびっくりするくらいの速度で動作するのでそこに至る壁をどうやって乗り越えるのか?(お名前不明) * 高速化は後 * だいたいはそこに至る前の精度でNGになる * 役に立つことが分かったら初めて高速化していく * 役に立たないの判断のしどころはどこに?(お名前不明) * アルゴリズムの種類によって色々ある * 収束の速いアルゴリズムであれば小さいデータセットで確認できる * 漸進的なアルゴリズムなら、モデルを作るのに1000回と2000回の差を見て、この後続けていく価値があるのかを見極める 懇親会 ========== .. figure:: photo1.jpg :width: 400 懇親会の準備ができるまで廊下でまつ皆さん .. figure:: photo2.jpg :width: 400 懇親会はピザやお肉やパスタ料理など色々あった (懇親会で盛り上がってるところの写真は撮り忘れた..) 懇親会では、何人かの方とお話しさせていただきました。前職タイムインターメディアの同僚(インフラ系)と会ったのはびっくりした。辻先生(Pythonスタートブックの著者)と初めてお会いして、入門者向けって難しいですよねーという話で盛り上がったり。イベント終了のアナウンスでもなかなかみんな帰らず(気づかず?)懇親会はだいぶ盛り上がってました。 運営の皆さん、発表されたお二方、ありがとうございました。