セッション「PyLearn2解説」
PyData Tokyoの中の人、池内(@iktakahiro)です。
記念すべき1つめの講演は、東京大学 知の構造化センター 特任講師 中山浩太郎先生による「Pylearn2解説」です。
中山先生は人工知能や大規模データマイニングを専門としており、東京大学で講師を務めているほか、プログラミング系書籍の執筆を数多く行うなど、幅広く活躍されています。今回は、ディープラーニングの代表的なツール「Pylearn2」について解説いただく貴重な機会をいただきました。
中山先生の講演を通じて学んだことをレポートしたいと思います。
ディープラーニングライブラリ「Pylearn2」
「Pylearn2」はモントリオール大学で開発されているディープラーニングライブラリで、数値計算ライブラリ「Theano(セアノ)」がベースになっており自動微分が優れているのが特徴です。
オプションを付与するだけで、GPU用の計算コードを生成できる点もPylearn2の特徴とメリットです。
Pylearn2の利用方法
ディレクトリ構成
Pylearn2のディレクトリ構成のうち重要なものを記載します。
- datasets:データセットのディレクトリです。
- scripts:実行スクリプトが入っているディレクトリです。利用者は主にこのディレクトリの中身を見ていくことになります。
- training_algorithms, models:研究目的であれば深く見ていく必要があるディレクトリだろうとの解説がありました。
設定と実行
利用するアルゴリズムやデータセットをYAML形式で記述して実行するのが、Pylearn2のベーシックな利用方法の一つです。
今回の中山先生の講演ではいくつかのデモを実行していただきましたが、チュートリアルのために用意されているサンプルファイル「cifar_grbm_smd.yaml」を利用した解説がありましたので、その手順をおさらいしてみます。講演で触れられていなかったデータセットの取得手順などについては一部補完しています。
なお、今回のレポートを書くにあたり、OS X Yosemite(10.10)にPylearn2の環境を構築しています。Pylearn2のセットアップ手順については、今回の主旨とは異なるため割愛します。
下記に、設定ファイルの雰囲気を掴んでもらうためにコメントアウト部を除外したYAMLを記載します。
!obj:pylearn2.train.Train { dataset: !pkl: "cifar10_preprocessed_train.pkl", model: !obj:pylearn2.models.rbm.GaussianBinaryRBM { nvis : 192, nhid : 400, irange : 0.05, energy_function_class : !obj:pylearn2.energy_functions.rbm_energy.grbm_type_1 {}, learn_sigma : True, init_sigma : .4, init_bias_hid : -2., mean_vis : False, sigma_lr_scale : 1e-3 }, algorithm: !obj:pylearn2.training_algorithms.sgd.SGD { learning_rate : 1e-1, batch_size : 5, monitoring_batches : 20, monitoring_dataset : !pkl: "cifar10_preprocessed_train.pkl", cost : !obj:pylearn2.costs.ebm_estimation.SMD { corruptor : !obj:pylearn2.corruption.GaussianCorruptor { stdev : 0.4 }, }, termination_criterion : !obj:pylearn2.termination_criteria.MonitorBased { prop_decrease : 0.01, N : 1, }, }, extensions : [!obj:pylearn2.training_algorithms.sgd.MonitorBasedLRAdjuster {}], #Finally, request that the model be saved after each epoch save_freq : 1 }
このYAMLで、
- データセット
- アルゴリズム
- レイヤー構造
- テスト方法
などを指定することができます。
設定ファイル中の「pylearn2.models」というのがディレクトリ構成で触れたmodelsに該当します。rbm.GaussianBinaryRBMが指定されていますね。modelsには他に、講演で解説のあったMaxoutなどのアルゴリズムの実装があります。
では、「cifar_grbm_smd.yaml」を利用して学習を実行してみます。
# データセットの準備 sh scripts/datasets/download_cifar10.sh python scripts/tutorials/grbm_smd/make_dataset.py # 学習 cd scripts/tutorials/grbm_smd/ ../../train.py cifar_grbm_smd.yaml
学習の過程でいろいろな数値が標準出力されますが、誤差情報を表すobjectiveの値が小さくなっていく点に着目せよ、との解説がありました。
学習結果は「cifar_grbm_smd.pkl」に出力されます。.pklはデータなので、可視化を行います。
../../show_weights.py --out cifar_grbm_smb.png cifar_grbm_smd.pkl
「cifar_grbm_smb.png」が出力されます。
![cifar_grbm_smb.png](http://cz-cdn.shoeisha.jp/static/images/article/8315/8315_cifar_grbm_smd.png)
全体を通じて
今回、「Pylearn2解説」というライブラリを打ち出したアジェンダではありましたが、前段として「ニューラルネットワークとは」「ディープラーニングとは」という点も併せて解説いただけました。
ニューラルネットワークにおいて、オーバーフィッティングや収束速度の問題がデメリットとされてきましたが、そういった問題を解決するためにディープラーニングの領域が研究されてきた、という歴史的経緯の話が非常に印象に残っています。
会場ディスカッションでは、Pylearn2の設定ファイルが読みにくいという中山先生のコメントに対して、Pythonコードで設定を書いたほうが良いのではないかという意見や、ビジネスの課題を解決するためにはグリッドサーチ的なアプローチでパラメータを最適化していく必要があるのではないかという質問もあり、実際の利用をイメージしている方が多いように感じました。