tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニート → 米国CS PhDが諸々書いてます

Data Science Bowl 2017(肺がん検知)の上位手法を調べた

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。時系列狂うかもですがご容赦を

今年2017年の4月に1億円コンペで有名になった、Data Science Bowl 2017 | Kaggleにちょっと参加しました。

画像DNNの知見を貯めようと参加しましたが全く歯が立たたず、2ステージ制の1ステージ目で諦めてしまいました。

このままでは流石に悔しかったので上位手法を調べました。

内容は見ていただければと思いますが、印象的だったのは上位手法ほどシンプルだった点です。

やはりシンプルな手法が実務でもコンペでも最も強い気がします。

NIPS・ICDM 2016論文輪読会を主催 & RSVRGの論文を読んだ

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。時系列狂うかもですがご容赦を

今年2017年2月にNIPS・ICDM 2016論文輪読会を主催しました。会社で参加した人が結構いたので、外部も招いちゃえということでやりました。

内容については、会社ブログを書いたのでそちらを参照してください

www.rco.recruit.co.jp

嬉しいことに多くの発表者に立候補頂き、私の枠埋める用に作ったスライドはお蔵入りしたのですが、

闇に葬り去るにはもったいない気がしたので、公開しました。

内容としては、収束性のオーダーを改善したSVRGをリーマン多様体上に拡張した論文です。

連続最適化の収束性の証明はいつも泣きそうになるんですが、あれがぱっとわかるぐらい頭が良くなりたい。。。

Kaggle Boschコンペ15位でした

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。時系列狂うかもですがご容赦を

昨年2016年の末に、同僚のhskkskさんとg_votteさんとともにBoschコンペに参加してきました

Bosch Production Line Performance | Kaggle

コンペは生産ラインの各種センサー情報から不良品の検知をするものでした。

アンサンブルやモデル作成面では貢献出来たと思うのですが、hskkskさんのデータを詳細に見る力に圧倒的で、彼の貢献が大半を占めてこの結果となりました。

このコンペからKaggleガチでやり始めたのですが、出来る人の作業を間近で見るのが上達の近道なのを実感しました。

特に『Kaggle上位に行くには特別な手法は必要なく、些細なことの積み重ね』というのが感じられて、上位を狙う感覚がわかったのが収穫でした

我々のチームの手法はhskkskさんがKaggle Meetupで話したスライドがあるのでそちらを参考にしてください

決定木からxgboostまで調べてみた

お久しぶりです。最近、色々ありましてブログを再開しようと思います。

基本的に、スライド作って話す事が多いので、まずその辺りのこと書こうと思います。

会社の輪読会でElements of Statistical Learning: data mining, inference, and prediction. 2nd Edition.の10章『Boosting and Additive Trees』の担当になったのと、

Kaggle Boschコンペでxgboostの一部パラメータを意味知らずにチューニングしてたりしたので、調べました。

ネットで探しても意外と"木"って目線でまとまった資料がなかったので、参考なればと思います

あと、英語の勉強で英語資料にしたのですが、インド系や中国系の方からの反応があったりして新鮮でした。

ICML2015読み会 『Sparse Subspace Clustering with Missing Entries』

皆様、こんにちは

最近業務が忙しすぎて更新が滞っております。
分析官の仕事よりも、分析結果をお客様に使って貰うための画面・インフラ構築に忙殺されていたり。。。
私は今後何になって行くのか若干不安を抱える今日この頃です。

久しぶりの投稿ですが新ネタではなく2ヶ月前にPFN様主催のICML読み会で話したので投稿します。

感想

  • 計算時間的に有用性は微妙だが、高次元空間に複数の低次元空間が埋め込まれていて、それをクラスタリングしたいという動機は好きである。
  • カーネルが分かれば、元の行列に欠損値あってもいいよね!という系のアイデアはかなり好き
  • 良い論文だったが、資料にまとめるのに提案手法と既存手法が一杯出てくるので伝え切れて無い気がする。

www.slideshare.net

最近は仕事でアウトプットばかりなので、そろそろ自分にガッツリとインプットの時間を取りたい。

遺伝的アルゴリズムでAA自動生成

皆さまこんちにちは

今回は遺伝的アルゴリズム(GA)でAA自動生成してみたので、コードと資料を共有

コードは以下に公開しています。

github.com

今回のお題

左の画像を、右のようなAAにするのが今回のお題。右は2chのAA職人さんによるものです。
詳細は、下記の資料をご覧下さい。

f:id:tkm2261:20150608171826j:plain

*1

やっぱ人間スゲー

先に結果から、遺伝的アルゴリズムで最適化されていくGIFの共有

f:id:tkm2261:20150608164623g:plain

やはり人間には勝てないか・・・ただGAは評価関数次第なので
我こそは神の評価関数を設計出来るという方は是非ご一報お願いします。

ちょっと前にLTしてきた

実は少し前に、リブセンスさんの勉強会でLTして来たネタです。
LTって分量では無いですが・・・

LTじゃなくて、もう少しちゃんとした勉強会で話そうと思ってたが、
時間だけが過ぎて、自分自身忘れかけてきたのでブログでの共有にしました。

www.slideshare.net

ものを作るのは大事だ

やっぱり、アイデアだけでなく手を動かさないと良くないと思ったネタでした。

イデアは凄い詰まらない理由(忙しい、環境構築出来ない、画像扱えない etc.)で死んでしまうので、

ちゃんとゴールに行き着けるかを、定期的に自分に訓練として課さないと行けないと自戒

*1:画像著作権者の方、問題ありましたらご一報お願いします。

もう迷わない Caffe入門 その1

皆様お久しぶりです。

今回から深層学習(ディープラーニング)フレームワークのcaffeの環境構築使い方について解説していこうと思います。

