社会人からはじめる機械学習勉強 Week 17 – GPU購入 & TheanoでSRCNN実装3

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”がわかるよって感じだった。

つぎに以下の本を見つけた。

この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

振り返り

もう一旦実装は終了で、トレーニング結果待ちの段階に入ってきている。
次のステップを真剣に考えていかないと。

①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とする。

社会人からはじめる機械学習勉強 Week 16 – TheanoでSRCNN実装2

2016/4/18~4/24

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

予定:黒字、実際:赤字

  • Model のSave, Load機能を実装する。
    → OK
  • jsonで管理できるように。 
    → OK
  • ログをファイルにセーブ
    → OK print関数がそのまま使える。
  • YCbCrでのYのみ使う簡単な方(cf: RGB3色でトレーニング)で、アプリ完成させる。
    → OK
  • TrainingにMomentumを実装、試す。
    → OK、ただしあまりいい効果が見られなかったので、次の方法を試したい。
  • ADAMで試す。
    → OK。

学習率の適応方法・調整方法

調べてみると、いろいろあるよう。

その中でも最新で提案されているAdamが、MomentumとAdaGradのコンセプトを取り入れていそうだったのでこれを実装してみたいと思う。→実装してみたら、収束も普通より早いし、極小値も普通のより低い値まで行ったのでかなりよさそう。なぜこうなるのかの原理が少し理解できていないけど、、、。

データの収集

Places2 の写真データ使用していたけど品質が良くないので、他のを探したい。

そこで、Pexelから写真一括取得してトレーニングしたい。目標は5000写真。

例えばこんなURLが取れる

-mediumを取ればオリジナル画像が得られる。

Pexelの自動写真ダウンロードがしたい。infinite scroll タイプなので、どうやって写真データ取得できるか?Chromeでブレークポイント張って調べた結果

https://www.pexels.com/?format=js&page=1

このURLでpage部分変えていけば情報取得できそう。→OK、結果Pexelから7000写真取得。総サイズも400MBで大きすぎずいい感じ。これで本番トレーニングしたいと思う。

評価関数・ロス関数・誤差関数

SRCNN元論文で使われていたPSNRという評価関数は結局MSEと同じ誤差を計算している。そのままMSE使えばOKという事がわかった。

社会人からはじめる機械学習勉強 Week 15 – SRCNN実装

2016/4/11~4/17

SRCNN実装

勉強だけでは実力は身につかないので、実践して見ようという事で、waifu2xで資料があることからSRCNNをTheanoを用いて自分で実装してみることに。

*このプロジェクトはtheanonSRとしてgithubで公開済み。

予定:黒字、実際:赤字

エラーでまくってもいいので、ツール走らせるまで終わらせる。
家での動作確認まで終わらせる。

モジュール実装:4階テンソルをnumpyで実装してPickleするところで躓き中。ツール走らせるなんてまだまだ先。木曜までに実装を進めていく感じにしたい。

モジュール実装1 Theano sharedを用いたcPickleでのphoto.pkl.gz保存まで実装。4階テンソルのdata x, y に対してConvLayerが動くように修正。

モジュール実装:上終わって、実際にtrainingを動かせるところまでOK。ただ、Convolution結果の画像が真っ黒で計算がうまくいっていない模様。。。

モジュール実装2 実際にtrainingを動かせるように実装。

モジュール実装2:画像を0-1に正規化、あとlearning rateの調整にて実際に動くようになるところまでOK。activationどうすればいい?→activationなしだとただの線形変換になってしまう。。。→ReLUっぽいのを使うのがよさそう

  • 案1 Max(0, x)      → 負の値を0へ。
  • 案2 Min(Max(0, x), 1) → 常に0-1で正規化。こっちにしたいかなー。。。

モジュール実装3 動作するところまで実装終わらせる。

モジュール実装3: 上記案2を試したところvanishing gradient が発生して途中で結果がサチってしまい望む結果が得られなかった。代わりにLReLU (Leak ReLU) を試してるところだけどうまく動いてくれない。。。バグ特定中、、

全体的に動作確認がとれるまでいきたい。

