深層学習 Day 1
やっとディープラーニング(深層学習)について取り組めます。
小学生の頃に完全なる人工知能を夢見て,色々想像してたのが懐かしいです。
実行環境構築
OS X上かつMacportsが慣れているのでその条件で構築します。
以下,Macportsがインストールされていることを前提に始めます。
インストールするもののパッケージ名は次の通りです。
・python34 @3.4.3_5
・py34-chainer @1.1.1_0
... A flexible framework of neural networks
・py34-six @1.9.0_0
... A Python 2 and 3 compatibility library
・py34-pip @7.1.2_0
... A tool for installing and managing Python packages
まずは,python34のインストールから。
$ sudo -E port install python34
インストール後,python34を使えるようにします。
念のため,バージョンがpython34のものになっているかも確認しておきましょう。
$ sudo -E port select --set python python34 $ python --version
次は,残り3つをインストールしていきます。
$ sudo -E port install py34-chainer $ sudo -E port install py34-six $ sudo -E port install py34-pip
最後に,
先ほどインストールしたchainerのバージョン@1.1.1_0ですが,
Macportsのツリーでは最新版ではないので,
pipコマンドを使用して最新版にしちゃいましょう。
$ pip-3.4 install --upgrade chainer
これにて,環境設定は完了です。
簡単なサンプル
Day 1 ということで私もディープラーニングに興味を持ち,勉強を開始したばかりです。
高度なことは全くまだできませんので,ご了承ください。短いサンプルを示します。
このサンプルは,階層型ニューラルネット(Hierarchical Neural Network)ですが,深層化しているわけではないため,深層学習とは呼べないと理解しています。(間違ってたらコメントで教えてください)
#!/usr/bin/env python import numpy as np import chainer.functions as F from chainer import Variable, FunctionSet, optimizers, gradient_check # 入力の設定 x = Variable(np.array([[1, 2, 3]], dtype=np.float32)) # 入力に対する結合の重みの設定 w = F.Linear(3, 3) # 確率的勾配降下法(Stochastic Gradient Descent Method) # を用いた誤差逆伝播学習を使用する optimizer = optimizers.SGD() optimizer.setup(w) # 正解出力の設定 t = Variable(np.array([[4, 13, 3.4]], dtype=np.float32)) # 学習回数(反復回数)の設定 itrstep = 100 # 学習開始 for i in range(0, itrstep): optimizer.zero_grads() # 入力及び結合重みから出力を計算する y = w(x) # 出力をコマンドラインに表示 print(y.data) # 平均二乗誤差の算出 loss = F.mean_squared_error(y, t) # 結合重みの修正 loss.backward() optimizer.update() # 次の反復ステップへ
続いて実行結果。
[[-0.26077998 1.17885709 0.33666974]] [[ 0.16529801 2.36097169 0.64300281]] [[ 0.54876822 3.42487407 0.91870254]] [[ 0.89389133 4.38238668 1.16683233]] [[ 1.20450222 5.24414778 1.39014888]] [[ 1.48405206 6.01973343 1.59113419]] [[ 1.73564684 6.71775961 1.77202058]] [[ 1.96208215 7.34598398 1.93481874]] [[ 2.165874 7.91138554 2.08133674]] [[ 2.34928656 8.42024708 2.21320319]] [[ 2.51435804 8.87822247 2.33188272]] [[ 2.66292191 9.29039955 2.43869448]] [[ 2.79662991 9.66135979 2.53482509]] [[ 2.91696692 9.995224 2.62134266]] [[ 3.02527046 10.29570198 2.69920826]] [[ 3.12274337 10.56613159 2.76928735]] [[ 3.21046925 10.80951881 2.8323586 ]] [[ 3.28942204 11.02856731 2.88912296]] [[ 3.36047983 11.22570992 2.94021058]] [[ 3.4244318 11.40314007 2.98618984]] [[ 3.48198867 11.5628252 3.02757072]] [[ 3.53378987 11.70654297 3.06481361]] [[ 3.58041096 11.83588791 3.09833217]] [[ 3.62236977 11.95229912 3.12849903]] [[ 3.66013288 12.05706978 3.15564919]] [[ 3.69411945 12.15136337 3.18008423]] [[ 3.72470737 12.23622704 3.20207596]] [[ 3.75223708 12.31260395 3.22186828]] [[ 3.77701306 12.3813448 3.23968124]] [[ 3.79931164 12.44320965 3.25571346]] [[ 3.81938052 12.49888802 3.2701416 ]] [[ 3.8374424 12.54899979 3.28312778]] [[ 3.85369825 12.5941 3.29481506]] [[ 3.86832833 12.63469028 3.30533338]] [[ 3.88149571 12.67122078 3.31480026]] [[ 3.89334631 12.7040987 3.32332015]] [[ 3.90401125 12.7336874 3.33098793]] [[ 3.91361022 12.76031971 3.33788943]] [[ 3.92224932 12.78428841 3.34410071]] [[ 3.93002462 12.80585861 3.34969044]] [[ 3.93702173 12.82527256 3.35472131]] [[ 3.94331956 12.84274578 3.35924935]] [[ 3.94898772 12.85847092 3.36332417]] [[ 3.95408916 12.87262535 3.366992 ]] [[ 3.95867991 12.88536167 3.37029266]] [[ 3.96281195 12.89682484 3.37326336]] [[ 3.9665308 12.90714359 3.37593699]] [[ 3.96987748 12.91642952 3.37834311]] [[ 3.9728899 12.92478561 3.38050914]] [[ 3.97560096 12.93230629 3.38245821]] [[ 3.97804117 12.93907642 3.38421226]] [[ 3.98023701 12.94516945 3.38579082]] [[ 3.98221302 12.95065308 3.38721204]] [[ 3.98399162 12.95558739 3.38849092]] [[ 3.98559284 12.96002769 3.389642 ]] [[ 3.98703313 12.96402645 3.39067769]] [[ 3.98832989 12.96762276 3.39161015]] [[ 3.98949695 12.97086239 3.3924489 ]] [[ 3.99054718 12.97377396 3.39320397]] [[ 3.99149251 12.97639656 3.39388347]] [[ 3.99234343 12.97875881 3.39449525]] [[ 3.99310899 12.98088169 3.39504552]] [[ 3.99379826 12.98279381 3.39554119]] [[ 3.99441791 12.98451328 3.39598703]] [[ 3.99497652 12.98606205 3.39638829]] [[ 3.99547887 12.98745632 3.3967495 ]] [[ 3.99593067 12.9887104 3.3970747 ]] [[ 3.99633789 12.98983955 3.39736676]] [[ 3.9967041 12.99085426 3.39763045]] [[ 3.9970336 12.99176979 3.3978672 ]] [[ 3.99733019 12.99259186 3.39808059]] [[ 3.99759698 12.99333382 3.39827251]] [[ 3.99783754 12.99399948 3.39844513]] [[ 3.99805379 12.9946003 3.39860058]] [[ 3.9982481 12.99513912 3.39874077]] [[ 3.99842334 12.9956255 3.39886642]] [[ 3.99858141 12.99606323 3.3989799 ]] [[ 3.99872303 12.99645615 3.39908195]] [[ 3.99885058 12.99681091 3.39917397]] [[ 3.9989655 12.99713039 3.39925623]] [[ 3.99906921 12.9974165 3.39933085]] [[ 3.9991622 12.9976759 3.39939761]] [[ 3.99924588 12.99790955 3.39945793]] [[ 3.99932098 12.99811745 3.39951205]] [[ 3.99938893 12.99830532 3.39956093]] [[ 3.99945021 12.99847507 3.3996048 ]] [[ 3.99950504 12.99862862 3.39964414]] [[ 3.99955463 12.99876404 3.3996799 ]] [[ 3.99959898 12.99888802 3.39971185]] [[ 3.99963951 12.9989996 3.3997407 ]] [[ 3.99967527 12.99909973 3.39976645]] [[ 3.99970794 12.99919033 3.39979005]] [[ 3.99973702 12.99927139 3.39981103]] [[ 3.99976349 12.99934387 3.39982986]] [[ 3.99978709 12.99940872 3.39984679]] [[ 3.99980807 12.9994688 3.39986205]] [[ 3.99982715 12.99952126 3.39987588]] [[ 3.99984479 12.99956989 3.39988852]] [[ 3.99985981 12.99961281 3.39989972]] [[ 3.99987388 12.99965 3.39990973]]
以上のように,学習を繰り返す(結合重みをあるアルゴリズムに従って反復して修正する)ことで,設定した正解出力に近づいていることがわかりました。
にしてもChainerは非常に使いやすいですね,こういったフレームワークの良さを実感しました。
誤差逆伝播法の詳細については後日まとめて,次からは深層学習に入りたいと思います。