2016/4/25~5/1
PC購入
いままでずっとCPUで頑張ってきたけど、機械学習やりたいんだったらGPU使わないと。という事で、マザボ・CPU・メモリ含め一式交換することに(自作PC)。
これは投資ということで、惜しみなくスペックを追求した。
- CPU: Core i7 6700K
- CPU Cooler:
- マザボ:ASUS Z170-A
- Memory: DDR 4 Corsair 8GB × 2
- GPU:MSI GTX 980Ti GAMING 6G
- 電源:Cool Master V750 (7500W)
一番高かったのは(もちろん?)本命のグラボ。こういった専門性の高い製品はマレーシアでは安く買えないので、Amazon.comから買って輸入する形をとった。(日本とも価格比較したけど、アメリカのAmazon.comの方が安かった!)
合計で15万くらいいったのかな、、もらったばかりのボーナスをソッコーで消費してしまったー。
ちなみに到着は、マザボのみ在庫がなかったせいで結局全部そろったのが5月中旬だった。
SRCNN実装
勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。
*このプロジェクトはtheanonSRとしてgithubで公開済み。
- SRCNNアプリは動作するところまではすでに完成。ここから改良していきたい。
- Pexels dataでの動作確認
- 様々なモデルで試す。32x3x3_32x3x3_1x3x3
64x3x3_32x3x3_1x3x3 など。。
32x5x5_32x5x5_1x3x3のトレーニングは終了、32x3x3_32x3x3_1x3x3と大差ない結果に。。。
もっとFilter size 大きくして32x7x7_32x5x5_1x5x5でトレーニング開始。
トレーニング結果に満足してないからひたすらトレーニングさせて待っているけど、このままだとトレーニング頭打ちで終わってしまいそう。
もっとFilter size 大きくして32x7x7_32x5x5_1x5x5でトレーニング、一旦結果出たけどあまり良くなかったので、Epoch増やしてもう一度開始どうやったら端っこの特異的な修正効果を軽減できるのだろうか。。。
Filter数もっと増やす?Layer数もっと増やす?? 4層ネットワークまでは試してみたい。
32x5x5_32x5x5_32x5x5_1x5x5 とか。
32x9x9_32x5x5_32x5x5_1x3x3 とか。多分GPU Instanceじゃないとできない量だろう。。
NNの刈り込み
NNの最適設計・パラメータWの刈り込みアルゴリズムに関して、Optimal Brain Damageを読み始めた。PRML p251で紹介されていたので知ってた。
これは要約すると、ヘッセ行列の対角成分H_ii だけ見て、パラメータW_iiの重要度合い=”Saliency”がわかるよって感じだった。
つぎに以下の本を見つけた。
- Adaptive Learning of Polynomial Networks
- Adaptive Learning of Polynomial Networks: Genetic Programming, Backpropagation and Bayesian Methods (Genetic and Evolutionary Computation)
この6.5章にNetwork Pruningが乗ってたので読んだ。Optimal Brain Damageのほかに、Optimal Brain Surgeonという手法があることを紹介していた。
OBDとOBSの違い
OBD: Diagonal approximation使っているので、パラメータの数nに対して計算時間がO(n)で済む。
OBS: 非対角項の効果もしっかり取り入れているので、計算時間がもっとかかる(多分O(n^2))、ただし、性能はOBDよりいいっぽい。
疑問点:どちらもSaliencyを図るのに、ΔW_ijではなく、W_ijの実際の値を使っている。なぜだろう。。。これだとW_ijの絶対値が大きいものほどはじかれやすくなっちゃう気がする。→ここでは無関係な正則化の効果を入れ込んじゃってると思う。
疑問点の答:W_ijを枝刈りする場合、W_ijの値を0と置きなおすことに相当する。つまりW_ij ->0という値の変化になるので、総変化量がH_kk W_kk^2 で見積もられる。(つまりこれはH_kkが[0,W_ij]の範囲内で大きく変化しないという仮定を含んでいることになる。)
OBS: Optimal Brain Surgeon
- http://ee.caltech.edu/Babak/pubs/conferences/00298572.pdf
- https://papers.nips.cc/paper/647-second-order-derivatives-for-network-pruning-optimal-brain-surgeon.pdf
- https://papers.nips.cc/paper/749-optimal-brain-surgeon-extensions-and-performance-comparisons.pdf
振り返り
もう一旦実装は終了で、トレーニング結果待ちの段階に入ってきている。
次のステップを真剣に考えていかないと。
①SRCNN-theanoのPublish
やっぱりある程度いいパフォーマンスが出るネットワーク構築してからでないと公開できない。
Deep netでのトレーニング必須。→AWSのGPU Instance使って計算させてみるか?
追加機能チェック1.トレーニングパラメーターWの選別作業工程を提案する。
追加機能チェック2.動画で使えるかどうか。
②プロコン
どこまでやるか、、、?→ともかく蟻本は読了する!
CLion をWindowsにてSetupした。
どこまでやれば、実績になるだろうか、、、。。。 →公の指標必要なら、Top coderとかGCJ参加するべき。調べ始めたい。
現状
①SRCNN-theano
実装は良さげ。あとはトレーニング結果得るのみ。(PC無いので待ち工程)→2週間だけAWSのGPU Instance使っちゃうのがいいと思う。
MSEの平均の取り方はちゃんとデータサイズに依存しないようにしっかりチェックしたい。
結果がちゃんと出たら、githubにて公開する。目標〆切5/7
これ用の記事をcorochannNoteにでもなんでもいいから書いて、100Star持っていきたい。。。目標〆切5/21
②プロコン
5/21までに3章は全部終わらせる。→5ページ/日 目標
Top coder, GCJなどで腕試し一回したい
<勉強>
I. Deeplearning.netとsinhrksさんのブログ → DBNまでで一旦OKとする。その他は必要なとき学ぶベースという事で。
II. Chainer → サンプルコードだけでいいから実装して試してみること。
III. PRML → 時間あるとき読みたいけど、、、Deferとする。
IV. Reinforcement learning → 時間あるとき読みたいけど、、、Deferとする。