モジュール実装3: LReLUで動作確認とれた。1日中回して1000epoch後、割といい精度で画像復元できてるけどトレーニング続けたらもっとよくなりそう。週末も回しっぱなしにしとく予定。どうやらTraining parameterのチューニングは短い時間ではできそうにない。

RGBでやるとパラメータのチューニング(Training)がよりシビアになる傾向にあると思う。Trainingにも時間epochがかかるし。→YCbCrでやってみることに。YCbCrでトレーニング回す。3層で。

Alor Setar へ旅行に行っていたため進捗なし。トレーニングは回しつづけてた。

今後の予定

来週

評価関数の実装。(どれだけいいSRができているかを比較検討するため。)

再来週

実際にいろいろなパラメータでテストしていく。

WK17, 18でパラメータと動作時間の関係を出していく。
可能ならAWSでの環境構築もしてしまいたい。

WK19 可能なら動画への応用検討を開始。(これができるようならマネタイズもできるかも。)
    Star 100とれないかなー?

WK20,21,22 動画への応用へ。

社会人からはじめる機械学習勉強 Week 14 – PRML4章まで

2016/4/4~4/10

今週1週間、会社で出張が入ったため、実装面での進捗はなし。家のPCは使えいないということで、本を持参して勉強をしていた。

PRML

機械学習では一番有名な本。ただし学術研究としての本であり、ただ実装できればいいエンジニアにとっては難易度は高いと思う。

読み始めから5章途中まで行った。

[書評]
副題にもあるとおり、パターン認識をベイズ的な取り扱いから理論立てていく本。
アカデミックに使用されている感じが強く、理論が多くてちゃんと計算も追ったり、演習もやるとなると読むのには時間がかかりそう。
演習まできちんとこなせば、確率論・微分積分・分布関数などこの分野を扱うにあたって必要な数学の基礎はしっかり身に付くと思う。
とくに頻度主義(事前分布を考慮しない、実践面ではこっちで十分なことが多いか)・ベイズ主義(事前分布を考慮して最尤推定する、計算が一段階難しくなる。)
にスポットを当てて書かれていて、ベイズ主義を学びたい場合はこの本を読むことは必須だろう。

しかし、現在多くのアプリケーションで用いられているのは頻度主義の理解で十分で、これを理解するためだけにこの本を読むのはtoo muchな印象。
上巻の5章・ニューラルネットワークまでだとそんな感じだけど、下巻で応用例を扱うっぽいので、ここを読んでみないと何とも言えないけど。

社会人からはじめる機械学習勉強 Week 13 – SRCNNの実装開始

2016/3/28~4/3

3/26~30まではPhuketへの旅行へ行っていたため、特に何も進まず。

機械学習用パソコンセットアップ

家のUbuntu環境をセットアップしなおした。現状多くのソフトがサポートしている環境であるUbuntu 14.04でセットアップ。

Python セットアップ

以下備忘録として、メモ抜粋。

python, numpy, scipy, matplotlib install

$ sudo apt-get install python python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib

Ref: http://sat0yu.hatenablog.jp/entry/20130302/1362172589

$ sudo apt-get install python-pip
$ sudo pip –proxy=http://xx.xx.xx.xx:port install milksets

PIP setting

[Encode change from ‘ascii’ to ‘utf-8’]

This is necessary for pip to work properly on Ubuntu
Change default encoding

add write below at /usr/lib/python2.7/sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')

Theano install

For Ubuntu 11.10 through 14.04:

$ sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ 
$ libopenblas-dev git
sudo pip install Theano

Updating theano module

$ sudo pip --proxy=http://xx.xx.xx.xx:yyyy install --upgrade theano
$ theano-cache clear

Upgrading scipy

$ sudo pip --proxy=http://43.74.40.42:10080 install --upgrade scipy

We can upgrade scipy when we get below warning

Pandas install

sudo pip install pandas

Image processing: OpenCV, CV2

I don’t know which one is necessary. all 4 procedures, it worked fine.

1. Install by pip

$ sudo pip --proxy=http://43.74.40.42:10080 install cv2

2. Install python-opencv

$ sudo apt-get install python-opencv

3. using script

Make “opencv.sh” and write following and execute.

