ディープラーニングは色々な知識が必要です。
「チュートリアル動かしました」で止まったままの人も多いでしょう。
そこで、自分がchainerを理解しながら動かした時の方法を書きます。
大前提
とは言ったものの、誰でも入門は無理なので。
以下が最低限の前提です。
数学:微分積分、行列、確率とか聞いても「ああ、あれね・・・」くらいには思う
IT:Pythonがそれなりに分かる。numpyはそこそこ分かる。
機械学習:説明変数とか、目的変数とか分類とかが何となく分かる
やる気:引っかかった時に、調べる気力がある
ゴール
chainerを自分で色々試せるレベルになる。
あくまで試せるレベルになるだけです。
それでも千里の道も一歩からです。
一緒に頑張りましょう。
ちなみになぜchainerか、というと、
入門者が触るには、バランスは良さそうに見えたからです。
最初の最初
ディープラーニングは歴史から学ばなきゃ!とか
数式がわからん奴はモグリwwwとか、
社会が変わる!仕事がなくなる!みたいな煽りは
一旦忘れて、必要最小限のインプットを行います。
おすすめの本
前も記事にしましたが、
この本がやはりおすすめ。
(理論や実装に傾倒しすぎず、煽りも少なく最小限の情報が載っている)
初めてのディープラーニング --オープンソース"Caffe"による演習付き
- 作者: 武井宏将
- 出版社/メーカー: リックテレコム
- 発売日: 2016/02/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
※以前の記事
esu-ko.hatenablog.com
無理に全て理解しようとせず、
雜誌感覚で読み飛ばしてください。
(実装は試さないほうがいいです)
自分の場合は、用語とかは書き出して覚えたり、
ノートに簡単な整理をしました。
あたりが、1行でなんとなく言える位になるといい感じです。
あくまでなんとなく。数式は後回し。
実装を試す(2時間)
ここでモジュールのチュートリアルを試すと、先に進まなくなります。
TensorBoardといったメインじゃない所に時間とられます。
ので、以下を参考に、最小限を自分の手で書くことで学びます。
ニューラルネットの実装に何が必要か?を体験してみます。
ライブラリーを使わずにPythonでニューラルネットワークを構築してみる
書いてみる、といっても完全に再現する必要はありません。
(自分はグラフとか、難しいところは書かなかった)
なんでこんな実装が必要なんだ?とか、あーここ自分で書けと言われたらわからん、
といった感覚を掴みます。
ニューラルネットの実装に必要な要素をつかむのが目的です。
全部理解する必要もありません。
むしろ、理解せずただ、必死にコピーして動いた−というのが一番無駄だからやめましょう。
- モデルを作ること
- フォワードや最適化が必要なこと
- どんな変数が必要か
がだいたいわかればOKです。
(数式も無理に理解する必要なしです。)
読むときにnumpy調べるのはめんどくさいので、
下記に書いておきます。
メソッド | 機能 |
---|---|
np.random.randn | 乱数をつくる |
np.sqrt | ルートをとる |
np.zeros | 空配列の作成 |
np.array.dot | 内積を計算 |
np.array.T | 転置する |
np.sum | 指定方向へのsum |
np.tanh | tanhを計算する |
np.exp | 指数関数 |
実際にchainerを試す(4時間)
chainerを試します。
下記を参考にしますが、画像判定はしません。
(ここで欲張って画像を扱っていいのは、既に画像処理に慣れてる人だけです)
【機械学習】ディープラーニング フレームワークChainerを試しながら解説してみる。
その代わり、irisのSpecies判定に自分でコードを書き換えることで、勉強します。
データがなければUCLからどうぞ
元記事だと結構話があちこちに飛んで、理解し難いので
必要最小限のコードのみ抜き出します。
以下のコメントがついている部分を抜き出して理解します。
- 次に各種パラメーターの定義・設定を行います。
- データセットを学習用データ検証用データに分割します。
- いよいよモデルの定義です。ここからが本番ですね。Chainerのクラスや関数を使います。
- 順伝播の構造が下記のforward()関数で定義されます。
- ここでは最適化手法としてAdamが使われています。
- 以上の準備から、ミニバッチ学習で手書き数字の判別を実施し、その精度を見ていきます。
今までのステップをきちんと踏んでいれば、
モデルの作り方や、最適化の部分でchainerの便利さが分かると思います。
(最適化の中身やdropoutって?というのは、飛ばします)
ここまできたら、irisのデータを読み込んで、学習するようにコードを書き換えていきます。
- 入力層の数
- 出力層の数
- データ取り込みとnumpy.arrayの変換
を変えれば大丈夫です。
仕様っぽいエラーが出た部分を補足しておきます。
- 目的変数yの中身を、数値0,1,2に変換しておかないと後続作業でエラーになる
- 説明変数yの
numpy.array
を.astype(np.int32)
で変換しないとエラーになる - 説明変数xの
numpy.array
を.astype(np.float32)
で変換しないとエラーになる
ここまで実装したら、動かしてみましょう。
動いたら
動いたら、パラメータを変えて遊んでみます。
加えて、学習後のモデルを予測に使ってみます。
これも自分で考えて実装してみます。
(自分は、モデルをpickleでファイルに永続化。
予測する際はそれを呼び出して、そのモデルでforwardを呼び出すようにしました。)
今後
chainer入門は完了で、色々自分で試せる感じになりました。
お疲れ様でした!
きちんとやれば、自力で以下ができるようになっているはずです。
- 基本実装
- 学習データの用意の仕方
- 変えられるパラメータの理解
- 予測の方法
この後は、以下を試してみる感じかなーと思います。
- CNN,AutoEncoder,RNNなどを実装してみる
- 画像処理、音声処理、自然言語処理なんかのやり方を覚えて、そこにディープラーニングを使ってみる
- chainerのドキュメントを見て、もう少し詳しくなってみる
- TensorFlowやCaffeを試してみる
- 数学とか理論の辺りをきちんと勉強して、チューニングできるようにする(Adamとかの勉強はここですればいい)
(自分もまだ手探りですが、次はMNISTの手書き文字を試すのがいいかな、という気がしています)