こんにちは。技術研究所のわたなべです。
機械学習初級者の私に強い味方が登場してくれたようなのでご紹介します。
去る8/17、こんなニュースが飛び込んできました。
これまでディープラーニング使ってみよう!という場合、ほぼPythonプログラミングというような雰囲気でしたが、ディープラーニング用の統合開発環境と銘打たれたものが出てきました。
しばらく使ってみたのですが、こいつがなかなかどうしてイケてる感じでした!
まず第一に、今までコードで表現するしかなかったニューラルネットワークを、視覚的に、簡単に構築することができます。
例えばCaffeというライブラリで以下のように定義されていたネットワークがあるとします。
layer { |
name: "Input" |
type: "Data" |
top: "Input" |
} |
layer { |
name: "Convolution" |
type: "Convolution" |
convolution_param { |
num_output: 16 |
kernel_size: 5 |
dilation: 1 |
} |
bottom: "Input" |
top: "Convolution" |
} |
layer { |
name: "MaxPooling" |
type: "Pooling" |
pooling_param { |
pool: MAX |
kernel_size: 2 |
stride: 2 |
} |
bottom: "Convolution" |
top: "MaxPooling" |
} |
layer { |
name: "Affine" |
type: "InnerProduct" |
inner_product_param { |
num_output: 10 |
} |
bottom: "MaxPooling" |
top: "Affine" |
} |
layer { |
name: "SoftmaxCrossEntropy" |
type: "SoftmaxWithLoss" |
bottom: "Affine" |
top: "SoftmaxCrossEntropy" |
} |
これをニューラルネットワークコンソールで表現すると、こうなります。
レイヤーの繋がりかたも直感的にわかりやすいですし、追加や組み替えドラッグアンドドロップで簡単にできます。
まず、学習過程もリアルタイムでグラフ表示してくれます。
当たり前のように思うかもしれませんが、これまでは推移を確認しようと思ったら
- 学習過程をログに出力して、
- そのログを解析して、
- それをグラフ化して…
ということを自分でプログラミングしてやっていた訳ですから、当然のように表示してくれるというのは実はとてもありがたいのです。
また、学習後の評価結果も表形式にまとめて表示してくれます。
特にConfusionMatrixは全体の精度を自動計算して出してくれるので便利です。
いくつか評価項目がありますが、単純な正確さを見るのであれば、まずはAccuracyを見るのがよいでしょう。
それ以外にも、広めにとって見落としを減らしたければRecallが高くなるように調整したり、気にするポイントによってポイントは変わってきますが、長くなるのでここでは割愛します。
Structure Searchという機能を使うと、ニューラルネットワークを自動的に組み替えながら学習をしてくれます。
レイヤーの追加・削除・パラメータの調整といったことをしてくれるので、簡易なニューラルネットワークを組んで、あとはお任せしてしまえば、前提知識がなくともそれらしい結果を導き出してくれる可能性があるのです。(あくまで”可能性がある”、ですが。)
これは初心者には朗報なのではないでしょうか?
試しに数時間回してみた結果、こうなりました。
やろうとしたこと:CIFAR-10データセットを使用して、画像を10カテゴリに分類する
(学習用:50,000件、評価用10,000件の32×32pixの画像データ)
上がりました!ほんのちょっとだけですが!(笑)
ネットワーク構造がまったく変わっていないように見えるかもしれませんが、Convolution層とMaxPooling層のパラメータが少し変わっています。
今回は大きな成果は出ませんでしたが、自分では思いもよらない組み合わせをして、その学習結果がでてくるというのは各レイヤーの効果を考える機会になりますし、見ているだけで結構面白いです。
ちなみに、当然ですが全然ダメな結果になることもあります。
ある時点からどんどんエラー率が上がっていく(=精度が下がっていく)という。。。
学習回数を増やせばいいわけじゃないといういい例ですね。
ディープラーニング用のライブラリはいくつかあるのですが、Neural Network ConsoleではメジャーなライブラリのひとつであるCaffeの形式のモデルも扱うことができます。(この機能はbeta版とのこと)
CaffeのモデルはModel-Zooで公開、再利用が活発にされていますので、ここから使えるものを流用できるということになれば、利用の幅がグッと広がります。
また、このModel-Zooの影響か、Caffeの定義ファイルはTensorFlow(Google)やChainer(Preferred Networks)といった他のライブラリでも取り込む仕組みがありますので、エクスポートできるというのは、これらをメインで使っている経験者にも嬉しい点ではないでしょうか。
ちなみに、TensorFlowでCaffeのモデルを使用した事例はこちらで詳しく紹介しています。
なんだか褒めすぎてSONYさんの回し者だと思われそうなので、気になったところもあげておきます。
実は、自分で用意したデータを使った際にちょっと躓きました。
学習用データを読み込んでキャッシュしようとしたタイミングで以下のようなエラーとなってしまいました。
Traceback (most recent call last): |
File "C:\InstallPath\libs\nnabla\python\src\nnabla\utils\cli\cli.py", line 170, in <module> |
main() |
~ 中略 ~ |
File "C:\InstallPath\libs\nnabla\python\src\nnabla\utils\data_source.py", line 136, in _save_cache_to_file |
h5.create_dataset(k, data=v) |
File "C:\InstallPath\libs\Miniconda3\lib\site-packages\h5py\_hl\group.py", line 108, in create_dataset |
dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds) |
File "C:\InstallPath\libs\Miniconda3\lib\site-packages\h5py\_hl\dataset.py", line 97, in make_new_dset |
tid = h5t.py_create(dtype, logical=1) |
File "h5py\h5t.pyx", line 1543, in h5py.h5t.py_create (D:\Build\h5py\h5py-2.7.0\h5py\h5t.c:18113) |
File "h5py\h5t.pyx", line 1565, in h5py.h5t.py_create (D:\Build\h5py\h5py-2.7.0\h5py\h5t.c:17933) |
File "h5py\h5t.pyx", line 1620, in h5py.h5t.py_create (D:\Build\h5py\h5py-2.7.0\h5py\h5t.c:17834) |
TypeError: Object dtype dtype('O') has no native HDF5 equivalent |
原因がわからず色々試してみたところ、Neural Network Consoleの”データセット作成機能”を通して再生成した画像データであればうまく読み込めるようでした。
※データセットとは、学習・評価用のデータ(今回の場合は画像ファイル)と、そのファイル名と正解を記載したcsvファイルのセットです。
データセット作成機能は「所定のフォルダ構造に配置した学習・評価データを元に、csvファイルを生成してくれる機能」だと思っていましたが、学習・評価用データ側もなんらか加工して再生成しているようでした。
再生成されたpng画像のプロパティをよくよく見てみると、一部の項目が削られているようです。これが悪さをしていたのでしょうか。。。
ともかく、自前で用意したデータで上記のエラーが出た場合は、一度データセット作成機能を使ってみるとよいかもしれません。
上でも便利機能として紹介したConfusion Matrixですが、なぜか選択しても何も表示されないことがあります。
原因はよくわからず、完全に経験則なのですが、最後の層がSoftmaxCrossEntropyになっている場合に発生することが多いような・・・
(マニュアル上は等価だとされている、Softmax + CategoricalCrossEntropyだとうまくいっているので謎です)
残念ながら、対象がWindows8.1 / 10のみになっています。
“統合開発環境”と謳っている時点でPC上で動く前提なのでしょうが、学習能力がPCに依存してしまうという問題があります。GPUも使えるハイスペックPCなら早いのでしょうが、そういう方ばかりではないでしょう。
本格的に使う場合は、設計やちょっとした検証にはこのNeural Network Consoleを使用して、学習自体はそれを移植してサーバーで~というような工夫が必要かもしれませんね。
まさにこの記事を執筆中だった11/8に、クラウド版のオープンβがスタートしたというニュースが飛び込んできたので早速試してみました!
10CPU時間の学習・評価、10GBのデータセット、10プロジェクトまで無料で試すことができます。
ただし、サンプルで用意されているプロジェクトも選択して活性化すると10プロジェクトのうちにカウントされるようなので念のため注意してください!
使い方は、データセットを専用のアプリケーションでアップロードするようになる以外は基本的に変わりません。
こちらでざっと確認した限りでは、機能として以下の違いがあるようです。
- Profile機能の追加(各レイヤーのパフォーマンスを計測してくれる機能の模様)
- StructureSearchのEarlyStoppingオプションが削除(精度が上がらない場合に、学習を早く打ち切る機能)
- Caffe形式のインポート / エクスポート機能の削除
上記のCIFAR-10のデータセットを使った学習をクラウド版でも試してみたのですが、学習・評価で2時間程度かかりました。
(オープンβ開始翌日の計測なので、アクセスが集中しているでしょうし、これからマシンパワーの調整が入るかもしれないのでご参考まで。)
個人的な感想としては、WinApp版をすでに使っていて特に不便がないのであればApp版でもいいかなと思いますが、MacやLinuxユーザーの方が試しに触ってみるにはいいと思います。
今後、正式リリースに向けてどんな進化をするのか気になりますね!期待しましょう!
やはりプログラムを書かずに学習・評価までできるというのは、非常に魅力的なポイントだと思います。
興味はあるけどどこから始めたらいいんだ!と思っていた方は、一度触ってみてはいかがでしょうか。
(WinApp版・クラウド版ともに利用は無料ですが、メールアドレスの登録が必要です)