インストールに難ありと言われるcaffeに対して、AWSインスタンスを立てる所から、
cuDNNでのコンパイル、pycaffe等の使用方法、出来ればDIGITSまで話せると良いなと思っています。

理論的なところに触れる予定は一切ありません。その辺りが気になる方は以下をご参照下さい。

www.amazon.co.jp

www.slideshare.net

www.slideshare.net

www.slideshare.net

ディープラーニングにもう振り回されない

最近は、営業先のお客様からもディープラーニングという単語を聞くようになりました。 我々としては営業機会が増えて良いことなんですが、人工知能ブームと相まって若干加熱しすぎな感もあったり。

会社の上司から「これからはディープラーニングだ!」との号令の元、途方に暮れている方もおられるかと想像しています。

どこまで助けになるか微妙ですが、とりあえず回して精度評価できるとこまでは解説しようと思っています。

一度皆で回した上で、「じゃあ何が出来るの?」といった議論のフェーズに世の中がなって行けば良いなって感じです。

デモを触ってみる

caffeの配布元が既にデモサイトを用意しているので、触ってみる。

demo.caffe.berkeleyvision.org

適当な画像を入れると、1000クラスの所属スコアを出してくれます。

f:id:tkm2261:20150605032825p:plain

確かに、食べ物なので合っていそうです。
困った上司にとりあえず教えておけば、時間が稼げます。

環境構築

サーバの用意

GPUの刺さったLinux機を個人で持ってる方はほぼいないと思うので、AWSで構築します。
設定はデフォルトで大丈夫ですが、今後のことを考えてインスタンスストレージをつけといた方が良いかも。

項目 内容
インスタンスタイプ g2.2xlarge
OS Ubuntu 14.04 LTS

f:id:tkm2261:20150603173621j:plain

g2.2xlargeは定価では時間100円($0.89)と高額なインスタンスなのでスポットインスタンスの利用をオススメします。

スポットインスタンスもちょっと前は時間10円($0.1)ぐらいで借りれましたが、最近は高騰してるので時間30円($0.3)程度は覚悟したほうが良さ気です。

f:id:tkm2261:20150603175707j:plain

※最近はオンデマンド価格を上回るぐらい高騰してます。

CUDAとcuDNNの準備

CUDA7.0とcuDNN v2を入れていきます。

とりあえず、依存ライブラリを入れとく

$ sudo apt-get update
$ sudo apt-get install -y build-essential git libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libatlas-base-dev
$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

カーネルパッケージも追加しておく。詳細は不明

$ sudo apt-get install -y linux-image-extra-`uname -r` linux-headers-`uname -r` linux-image-`uname -r`

次にcudaのインストール。今回はcuda7を入れます。 最新バージョンが出たら適宜コチラをみて変えて下さい。

CUDA 7 Downloads

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo apt-get update
$ sudo apt-get install -y cuda
$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ sudo reboot

cuDNNを以下から調達する。色々登録あるけど頑張って下さい。
NVIDIA® cuDNN – GPU Accelerated Deep Learning

インストールはcudaのところにヘッダとライブラリをぶち込みます。

$ tar zxvf cudnn-6.5-linux-x64-v2.tgz
$ cd cudnn-6.5-linux-x64-v2
$ sudo cp cudnn.h /usr/local/cuda/include
$ sudo  sudo cp libcudnn.so libcudnn_static.a /usr/local/cuda/lib64
$ sudo ldconfig /usr/local/cuda/lib64

caffeのインストール

やっとcaffeを入れます。

$ git clone https://github.com/BVLC/caffe.git
$ cd caffe/
$ cp Makefile.config.example Makefile.config

↑でコピーしたMakefile.configを編集して、4行目のUSE_CUDNNのオプションを有効にする。

USE_CUDNN := 1

コンパイルしてテストしてみる。ここでmodprobeしないと失敗するので要注意

$ sudo modprobe nvidia
$ make all -j8
$ make runtest

pycaffeのインストール

ここまでで一応caffeは動くけど、需要ありそうなのでpycaffeも入れておく。

numpy等はコンパイルすると時間がかかるのでバイナリで入れておく。

BLASにこだわりたい人は、各自お願い致します。

$ sudo apt-get install python-pip python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib cython python-pandas python-skimage

残りの依存ライブラリはcaffeのrequirements.txtで入れる

$ cd python/
$ sudo pip install -r requirements.txt

あとはpycaffeをコンパイルしてPYTHONPATHを通しておく。別の場所に入れた人は適宜変えて下さい。

$ cd ../
$ make pycaffe
$ echo 'export PYTHONPATH=~/caffe/python/:$PYTHONPATH' >> ~/.bashrc
$ source ~/.bashrc

とりあえず動かしてみる

ipython notebookのサンプルが付いているので動かしてみる。

動かすためにライブラリを幾つか入れる。

$ sudo apt-get install libzmq-dev python-tornado ipython ipython-notebook
$ sudo pip install pyzmq jinja2 jsonschema

ここを参考にipython notebookをセットアップ

ipython notebookをリモートサーバ上で動かす。 - 忘れないようにメモっとく

セキュリティグループのポートも開けなとローカルからは見えない。IPは適宜制限して下さい。

f:id:tkm2261:20150605030835p:plain

そんでもって実行

$ ipython notebook caffe/examples/ --profile=myserver

試しにclassification.ipynbを開いて以下が表示されれば成功

f:id:tkm2261:20150605031050p:plain

せっかくcuDNNまで入れたので、2セル目のcaffe.set_mode_cpu()をcaffe.set_mode_gpu()にして実行して下さい。

次回予告

reference model(caffeで配布されているトレーニング済みモデル)を使ったサンプルとか、
何か例を使って解説予定

流石にMNISTは飽きた感があるので、何か面白いものを用意したいところ