version="$(wget -q -O - http://sourceforge.net/projects/opencvlibrary/files/opencv-unix | egrep -m1 -o '\"[0-9](\.[0-9]+)+' | cut -c2-)"
echo "Installing OpenCV" $version
mkdir OpenCV
cd OpenCV
echo "Removing any pre-installed ffmpeg and x264"
sudo apt-get -qq remove ffmpeg x264 libx264-dev
echo "Installing Dependenices"
sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg cmake qt5-default checkinstall
echo "Downloading OpenCV" $version
wget -O OpenCV-$version.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/$version/opencv-"$version".zip/download
echo "Installing OpenCV" $version
unzip OpenCV-$version.zip
cd opencv-$version
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j2
sudo checkinstall
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
echo "OpenCV" $version "ready to be used"

4. PYTHONPATH setting

Write inside ~/.bashrc

# Python Path setting
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

Chainer install

Before installing chainer, I needed to install google apputils beforehand!!!

$ sudo pip --proxy=http://xx.xx.xx.xx:yyyyy install google-apputils
$ sudo pip --proxy=http://xx.xx.xx.xx:yyyyy install chainer

SRCNN実装

以下、関連するリンク集。

SRCNN Website サンプルソースコードなど

Matlab, caffeを使って実装しているよう。

・写真のデータセットについて
1.ILSVRC
http://image-net.org/challenges/LSVRC/2013/
http://image-net.org/challenges/LSVRC/2015/
ILSVRCは、Detection, classification task用の写真Datasetを配っているので、写真の質は必ずしも良くないものが多いので不適切な気がする。

2.Places2
http://places2.csail.mit.edu/index.html
http://places2.csail.mit.edu/download.html
景色のDetectionのためのProjectで、10M枚を超える(500GB程度)写真のDatasetを提供している。景色写真が大量にほしかったらここで足りそう。
とりあえず一番小さいVaridation dataset 1.2GBだけダウンロードした。

3.Pexel (Flickrとかもあり)
本格的なTraining phaseに入る前までは、少ない枚数のサンプルがあれば十分なので、手動でPexelからCC0ライセンスの写真を使うことに。→最終的にはこれを使って訓練してる。

社会人からはじめる機械学習勉強 Week 12 – Theano tutorial Restricted Boltzmann Machine

2016/3/21~3/27

ディープラーニング実践勉強 Theano

先週から引き続き、ディープラーニングの実践勉強。

先週から引き続き教師なし学習編。先週Auto Encoderを一気にマスターしたので、今週はRestricted Boltzmann Machine (RBM)を一気にマスターしていく。

構成

6章でRBMについて学ぶ。この時点では単層の教師なし学習。

7章でRBMを積み重ねてPretrainingを行っていくDeep Belief Networkについて学ぶ。

6章 Restricted Boltzmann Machines

教材

細かい説明は上のリンク参照。また、「深層学習」でもRBMに説明されているので、読むとよい。

正直いままで学んできたものとは段違いに理解難易度が上がる。

7章 Deep Belief Networks 

教材

同上で詳細は略。Stacked Denoising AutoEncoderでやった時と同様に、1層目から順にPretrainingしていくことで学習の安定化を図り効果を高めるというもの。

設定している目標

2章/週のペースの勢いでやっていって4月末までに全部終わらせたい。

→結果論として次週WK13からは実践編ということで、SRCNNの実装に入ったこともあり勉強に時間とれなくなった。また、残りの章はこれまでの章と比べると説明が断片的で、補足的な感じがあるので、一旦優先度を下げて今回はここでdeeplearning.netの学習終了とする。

残りの部分についてはまた暇な時間ができたとき・使う必要に迫られたときに学習することにしようと思う。

社会人からはじめる機械学習勉強 Week 11 – Theano tutorial Auto Encoder

2016/3/14~3/20

ディープラーニング実践勉強 Theano

先週から引き続き、ディープラーニングの実践勉強。

先週、MLPとCNNを学び、教師あり学習をすべて終えたので、今週からは教師なし学習編。Auto Encoder, Denoising AutoencodersとStacked Denoising Auto-Encodersの部分、ということでAuto Encoderを一気にマスターする。

教師なし学習の意義・手法

