Deep Learningを勉強する際に参考にしたサイト・書籍まとめ
随時更新していきます。
Deep Learningがアツいらしい?なにそれ?
Live broadcast by Ustream
Ustream.tv: ユーザー preferred: 一般向けのDeep Learning, PFI Show. コンピュータ
“ 100m世界記録におけるボルトのような立場 ”
Deep Learningによって精度が向上したタスクなどをまとめてくれています。
Googleによる、猫・顔の認識について
- 作者: 松尾豊
- 出版社/メーカー: KADOKAWA / 中経出版
- 発売日: 2015/03/10
- メディア: Kindle版
- この商品を含むブログ (17件) を見る
そもそもロジスティック回帰とは?MLPとは?
Deep Learning全般について
本家チュートリアル
Learning Deep Architectures for AI
- Learning Deep Architectures for AI
- Learning Deep Architectures for AI (第 3 回 Deep Learning 勉強会資料; 松尾)
1つ目の資料ではDeep Learning全般のアルゴリズムについて解説してくれています。ただ、英語でものすごく長いので、二つ目のまとめ資料を参考にしながら読むと読みやすいです。
各種勉強会・学会資料など
Stream videos at Ustream
Ustream.tv: ユーザー preferred: Deep Learningの技術と未来, PFI Show . コンピュータ
NNの基本から、Deep Learning、NLPへの応用まで、幅広く取り扱ってくれている動画。英語ですが、とても参考になります。
生成モデル、RBM、畳み込み、Autoencoderなどが理解しやすいです。
東大での勉強会資料。全般的に役に立ちます。
Deep Learning × NLP
Manning先生による、NAACL HLT 2013でのチュートリアル資料です。動画も上記サイト中にあります。
自然言語処理でどのように特徴量を作ればよいか。また、どういった関連研究があるのかなどがまとめられています。
ハイパーパラメータに関してなど、実用における注意点をまとめてくれています。
実装について
theanoを利用しない実装
theanoを利用せずに実装しているコードを見ることで、中身の理解が進みました。
Pylearn2を使ったDeep Learningの実装(多層パーセプトロン編)
以前の記事でも取り上げましたが、Deep Learningは今年に入ってさらに話題となっています。
実装する場合にまず参考となるのが公式の公式のチュートリアルページです。
このページに書かれている内容については一度理解する必要があるのですが、このページでも利用されているtheanoというライブラリは、勾配を求める部分など、Deep Learningを実装する際の関数集のようなものになっており、このページを参考に自分のデータへ適用させると、変更点が多いためコードが長くなってしまいます。
そこで、今回の記事からは、Deep Learningの代表的なアルゴリズムが実装されたライブラリである、Pylearn2の利用の仕方についてまとめたいと思います。
今回はその準備として、多層パーセプトロン(Multi Layer Perceptron)で、XORの分類を行うコードを紹介したいと思います。
コードはこちらのgithubリポジトリにもありますが、以下のようになっています。
【XOR.py】
# coding: utf-8 import sys, theano sys.path.append('/home/fujikawa/lib/python/other/pylearn2/pylearn2') from pylearn2.datasets.dense_design_matrix import DenseDesignMatrix import numpy as np from random import randint class XOR(DenseDesignMatrix): def __init__(self): self.class_names = ['0', '1'] X = [[randint(0, 1), randint(0, 1)] for _ in range(1000)] y = [] for a, b in X: if a + b == 1: y.append([0, 1]) else: y.append([1, 0]) X = np.array(X) y = np.array(y) super(XOR, self).__init__(X=X, y=y) def test(self, model): print '####### TEST #######' print 'Input: [0, 0] -> Predict: ' + str(model.fprop(theano.shared(np.array([[0, 0]]), name='inputs')).eval()) + ' (Correct: [1, 0])' print 'Input: [0, 1] -> Predict: ' + str(model.fprop(theano.shared(np.array([[0, 1]]), name='inputs')).eval()) + ' (Correct: [0, 1])' print 'Input: [1, 0] -> Predict: ' + str(model.fprop(theano.shared(np.array([[1, 0]]), name='inputs')).eval()) + ' (Correct: [0, 1])' print 'Input: [1, 1] -> Predict: ' + str(model.fprop(theano.shared(np.array([[1, 1]]), name='inputs')).eval()) + ' (Correct: [1, 0])'
【MLP.py】
# coding: utf-8 import theano, sys sys.path.append('/home/fujikawa/lib/python/other/pylearn2/pylearn2') from pylearn2.models import mlp from pylearn2.training_algorithms import sgd from pylearn2.termination_criteria import EpochCounter from pylearn2.train import Train import numpy as np from XOR import XOR ############################### #### Setting for dataset #### ############################### dataset = XOR() ########################## #### Setting for NN #### ########################## # create layers hidden_layer = mlp.Sigmoid(layer_name='hidden', dim=3, irange=.1, init_bias=1.) output_layer = mlp.Softmax(2, 'output', irange=.1) layers = [hidden_layer, output_layer] model = mlp.MLP(layers, nvis=2) #################### #### Training #### #################### train = Train( dataset, model, algorithm=sgd.SGD(learning_rate=.05, batch_size=10, termination_criterion=EpochCounter(400)) ) train.main_loop() ################# ### Testing ### ################# dataset.test(model)
上記のように、少ないコード量で実装ができ、内部的にはtheanoが利用されているので、環境を整えればGPUの利用等も可能であるのがこのライブラリの大きな利点です。
ただ、日本語はおろか、英語のドキュメントも少ないため、こちらの実装の中身を見て理解する必要があります。
- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
Linux (Cent OS) でサーバ構築する際に毎回やることまとめ
1. 初期設定
2. Webサーバ(Apache)の設定
- httpdのインストール・設定
- IP.ADD.RE.SSへブラウザでアクセスしてApacheのページが出るか確認
- chown -R username:username /var/www/html
- VirtualHostの設定
- mkdir -p /var/www/dev.example.com/public_html
- chown -R username:username /var/www/dev.example.com
- vim /etc/httpd/conf.d/dev.example.com.conf
<VirtualHost *:80> ServerName dev.example.com DocumentRoot "/var/www/dev.example.com/public_html" DirectoryIndex index.html index.php ErrorLog /var/log/httpd/dev.example.com_error_log CustomLog /var/log/httpd/dev.example.com_access_log combined AddDefaultCharset UTF-8 <Directory "/var/www/dev.example.com/public_html"> AllowOverride All </Directory> </VirtualHost>
3. よく利用するパッケージ・アプリケーションのインストール
- tmux(/usr/local/srcなどに入れる)
- yum install tmux or (tmuxのインストールと設定 - Qiita)
- dropbox(各ユーザのホームディレクトリに入れる)
- 参考URL:
- wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
- .dropbox-dist/dropbox -> アクセス要求のあるURLへアクセス、新しいクライアントをブラウザ上で承認
- ~/bin を無ければ作成、bin以下で wget "https://www.dropbox.com/download?dl=packages/dropbox.py"
- dropbox.py start
- gcc 4.8.2(gccの最新版のソースからのインストール)
- 参考URL:
- wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz
- tar zxvf gcc-4.8.2.tar.gz
- cd gcc-4.8.2
- ./contrib/download_prerequisites
- yum install glibc-devel.i686 (gccのビルドがその環境で始めての場合)
- cd ..
- mkdir gcc-4.8.2.build(sourceファイルのディレクトリでビルドする)
- cd gcc-4.8.2.build
- ../gcc-4.8.2/configure
- make
- make install
- /etc/profile中に "export LD_LIBRARY_PATH=/usr/local/lib64" を追加
- sshfs
5. MySQLの設定
- yum install mysql-server
- MySQLのディレクトリの変更(/home/mysqlへ変更する手順)
- /etc/my.cnfの設定
- 以下の部分を下記のように変更する
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
[mysqld] datadir=/home/mysql socket=/home/mysql/mysql.sock [client] socket=/home/mysql/mysql.sock
- [mysqld_safe]の直前に以下をコピペ
character_set_server=utf8 default-storage-engine=InnoDB innodb_file_per_table [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
- service mysqld start
- MySQL上で確認
- SHOW VARIABLES LIKE 'datadir';
- SHOW VARIABLES LIKE 'socket';
- chkconfig mysqld on
6. Pythonの環境構築
- Python2.7のDL、インストール
- cd /usr/local/src
- wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
- tar xvzf Python-2.7.6.tgz
- cd Python-2.7.6
- ./configure --enable-shared
- make
- make install
- 一度ログアウトして再度ログインしてみてバージョンが変わってるか確認
- distributeのDL、インストール
- wget --no-check-certificate http://pypi.python.org/packages/source/d/distribute/distribute-0.6.27.tar.gz
- tar zxvf distribute-0.6.27.tar.gz
- cd distribute-0.6.27
- python setup.py install
- pipのインストール
- easy_install-2.7 pip
7. Perlの環境構築
- Perlbrewのインストール・Perlの利用するバージョンへの変更
curl -L http://install.perlbrew.pl | bash
- 以下を.zshrcへ追記
export PERLBREW_ROOT=$HOME/perl5/perlbrew
export PERL5LIB=$HOME/perl5/lib/perl
source ~/perl5/perlbrew/etc/bashrc
- perlbrew available
- perlbrew install 5.18.2
- perlbrew switch perl-5.18.2
- cpanm のインストール・各種ライブラリのインストール
- cpan App::cpanminus
- cpanm Amon2 Carton Teng Reply
- 作者: 一戸英男
- 出版社/メーカー: 日本実業出版社
- 発売日: 2005/04/07
- メディア: 単行本
- 購入: 22人 クリック: 524回
- この商品を含むブログ (29件) を見る
Hadoop Streaming で手軽に Map Reduce する
研究で Hadoop Streaming を利用して負荷分散をしていますが、それなりに躓いた点もあったので、備忘録がてら簡単にまとめておきたいと思います。ちなみに、Map Reduce って何?って人はYahoo! Japan のブログ http://techblog.yahoo.co.jp/architecture/hadoop/、Hadoop Streamingって何?って人は、こちらの方のブログ http://blog.liris.org/2009/05/hadooppythonno.html がとてもわかりやすくまとめてくれています。
なぜPythonでもRubyでも動くのか
Hadoop Streamingを使えば、PythonやRubyなど、自分の好きな言語でMap Reduceのプログラムを書くことができます。内部ではJavaで実装されたMapper・Reducerが、UNIXコマンド "./mapper.py" を実行し、その結果をMapper・Reducerの出力として扱ってくれているためです。そのため、一行目には必ず "#!/usr/bin/python" といった、実行コマンドのフルパスを記述しておいてあげなければちゃんと動いてくれません。
Hadoop Streaming実行の主なコマンドオプション
オプション | 説明 |
---|---|
-mapper path/to/mapper | mapperの絶対パス |
-reducer path/to/reducer | reducerの絶対パス |
-combiner path/to/combiner | combinerの絶対パス |
-file path/to/file | mapper、reducer、combinerの絶対パスと、各プログラム中で呼び出す必要のある外部ファイルの絶対パス |
-D mapred.job.name="jobname" | ブラウザ上で表示する際のJobの名前 |
-D mapred.map.tasks=30 | mapperのタスク数の指定 |
-D mapred.reduce.tasks=30 | reducerのタスク数の指定 |
-D mapred.job.priority=HIGH | jobのpriorityの設定 |
よく利用するHadoopコマンド
コマンド | 説明 |
---|---|
hadoop fs -put ローカルファイル名 HDFS上でのファイル名 | HDFS上にファイルをアップロード |
hadoop fs -ls | HDFS上のファイルを確認 |
hadoop fs -rmr | HDFS上のファイルを削除 |
hadoop fs -get | HDFS上のファイルをダウンロード |
hadoop fs -cat | HDFS上のファイルをcat |
とりあえず実行してみる
とりあえず動いているところを試したければ、こちらに辞書中の単語に関してword countを行うプログラムを掲載しているので、git cloneしてHadoopの動く環境のあるサーバへ置いて下さい。下に同じプログラムを掲載しています。
HDFS上で実行する前に、プログラムが正しいかどうか確認する際は、以下のコマンドで確認できます。
cat sample.txt | ./mapper.py | ./reducer.py
小さいファイルで動くことを試せたら、自分のファイルをHDFS上へ上げてみましょう。
hadoop fs -put (ローカルのファイル名) (HDFS上でのファイル名)
実行のシェルスクリプトを自分の環境用に変更しましょう。変更点は以下の三点です。
hadoop_in=" ** path-to-hdfs-file ** " hadoop_out=" ** path-to-hdfs-file ** " options=$options" -file ** path-to-dic.json **"
ちなみに path-to-dic.jsonはローカル上の絶対パスなので、例えば/home/username/wordcount_streaming/dic.jsonなどになります。
辞書データなどを使わない場合はこの項目を消して下さい。
あとはsh run.shで実行すればプログラムが動作するはずです。
プログラムが終了したら、以下のコマンドで実行結果を確認しましょう。
hadoop fs -cat (hadoop_outのファイル名)/p* | less
Hadoop Streaming を利用した word count
- 作者: Tom White,Sky株式会社玉川竜司,兼田聖士
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/07/26
- メディア: 大型本
- この商品を含むブログ (2件) を見る
Deep Learning ライブラリ「word2vec」で関連のある単語を予測するシステムを作った
Deep Learningとは
Deep Learningは、ICML・ACLといった機械学習関連の主要な学会のチュートリアルでも紹介され、近年注目を集めています。Deep Learningといえば、Googleによる猫の識別を始めとした画像認識で特に有名ですが、今年に入ってもその勢いは増すばかりで、
GoogleがDeep Learningの第一人者Hinton先生を生徒ごと買収したり、Deep Learning主体の学会ができたりと、多くの話題を作っています。詳しい動向・中身に関しては以下のページでよくまとめられています。
ニューラルネットの逆襲 | Preferred Research
データマイニングコンペティションサイト Kaggle にも Deep Learning ブームがきてるかと思ったのでまとめる - 糞ネット弁慶
DEEP LEARNERについて
簡単に扱えるライブラリとしてTheanoなどが有名ですが、今回、GoogleによってNLP(自然言語処理)に特化したツール「word2vec」が公開(Google Open Source Blog: Learning the meaning behind words)されたので、可視化するツール「DEEP LEARNER」を作成しました。また、日本語版Wikipediaの全記事をmecabで形態素解析して作成した日本語のコーパスを用いることにより、日本語によるデモも可能にしました。
このツールでは、例えば「中村俊輔」といった単語に近い単語を拾ってきたり(「中田英寿」「中山雅史」「香川真司」など)、「フランス パリ→日本 ?」という問いに対して「東京」という答えを出すことができます。形態素解析のミスが少しありますが、今後mecabにユーザー辞書を追加することで解決しようと思っています。
中では何をやっているのか
文章を単語レベルに区切ったもの(英語はそのまま、日本語は単語ごとに半角スペースを加えたもの)をコーパスとして用い、ある程度の頻度で現れる各単語に対して特徴ベクトルを作成します。その特徴ベクトル間の距離を計算することで、単語間の意味的な関係をうまく近似している、といったものになっています。