学習でちょっとあそんでみた話

Juiz(先日作った我が家のディープラーニング用マシン)が無事起動して、セットアップを進める傍ら、Labellioというサービスを使って学習して遊んでみました。

Labellioで学習体験

このLabellioってサービスは、任意の画像を学習させて識別させるということを提供するクラウドです。
これがまたすごくて、何がすごいってとても簡単なんですよ。登録はgoogleアカウントでできて、その後の学習用のサンプルはなんとキーワードだけでBingから検索してきてくれる!全く知らなくても5分で遊べるサービスです。

実際昨日は昼休みに「ONEPEACE」「NARUTO」で学習させてマイナーキャラを食わせて識別できるかなどをやっていました。
たとえばこんな感じ。
f:id:sora_sakaki:20150702101222p:plain

あとニッチな話ですが絵師さんのkaroryさんとななろば華さんの絵が似てるという話があるのでそれも識別してみました。





というわけで、5分でやっつけた学習でしたが、わりと識別できました。余談ですがどちらの絵師さんも好きでタペストリとか集めてます。
ディープラーニングしようと環境を整えている自分ですが、実際に自分で画像を識別したのは初めてだったので楽しかったです。是非体験してください!

Juizの進捗

とりあえずCUDA, Caffe, DIGITSのインストールまで終わって無事MNISTの学習などができるようになりました。
それはそうと、DIGITSが落ちると再起動後すでに作成済みのモデルデータが一覧から消えて認識されないんですが、なにが原因なんですかね?

PRML輪読1日目

ディープラーニングの話と並行して、週2でPRMLの輪読を始めました。1日で用意は大変だった....


今日の分は、1章の始めから1-2の途中までです。
話の流れとしては、サンプリングデータを多項式でフィッティングし、その多項式の自由度を大きくするとうまくいかなくなるがそれをなんとか解決しよう、というものです。


まずあるサンプリングデータを多項式
{ \displaystyle

f(x) = \sum_{j=1}^M w_j x^j

}
で最小二乗法を用いてフィッティングする。サンプル数に対して項数Mが十分近い数になると本来のカーブを無視してほぼ全ての点をなぞるようなカーブになり、項数がサンプル数-1になったときに全ての点を通るようになる。これは納得できる結果で、方程式において数式の本数-1個の定数を決めることができることを考えると、この場合もデータ点の数だけ w_j の方程式が得られるから、情報量的に係数は一意に定めうるわけです。

以前、某NPOで自由落下実験の教材を作成していたとき、同じ問題に当たりました。簡易で小さい実験装置だったため、8点程度しかデータが取れなかったのですが、空気抵抗の影響を見たいと3次や4次の多項式でフィッティングするわけです。すると、3次や4次の補正項が大きくなって、重力加速度の項である2次の項は0.3とかとても小さな数になり、重力加速度は0.6m/sだった!とわけのわからない結果が出ます。
もちろんこれは期待した結果ではないので、この時は結局空気抵抗を無視して2次でフィッティングして事なきを得ました。(空気抵抗の影響がほとんどなかったため)


脱線してしまったけど、このような過学習をさける為に関数が与える出力は確率的な値を取るという仮定をして、そこに正規分布を導入する。これによりある程度誤差や正則化(この場合における過学習を避けるアプローチ)について分析するというのがこの後の流れとなる。


以上、非常においしいところで終わってしまった。さすがに1日の、始発でジョナサンにいって籠って作業した朝の時間だけで用意するにはこの辺が限界でした。
個人的に面白かった部分としては、確率を考慮しないフィッティングでも、誤差の関数に補正項として係数ベクトルの長さに関する項を導入することである程度対応できるというところでしょうか。苦い思い出があるだけに、なるほどと言わされました。
また、ベイズ確率については情報が増えればそれで確率が変化する、という考えのようですがWikipediaの情報も補足的に加えたところ、つまりこれは観測に必要な情報が足りていないから、情報が増えれば本来の正しい確率に近づく、という考え方のようですね。少し決定論的なほうこうにバランスが悪い感じもしますが、わりとよさそうです。
あとはこの辺の確率論のどれかが、集合論の拡張だ、という記述を本文中のどこかで見かけた気がしたんだけどどこだろう。それが気になる。

ディープラーニング始めました

ディープラーニングについて聞くきっかけがあって、面白そうだなと思っていろいろいろいろ調べ始めたのが先週のこと。
勉強ってことでPRML読もうかとか同期と話しつつ、でもこのパターン、既存の情報収集が足りてないよな、と思い調べたところ、とりあえず数学とか抜きにしてグラボがあれば戦えるらしい。
そんなこんなで最近いろいろマシンを作っているらしいshi3zさんに相談したところおすすめの構成を教えて頂き、気づいたら....
f:id:sora_sakaki:20150628214606j:plain
ばばーんということでそろえてしまった!

構成としては

  • CPU: intel i3-4160
  • RAM: elixir DDR3 8GB 12800 * 4 (32GB)
  • M/B: ASUS H97-PRO
  • GPU: PALiT NE5X98T015JB (GForce GTX 980 Ti)
  • SSD: SanDisk SDSSDXPS480GJ25 (480GB, R/W 550MB/s 515MB/s)
  • POW: Owltech PPA7501407 (750W 80+SILVER)

というかんじ。
グラボはリテールなので他メーカーでも同じだと思うのですが、ドスパラで安かったのでこれを購入した。
他だとこんなかんじ。

これでどこまで行けるか。ひとまずUbuntuのインストールから!