狠狠撸

狠狠撸Share a Scribd company logo
はじめてのDNN
文系でもニューラル
ネットワークがしたい!
???したくない?
難波 修史
自己紹介
?難波 修史(なんば しゅうし)
?広島大学大学院教育学研究科D1
?感情表情の表出?認知の研究してます。
?R歴:ちょこちょこ
?twitter:@NSushi
2012年のBig News
? DNNによってコンピュータが猫を認識で
きるようになった!!
? すごい
? 実際の研究論文 ↓
http://static.googleusercontent.com/external_content/untr
usted_dlcp/research.google.com/en//archive/unsupervised
_icml2012.pdf
どうやったの?
? これは機械学習の一種であるDeep Neural
Network (以下DNN) ってやつの仕業なんだ!
※機械学習?=データの蓄積によって
ルールを獲得するアルゴリズム。
詳しくはググるのが一番いい
? 2012年の画像認識テストに
おいて従来のComputer Vision
(CV) 手法の成績を大きく上回
ったことで一躍有名に。
しったときのわたし
しかし最新の
表情研究は…
わけわかんなさすぎて
瞳の輝きを失う発表者
もちろん表情だけではない
? あらゆる分野でDNNの話は出てくる
? 画像処理,自然言語処理,人工知能,音声認識
など分野の枚挙には暇がなく,当然ビジネスで
も応用されており適用場面はどんどん広がって
きている。
そこで!
?本発表の目的:一緒にDNNの核とな
る概念や要素を学び,Rを用いて実
装することで少しでもDNNと仲良く
なることを目指しましょう!
※わけわかんなすぎてDNNを
もっと嫌いになっても発表
者は責任をとれません。
まずDNNってなんだ?
? 事前にうまく特徴を抽出してくれる教師無
しニューラルネットワークをたくさんつな
げて多層にしたもの(≒Deep Learningと
も表現される)
? 人の神経を模したネットワーク構造をいく
つも重ねて構築した「機械が物事を理解す
るための学習方法」と理解してください。
(図は後で
いまじん
? 一つのニューラル
? 右図上:人の神経細胞
? 右図下:DNN内の一要素
? 右図下のやつらを多層にしたもの=DNN
DNNを理解するぞー。
? 未経験のユーザー(我々…少なくとも私)にとって,
DNNによる処理や結果は理解がしにくい。
? 今回はメカニズムや処理の観点から理解するため,
ネットワークの作成をRを通してしっかり実践して
みる。
? 既存のDNNパッケージさえあれば分析自体は可能
→ しかしあえて各層の結果 (訓練による重みづ
けの変化など) を可視化することで理解して
いこう。 (Rの偏った知識もつくぞ!多分!
基本の概念と要素
? この右図はFully
connected neural
networkというも
のであり,いわ
ゆるDNNである。
? 隣接するネット
ワーク内の層 ( )
で完全にお互いを
つないでいる。
典型的なネットワーク
? もっとも単純かつ典型的なネットワークは
? 1つの入力層
? 2つの隠れ層(間の層)
? 1つの出力層
からできている。
? ネットワークの構造というものは層の数,ニュー
ロンの数,活性化?損失関数の種類,正則化(過
学習防いだりする追加の項)などをさす。
重みづけとバイアス
? 先ほどのDNN構造には3種類の重みづけポイント
が存在する=入力→隠れ1;隠れ1→隠れ2;隠れ2→出力
? バイアスは入力以外の隠れ
ノード及び出力とつながっ
ている(右図の黒い●)
? 今回は重みづけとバイアスは行列で示す。
? 初期値=正規分布からの乱数(初期値に関して:
http://cs231n.github.io/neural-networks-2/#init)
重みづけとバイアスのR code
? Weight <- 0.01*matrix (rnorm(入力特徴のニュー
ロン数*隠れ層の数), nrow = 入力特徴のニュー
ロン数, ncol = 隠れ層内のニューロン数)
? #1次元行列で0とする。
? Bias <- matrix(0, nrow = 1, ncol = 隠れ層内の
ニューロン数)
ニューロン:Neuron
一つ一つのニューロンは線形回帰と同じように重
みと入力を掛け合わして足していき,結果は活性
化関数に渡される。
よく知られる活性化関数は
sigmoid, Relu, Tanh, Maxout
などだが,今回はrectified
Linear unit (ReLu:f(x) =
max(0, x))を用いる。
※他の活性化関数:http://cs231n.github.io/neural-networks-1/#actfun
入力
重み
活性化
関数
バイアス
ReLu?
? f(x) = max(0, x)
x > 0の時は f(x) = x
x ≦ 0の時はf(x) = 0となる
? 以上!
? 詳しくは:http://en.wikipedia.org/wiki/Rectifier_(neural_networks)
活性化関数含むニューロンの
イメージ
? ニューラルネットを構成するニューロンは,1
つ1つがある活性化関数を持つ。
? 各ニューロンが持つ活性化関数は“パラメータ”
が少しずつ違い,同じ形ではない。
? 重みつきのノードでニューロン同士をつなぎ合
わせることで,複雑な関数を表現
参照:
http://vaaaaaanquish.hatenablog.
com/entry/2015/01/26/060622
ニューロンのR code
? # やりたいこと neuron <- max(0, input %*% weight + bias)
? # 入力特徴_dimenstion: 2x2
? input <- matrix(1:4, nrow=2, ncol=2)
? # 重みづけ_dimenstion: 2x3
? weights <- matrix(1:6, nrow=2, ncol=3)
? # バイアス_dimenstion: 1x3
? bias <- matrix(1:3, nrow=1, ncol=3)
実装にむけたTips.1
? # 行列の積?和に関して※%*%は行列の積
? # 次元の異なるinput %*% weightsとbiasは直接足
し合わせれないため,sweep()を用いる。
? input %*% weights + bias #まわらない
? s1 <- sweep(input %*% weights, 2, bias, `+`)
? sweep()がHelp見てもよくわからんって人に:
http://entertainment-lab.blogspot.jp/2009/10/sweep.html
実装にむけたTips.2
? # 行列内の要素ごとの最大値に関して
? print(s1) #もちろんprint()なくてもよい
? max(0, s1) #max()は最大値を返す
? # 行列構造なくして,s1内の最大値を並べる
? pmax(0, s1)
? #1つ目の引数にぶち込むと行列に戻す
? pmax(s1, 0)
層:Layer
? 入力層:入力層は基本的に1層に固定されており,
入力データの特徴数と同じ単位になる。
? 隠れ層:DNNの中で主要かつ多様性のある要素。
? 一般的にはより複雑な問題 (非線形) に関してはよ
り多くの隠れ層が必要となる。
? 出力層:回帰においては恣意的な実数値(一つの
出力ノード),分類においては特定のクラスを示
す(予測カテゴリー数と同数のノード)。
つくってあそぼう!
? 今まで:DNNの基本的概念の紹介
? 次からはネットワークの基本構造,トレーニン
グネットワークを含むNNを作って,学習させた
後に新データに関する予測を行ってみよう。
? 以降ではみんな大好き滨谤颈蝉たんを使っていきます。
まずデータを知ろう(irisたんとは?)
? アヤメ(お花さんです)の計測データです。
? summary() でみてみましょう
ネットワークの基本構造
? 4つの特徴 (入力) +3つの分類カテゴリー (出力) があ
るようだ。そこで以下のDNN構造が考えられる。
予測:Prediction
? 予測 (classification / inferenceと呼ばれることも
ある) はトレーニング (後に紹介) と比べると簡潔
なものである。
? 出力層では活性化関数は必要ない。分類では確
率がsoftmaxによって計算され,回帰では出力が
予測の実数値によって示される。
? このプロセスはfeed forward / feed propagation
とも呼ばれる。
予測:R code
訓練:Training
? 分類誤差?残差を最小化するプロセス。ネットワー
ク構造下の最適パラメータ (重みづけ+バイアス) を
探索する。
? 2種類のプロセス:Feed forward & back propagation
? Feed-forward:(予測の時と同じように) 入力データ
からネットワークを経由して損失関数によって出力
層におけるデータの損失 (予測ラベルと真のラベルと
の不一致度) を計算する。
※損失関数=推定の悪さを定義した関数
? 今回はsoftmax分類機で使用される交差エントロピー
関数を利用:http://cs231n.github.io/neural-networks-2/#losses参照
訓練.2
? データの損失 (予測ラベルと真のラベルとの不一致度)
を得た後,重みづけとバイアスを変更することによっ
てそれらを最小化する必要がある。
? back-propagation:各パラメータ (重みづけとバイア
ス) に関するデータの損失の導函数を求める勾配降下
や確率的勾配降下法によってすべての層やニューロン
に誤差逆伝播 (back-propagation) を行う。
? ※誤差逆伝播は各活性化関数により異なる。以下を参
照:http://mochajl.readthedocs.io/en/latest/user-guide/neuron.html
さらに詳細:http://cs231n.github.io/neural-networks-3/
すごい適当な訓練のイメージ
feed-forward
back-propagation
data loss
※注意!!
こっからアホみたいに長いです。
余裕があるときにじっくり見て
いただければと思います。
トレーニング:R code (引数設定)
トレーニング:R code
(引数データからの入力)
トレーニング:R code
(modelの設定:初期値など)
トレーニング:R code
(モデルの各パラメータ)
トレーニング:R code
(訓練の中枢)
トレーニング:R code
(可視化用)
トレーニング:R code
(逆向きの計算)
トレーニング:R code (更新)
トレーニング:R code (仕上げ)
よしやってみよう
? これでDNNに必要な予測と訓練に関する関数
が完成した。
→ 早速性能を試してみよう!
set.seed() 乱数を設定:
結果を再現させる関数
トレーニングだ!
左の値は損失=低いほどいい
右の値は正確性=高いほどいい
iterationが増えるほどいい感じに
なっていっているのがわかる。
ちなみにtrain.dnnの引数のx=入力の数,y=irisデータのラベルの列を指定しているよ
結果の確認
setosa は満点
他もほぼあってる(すごい
値
可视化:损失と正确性
まとめ
? 今回はDNNの主要な概念や要素の説明を行い,
Rによるニューラルネットワークの実装も示しま
した。
? Irisデータをかなり正確に分類するNetworkも作
れました。これをきっかけにどんどんDNNの勉
強をすすめていくと楽しいと思います。
? ご指摘?ご意見ございましたらお手数ですが是
非@Nsushi ( twitter) までご連絡ください
おまけ
? 「Neural network browser」でググるか
? ↓にいくと
? http://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle&regD
ataset=reg-
plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.
76541&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTime
sY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=fa
lse&collectStats=false&problem=classification&initZero=false
? GUI(ボタンポチポチ操作)で簡単かつ視覚
的にNeural networkを楽しめるぞ!!
画面(学习前
画面(学习后
おまけのまとめ
? すんごい簡単にブラウザ上でDNNができる。
? まずはこれで色々遊んでみてもDNNと仲良くな
れると思います。
もちろんRたんとも
仲良くしてね!
※発表者はRのこと
を右図のようにイメ
―ジして日々楽しく勉強しています。
参考文献
? 今回の内容は基本的にここを死ぬほど参考にし
てます。
http://www.r-bloggers.com/r-for-deep-learning-
i-build-fully-connected-neural-network-from-
scratch/
? ちなみにCodeは以下にあります。
http://www.parallelr.com/materials/2_DNN/iris_d
nn.R
参考文献
Deep Learningの基礎:
http://www.slideshare.net/kazoo04/deep-learning-
15097274
http://www.slideshare.net/pfi/deep-learning-
22350063
http://stonewashersjournal.com/2015/03/05/deeple
arning1/
活性化関数に関して:
http://wpedia.goo.ne.jp/wiki/%E6%B4%BB%E6%80
%A7%E5%8C%96%E9%96%A2%E6%95%B0
http://sleepy-
programmer.blogspot.jp/2015/02/2.html

More Related Content

がんばろう!はじめての顿苍苍!