教師なし学習というと、ラベル付けがされていない(正解が存在しない)データからある特定のデータの偏り方の分布=クラスタを見つけてグループ分けするというイメージ。(Coursera “Machine Learning” by Andreaw Ng ではそういった紹介もされていた。)しかし、教師なし学習のもう一つの利用法として教師あり学習の効率化のために用いることもできる。

deelplearning.netのTutorialでは一貫してMNISTのクラス分類タスクを課題としている。これは正解となるラベルが与えられているので、わざわざ教師なし学習をするメリットがないように思うかもしれない。しかし、教師なし学習を導入することで、各層の事前学習(Pretraining)が行えるようになりディープラーニングを効率化させることができる。

ディープラーニングで層を深くしていくと全体の層を一度にうまく学習させるのが難しくなってくる。例えば、Sigmoid関数を活性化関数として利用する場合には活性前の値が小さかったり大きかったりするとほぼ0か1に張り付いてしまい、その後の学習が現実時間では進まなくなる。そこで、全体を一度に学習させるのではなく、初めの各層を”データの特徴抽出をするための層”として事前学習させてあげることで本番の学習時に上記のような、学習がストップしてしまうといったことを回避することができディープラーニングをより深い層まで構築していくことができるようになる。

教師なし学習は、正解ラベルをみずに、入力データの統計的偏りだけを見ている→”データの特徴抽出”を行っており、全体の層を用いずに初めの各層だけでの事前学習を可能にする。

deelplearning.netのTutorialで紹介されている教師なし学習は大まかに分類すると2つで、Auto EncoderとRestricted Boltzmann Machineとなる。今週はAuto Encoderを勉強する。

まとめ

  • 教師なし学習の本質は”データの潜在的な特徴抽出”を行えるということ。
  • 教師なし学習の2大手法
    • Auto Encoder  (オートエンコーダ)
    • Restricted Boltzmann Machine (制約ボルツマンマシン)

構成

4章で教師なし学習の”Auto Encoder”、それを改良したモデルである”Denoising Autoencoders”について学ぶ。

5章でAuto Encoderを複数層重ねて、教師あり学習に組み込むためのテクニックとして”Stacked Denoising Autoencoders”について学ぶ。

4章 Auto Encoders, Denoising Autoencoders

教材

細かい説明は上のリンクがわかりやすいので省略。

仕組みとしては、オートエンコーダは入力データを1.エンコード→2.デコードというプロセスで学習させる。入力データを復元できるようにエンコードするということは入力データの特徴をしっかりととらえているという事。デコード後の出力が入力と等しくなるようにするという問題設定をすることで、教師あり学習と同じように学習が行える。用いるのモデルは以前学習済みのMLP。

また、入力(画像)にノイズを加えてから入力してモデルを学習させることで、より本質的的な特徴量を見出すことができるようになり学習の効果があがる(事が多い)。→Denoising Auto Encoder。

5章 Stacked Denoising Auto-Encoders 

教材

同上で詳細は略。

はじめに事前学習としてDenoising Auto Encoderで1層目を学習させ、学習済みパラメータを用いた1層目と新たに足された2層目でDenoising Auto Encoderで2層目を学習させる。。。というように1層ずつ事前学習を積み重ねていくことができる。最後にきちんと事前学習されたパラメータから初めて通常の教師あり学習をすることで学習の効果を上げる・学習を安定させて進めることができる。というもの。

設定している目標

2章/週のペースの勢いでやっていって4月末までに全部終わらせたい。

「深層学習」読了

今まで読んできた、「深層学習」を読み終わった。

ディープラーニングについての理論が学べる本は少なかったのでとてもよかった。特に、CNN, RNN, RBMについて学ぶことができた。

Waifu2xの仕組み理解

先週CNNも勉強したことだし、そろそろ2月頭から興味をもっていたwaifu2xの動作も理解できるかな。という事でwaifu2xの勉強開始。

オリジナルのアイデアである、SRCNNの論文読んだ。

アイデアはCNNを使って、よく行われるタスクである画像のClassificationの代わりに、拡大画像の復元を行うというだけのものなので理解は簡単にできた。

ただ、オリジナルの論文とwaifu2xでは層の深さや畳み込みフィルターのサイズなどのパラメータ設定値が結構違う模様。このあたり(NNのパラメータ設計)がパフォーマンスにどのように影響してくるのかは興味あるところ。

