2016/5/16~5/22
機械学習業界に転職するために勉強をしてきて半年近くになるわけだけど、とうとう先週、7月にはInterviewを受けようということで一つの締め切り設定を課した(ちょうど7/2から日本に帰国する予定があったため、その予定と締め切り設定を合わせた)。この締め切りまでに成果としてChainerでのSRCNN実装を終えたい。
Chainer
いままでTheanoライブラリを使って機械学習を行ってきたけど、他のライブラリフレームワークはどうなのか?ということで、Chainerを使ってみることにした。なぜChainerにしたのか?
- 日本製である
Preferred Networksという日本の会社が作ったオープンソースなプロジェクトであることが非常に親近感を持てる。 - Define by run スキームの採用
正直まだ、厳密な違いとか分かっていないんだけど、、、メインコンセプトとして、Chainerと他の機械学習ライブラリとの違いは、従来の機械学習ライブラリの大半がモデルを決めて構築してから実行するのに対して、Chainerはモデルを毎回実行時に構築できるという事でより柔軟なニューラルネットワークの設計が可能になるという事。
今後、開発でいろいろなモデルを比較・検討したりモデルを組み合わせることによって従来以上の成果を上げることを目指すといった場合にこのモデル構築の柔軟性は重要になると感じた。
(個人的にはOBSと組み合わせた動的なニューラルネットの刈り込み・うまく活性していないユニットのパラメータ再初期化による効率活用に興味がある。Adaptive learning?) - GPUの高速化に力が入れられている。
GPUではnumpy
の代わりにcuda.cupy
を使用することで、GPUデバイス上での計算を高速に行えるようになっているのなど速度面も不足なし。
機械学習ライブラリの比較については下記参照。
SRCNNを改良するためのアイデア
ChainerでのSRCNN実装にあたってのIdea だし。ブレインストーミング的な感じで、思いついたアイデアをここに書き出しておこう。
1.Global ContextはColorizationのPaperにあったようにPlaces2の景色ラベルを使って教師あり学習させればいい、、、?→ただ、これだと学習する要素がGlobalすぎないか?実際にほしいのはもう少し細かい部分Middle featureのはず。
例:毛並、岩肌、木の葉っぱ、、、といった細かい部分の特徴を検出して、ディティールを再現するようなソフトがほしいわけ。ただ、これらの特徴をどうやって学ばせるか?写真の各部分でラベル貼り付けされているものなどはないので、教師なし学習による特徴量の抽出がしたい。
2.上の用途に関しては、Google の猫の顔を教師なし学習で構築した以下の論文が参考になるかも。
“Building high level features using large scale unsupervised learning”
- http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en//archive/unsupervised_icml2012.pdf
- http://static.googleusercontent.com/media/research.google.com/en//archive/unsupervised_icml2012.pdf
- http://research.google.com/pubs/pub38115.html
読了。
要約:Filtering (Weight shareしていないのでConvolutionとは言わない!), L2 Pooling, LCN(Local Contrast Normalization)の3層×3の計9層からなるDeep learning。YouTubeからのランダム画像を10Million枚用いた、教師なし学習での特徴抽出タスク。パラメータ数が1Billionあり、16コア×1000台のコンピュータで3日間かけてのトレーニングという超莫大なデータ量及び計算リソースを使ってでた結果として猫の顔などを自然に特徴抽出できた。
以下、Convolutional Restricted Boltzmann Machine について調査。
読了。
要約:CRBMを用いて、教師なし学習での画像特徴抽出。
Layerを重ねるごとに、Edge→Parts→Objectといった特徴の抽出を実際に達成している。
- CRBM:Convolutional RBMの提案
– Visible layerとHidden layer - Probabilistic Max Pooling
– Pooling層に対応するものをこれで実現。これによってTranslation invariantな性質も持たせることができる。
CONVOLUTIONAL DEEP BELIEF NETWORKS (ppt)
“Empirical Evaluation of Convolutional RBMs for Vision“
その他
DeepPose: Human Pose Estimation via Deep Neural Networks
Deep pose: 人間の部位位置検出をしている。 → 位置検出・Translation invaliantではない例のいいものになりそう?→結果としては、CNN + MLPの組み合わせでx,y座標を算出しているだけだった。SRへの応用は難しそう。
Chainerについて調べていたらアプリがgithubにあるのを偶然見つけた。(論文とは別の人が実装した非公式サンプルアプリ)
論文
- http://arxiv.org/abs/1312.4659
- http://static.googleusercontent.com/media/research.google.com/ja//pubs/archive/42237.pdf
Chainer 実践
SRCNN
Chainer で SRCNNの実装した。
実装始めるまでのChainer勉強にはかなり時間をかけたけど、一度実装を始めてみると、豊富なLink, Functionが揃ってるので、実装はとても簡単にできる印象。Theanoの方からのコード移植という事もあり0からの実装ではなかったが、木曜・金曜の2日間だけで終わってしまった。
日曜にはwaifu2x仕様での実装チェックOK. ChainerにCudnn入れたら驚くほど速くTrainingが終わっていく。。。BNでのチェックもOK, 結論としてBNは入れない方が良いだろうという事に。 (Sigmoid Fnには有用だけど、Leaky ReLUには対して有効じゃなさそう & 今回は画像の復元系なので、もともとの値が重要。BN入れると相対差を重要視しちゃうのであまり良くない(実際黒潰れの写真などができてしまう。))
RBM
目標設定(改め)
7月に
WK20
Step1 waifu2x仕様で実装、週末に電源買う。
WK21
Step1 waifu2x仕様で実装。
Step2 BN入れる。家のPCで動作・パフォーマンス確認
上海行くのであんま進まないかも、、、
WK22
Step3 CRBM作成、cNoteで技術ブログ書き込む。
WK23
Step4 Fusionさせたもので動作させてみる。
→これで徹底的にディープにしてもよいので、パフォーマンスよければ。。。。
WK24
公開 & cNoteにいろいろと書き込む。→パフォーマンスダメだった場合は、、、
WK24 Scene detectionのLayer(Global feature)も入れ込んで、Fusionさせてパフォーマンス確認 & 公開 & cNoteにいろいろと書き込む。
WK25
100 star 達成。 週末にメール送る。
→* 追記:結論を先に書くと100 starなんてまったく達成できなかった。。。
WK26
Interview準備、まとめ。
WK27
Interview