waifu2xリンク集:

社会人からはじめる機械学習勉強 Week 10 – Theano tutorial MLP, CNN

2016/3/7~3/13

ディープラーニング実践勉強 Theano

先週から引き続き、ディープラーニングの実践勉強。

今週は2章のMultilayer Perceptronと3章のDeep Convolutional Networkを学ぶ。前半の教師あり学習編はこれで全部となる。

2章 Multilayer Perceptron

教材

Multilayer Perceptron(MLP)多層パーセプトロンは先週やったLogistic Regressionを多層にしただけなので、理解も実装もそこまで難しくない。1.5日程度で写経も終わらせて理解できた。

1月から勉強始めてきて、ようやく機械学習の勉強から今ホットな最先端技術であるディープラーニングまでたどり着いたという印象。

日本語のブログの方ではMLPの動作のVisualizationなんかもされていてより理解しやすくなってる。

3章 Deep Convolutional Network

教材

画像認識で最もメジャーな手法として用いられている、Convolutional Neural Network (CNN) 畳み込みニューラルネットワークの勉強。waifu2xでも使われているのでとても興味を持っていた分野にたどりついた。

ちなみに理論面は「深層学習」の書籍を合わせて読んでおくとよりわかりやすいと思う。(自分は英語だけでは100%理解できないので。)

学習のポイントとしてはCNNに用いられている層には

  • Convolution layer:畳み込み層
  • Max pooling layer

があるので、まずはこれらを一つ一つ実装して動作確認することで理解していくとよい。実際にConvolutional Neural Networks (LeNet)では、オオカミの写真を使ってConvolutionの説明、次の節でMax Poolingの説明をしている。

日本語のブログTheano で Deep Learning <3> : 畳み込みニューラルネットワークを参考に自分で持ってきた写真でConvolutionとMax Poolingを実際に試した。→実践すると理解が深まるし、少しコードをいじることで応用力もつくので良いと思う。

ここまで終わったら、公式Tutorialの方のCNN Putting all togetherを写経して試す。CNNいままで本で理論だけ勉強してイメージしづらく難しいと思っていたけど、実践しながら勉強していくことで理解できた!

設定している目標

2章/週のペースの勢いでやっていって4月末までに全部終わらせたい。

Coursera → “Machine Learning” 学習完了

引き続き、Courseraを勉強。

Coursera “Machine Learning” by Andreaw Ng 
 1日2つくらいのペースでVideo見ていっている(通勤前の30分くらいのみ)

今週とうとうすべて見終った。ビデオなのでイメージ説明もあるし、解説が丁寧でとってもわかりやすかった。Andreaw Ng先生ありがとうございました。

中期プラン

2月中は基礎づくり。

3月にDeep learning, nural network, convolutional nural networkに入っていけるのが目標。
3月初め現状: 実践面ではこれからやっとLogisticから始めるくらいなので予定より遅れているけど、理論部分はCNNも大体把握できてる。上記のDeeplearning.netで進めていきたい。

4月にはDeep learning, nural network, convolutional nural networkに入ること。実際にツールをトライ&エラーで試せるようになること。
 予定そのままで。

5月になにかで実践を始めたい。wife2xを自分で完全にソースコード追えるようになるとかとか。

6月 強化学習に移る?写真ではなく動画のUpscaleをCNNでできないか??

社会人からはじめる機械学習勉強 Week 9 – Theano tutorial Logistic Regression

2016/2/29~3/6

deeplearning.net tutorial

先週から引き続き、ディープラーニングの実践勉強。

、、、ググっていたら同じように最近Deeplearning.netを学び始めている人のBlogを発見。しかもわかりやすい!

ということで、上二つを交互に見ながら進めていくことに。

Python Tutorial 

Theano に入る前の基礎勉強。9章のクラスを読了。Iterator, Generatorについて学んだ。

1章 Logistic Regression

Deeplearning.netでは、MNISTという手書きの数字0~9を画像識別するタスクを、各手法を通じて実装していくことで各手法の理論・実装方法やTheanoの使い方を理解していくことができる。MNISTの識別タスクは機械学習ではHello worldにあたる入門の位置づけ的存在のよう。

今週は、1章のLogistic regression読了。そして実践力をつけるために、Deeplearning.netのソースコードをCloneし、そのコードを写経していった。

写経はとても重要だと思う、実際に書きながら追っていくことで結構理解が深まった。

とくに感じた(はまった)点として、Pythonは変数の型宣言がないために、その変数がなになのか、とくに機械学習の場合はその変数の次元(ベクトル・行列なのか、また各階数におけるの次元数など。)が明記されていないためわかりづらい。また、Numpyにおいて、ベクトルと行列の演算がどうなるのか(暗黙に次元数が違うものを足し算する場合の挙動など)は実際に簡単なコード動かしながら理解していかないと、わからないだろう。とくに、写経においては、各変数について細かく次元を書き下していくと理解ができる。

目標設定

4月末までに全部終わらせたい。上記のブログよりはやい2章/週のペースの勢いでやらないといけない、、、1.5か月で終えられたら最高だけど。。。

Coursera

引き続き、Courseraを勉強中。

Coursera “Machine Learning” by Andreaw Ng 
 1日2つくらいのペースでVideo見ていっている(通勤前の30分くらいのみ)、2月中に終わりたい → 来週までに終えたい。

社会人からはじめる機械学習勉強 Week 8 – deeplearning.net

2016/2/22~2/28

deeplearning.net tutorial

もう機械学習の勉強を始めて2か月もたっているわけで、とにかくもう理論勉強だけではなく、実装ができるような力をつけていきたい。やっぱり実装というのは参考コーディング例などがないと難しいわけで、機械学習に詳しい友達がいない自分はどこから探していいのかわからなかった。

ともあれはじめないと進まないので、実践ディープラーニングで勧められていたhttp://deeplearning.net/tutorial/を始めてみたい。
このチュートリアル内に書いてあるように、Theanoの勉強から始めることに。

Python Tutorial 

まずはPythonの基礎・概要をざっと学習するところから。これはversion 3の説明のよう。。。

6章くらいまで流し読みして終わり。1日くらい。
9章のクラスは読んだ。1節はScopeの話だが文字ばっかなので飛ばした方が良い。

numpy quickstart tutorial

Pythonでベクトル・行列演算をする場合に使うライブラリであるnumpyの説明。Quickstart tutorialだけでも丸一日かかるくらいの分量がある。

ArrayとMatrixの違い → Array使っとけばよし。

Theano tutorial

ここまではTheanoを使うための基礎知識準備で、これがメインコンテンツ。Theanoは機械学習のためのライブラリ。来週から本格的にTheanoの勉強に入りたい。

Theano関連で見つけた参考リンク

知能コンピューティングに関わる技術情報を公開していく予定です。

Theano による Amazon Web Service (AWS) 上での GPU 計算

本文書では AWS の GPU 計算サーバ (GPU インスタンス) 上で Theano を使用する方法を説明します。 Theano 入門 で紹介したプログラムを CPU と GPU で実行し、その計算速度を比較します。

Theano 入門

Python 用の数値計算ライブラリ Theano の使い方を説明します。応用例として Restricted Boltzmann Machine を実装します。

http://www.chino-js.com/ja/tech.html より

Python 開発環境構築 - PyCharm

PythonのコーディングにはPyCharmを使用することにした。PyCharmはJetBrains社開発のIntelliJをベースプラットフォームとしているIDEのPython用。Web関連の機能を使用しなければ無料で使用できる。Android開発をしていた自分にとってはAndroid Studioと同じPlatformで動いてて使いやすい!

実践編その他

Logistic regressionの実践をこのブログのコピーして実行してみた。

多クラス分類もしっかりやってる。

理論編はこちらが微分までしっかりやっていてよい。

*上のブログはMathJaxっていう数式Webエディタ使ってて、ブログでTex使いたかったらこれはいいなーと思った!
→1日かかったけどできた。(でも収束がおそい、、、なんかコードミスってるかも。)

Coursera

引き続き、Courseraを勉強中。

Coursera “Machine Learning” by Andreaw Ng 
 1日2つくらいのペースでVideo見ていっている(通勤前の30分くらいのみ)、2月中に終わりたい→けど無理そうだな。。。