Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Chainerによる深層学習(1)
youichiro
February 21, 2017
Technology
0
240
Chainerによる深層学習(1)
長岡技術科学大学
自然言語処理研究室
B3ゼミ発表(第5回)
youichiro
February 21, 2017
Tweet
Share
More Decks by youichiro
See All by youichiro
日本語文法誤り訂正における誤り傾向を考慮した擬似誤り生成
youichiro
0
700
分類モデルを用いた日本語学習者の格助詞誤り訂正
youichiro
0
43
Multi-Agent Dual Learning
youichiro
1
70
Automated Essay Scoring with Discourse-Aware Neural Models
youichiro
0
67
Context is Key- Grammatical Error Detection with Contextual Word Representations
youichiro
1
83
勉強勉強会
youichiro
0
44
Confusionset-guided Pointer Networks for Chinese Spelling Check
youichiro
0
110
A Neural Grammatical Error Correction System Built On Better Pre-training and Sequential Transfer Learning
youichiro
0
70
An Empirical Study of Incorporating Pseudo Data into Grammatical Error Correction
youichiro
0
120
Other Decks in Technology
See All in Technology
AWS CLI入門_20220513
suzakiyoshito
0
3.9k
LINEのData Platform室が実践する大規模分散環境のCapacity Planning
line_developers
PRO
0
560
SRE の歩き方・進め方 / sre-walk-through-procedure
rrreeeyyy
0
330
Poolにおける足を止めないシステム基盤構築
winebarrel
3
930
Dagu | オンプレ向けワークフローエンジン(WebUI 同梱)
yohamta
0
190
AWS Control TowerとAWS Organizationsを活用した組織におけるセキュリティ設定
fu3ak1
2
650
New Features in C# 10/11
chack411
0
960
Who owns the Service Level?
chaspy
5
1.1k
キャッチアップ Android 13 / Catch up Android 13
yanzm
2
1.2k
數據的多重宇宙 @ LINE Taiwan
line_developers_tw
PRO
0
690
srenext2022-skaru
mixi_engineers
PRO
1
730
Agile and Requirement : アジャイルな要件定義について考える
kawaguti
PRO
9
3.4k
Featured
See All Featured
What the flash - Photography Introduction
edds
61
10k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
Web Components: a chance to create the future
zenorocha
303
40k
Side Projects
sachag
449
37k
Build your cross-platform service in a week with App Engine
jlugia
219
17k
What's new in Ruby 2.0
geeforr
336
30k
WebSockets: Embracing the real-time Web
robhawkes
57
5k
Building Better People: How to give real-time feedback that sticks.
wjessup
343
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
12k
It's Worth the Effort
3n
172
25k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
Transcript
Chainerによる深層学習(1) 平成29年2月22日 長岡技術科学大学 自然言語処理研究室 小川耀一朗
発表内容 l Chainerとは l NumPyの使い方 l ニューラルネット (確率的勾配降下法と誤差逆伝播法) 1 /18
Chainerとは l Deep Learningのプログラムを作るためのPythonライブラリ l フリーソフトウェアとして公開されている 特徴 l あらゆるニューラルネットの構造に柔軟に対応 l
ネットワーク構成を直感的に記述できる l GPUを利用した高速な計算が可能 2 /18
NumPy l 配列を効率的に扱うためのパッケージ l データ解析のプログラムでよく使われる インストール Ø pip install numpy
Pythonプログラムでインポート Ø import numpy as np 3 /18
NumPy –配列の生成- # 配列を生成 >>> np.array([0,1,2,3,4,5]) array([0, 1, 2, 3,
4, 5]) >>> np.arange(6) array([0, 1, 2, 3, 4, 5]) # 配列の形を変更 >>> a = np.arange(6).reshape(2,3) >>> a array([[0, 1, 2], [3, 4, 5]]) 4 # 配列の形とサイズを返す >>> a.shape (2, 3) >>> a.size 6 >>> nrow, ncol = a.shape >>> nrow 2 >>>ncol 3 /18
NumPy –配列の生成- # 0.0が5個ある配列 >>> np.zeros(5) array([0., 0., 0., 0.,
0.]) # 1.0が5個ある配列 >>> np.ones(5) array([1., 1., 1., 1., 1.]) 5 # 配列の要素をシャッフル >>> np.random.permutation(range(6)) array([3, 2, 5, 0, 1, 4]) # 省略形 >>> np.random.permutation(6) array([5, 2, 3, 4, 1, 0]) /18
NumPy –配列の連結- >>> a array([[0, 1, 2], [3, 4, 5]])
>>> b array([[6, 7, 8], [9, 10, 11]]) 6 # 配列を右に連結 >>> np.hstack([a,b]) array([[0, 1, 2, 6, 7, 8], [3, 4, 5, 9, 10, 11]]) # 配列を下に連結 >>> np.vstack([a,b]) array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10,11]]) /18
NumPy –配列の加工- >>> a array([[ 0, 1, 2, 3], [
4, 5, 6, 7], [ 8, 9, 10, 11]]) # 配列の2行目を取り除く >>> a[[0, 2], : ] array([[ 0, 1, 2, 3], [ 8, 9, 10, 11]]) 7 # 配列の3列目を取り除く >>> a[ : ,[0, 1, 3]] array([[ 0, 1, 3], [ 4, 5, 7], [ 8, 9, 11]]) # 条件にあった要素を置き換える >>> a[a % 2 == 0] = -1 >>> a array([[-1, 1, -1, 3], [-1, 5, -1, 7], [-1, 9, -1, 11]]) /18
NumPy –配列に対する演算- >>> a array([[1, 2, 3], [4, 5, 6]])
>>> a + 1 # 四則演算 array([[2, 3, 4], [5, 6, 7]]) >>> a**2 # 2乗 array([[ 1, 4, 9], [16, 25, 36]]) 8 >>> np.sum(a) # 全要素の合計 21 >>> np.mean(a) # 全要素の平均 3.5 # 軸を固定して演算(2次元の場合) >>> np.sum(a, axis=0) # 列ごとの和 array([5, 7, 9]) >>> np.sum(a, axis=1) # 行ごとの和 array([6, 15]) /18
NumPy –配列の積- >>> a array([0, 1, 2, 3]) >>> b
array([4, 5, 6, 7]) # 内積(配列が1次元のとき) >>> a.dot(b) 38 9 >>> a array([[0, 1, 2], [3, 4, 5]]) >>> b array([[0, 1], [2, 3], [4, 5]]) # 行列のかけ算 >>> a.dot(b) array([[10, 13], [28, 40]]) /18
NumPy –配列に対する演算- >>> a array([[ 0, 6, 3], [-2, 7,
2], [ 0, 0, 3]]) # 転置行列 >>> a.T array([[ 0, -2, 0], [ 6, 7, 0], [ 3, 2, 3]]) 10 # 行列式 >>> np.linalg.det(a) 36.0 # 逆行列 >>> np.linalg.inv(a) array([[0.583, -0.5, -0.25], [0.166, 0., -0.166], [ 0., 0., 0.333]]) /18
ニューラルネットモデル 中間層の出力ベクトル = $ $ + $ 出力層の出力 = ()
= . . + . = . . $ $ + $ + . $ , . :バイアス $ , . :重み $ , . :活性化関数 11 !(#) !(%) &% &# &' (% (# () *(%) *(#) /18
確率的勾配降下法と誤差逆伝播法 l バイアス $ , . 及び重み $ , .
のパラメータ → (個のパラメータ) l NNでは適当な初期値 2 から始めて、 3 を 34$ に更新していく l 確率的勾配降下法(Stochastic Gradient Descent, SGD): k番目の訓練データ(5 , 5 )の2乗誤差5 を減少させるように 3 を 34$ に 更新する 2乗誤差 5 = $ . 5 ; 3 − 5 . = $ . ∑ ; − ; . < ;=$ パラメータの更新 34$ = 3 − 5 5 = 5 $ A B=B C , 5 . A B=B C , … , 5 E A B=B C 12 /18
確率的勾配降下法と誤差逆伝播法 l バイアス $ , . 及び重み $ , .
のパラメータ → (個のパラメータ) l NNでは適当な初期値 2 から始めて、 3 を 34$ に更新していく l 確率的勾配降下法(Stochastic Gradient Descent, SGD): k番目の訓練データ(5 , 5 )の2乗誤差5 を減少させるように 3 を 34$ に 更新する 2乗誤差 5 = $ . 5 ; 3 − 5 . = $ . ∑ ; − ; . < ;=$ パラメータの更新 34$ = 3 − 5 = A = , A = , … , A = 結局、SGDでは各 が求まればよい 13 /18
確率的勾配降下法と誤差逆伝播法 第層のユニットから活性化関数に与える入力:; S 第層のユニットの出力:S (; S ) 14 第層のユニット ;
S = T ;3 S SV$ 3 SV$ + ; SV$ 3 2乗誤差を各パラメータで偏微分 5 ;3 S = 5 ; S ; S ;3 S = 5 ; S SV$ 3 SV$ 5 ; S = 5 ; S ; S ; S = 5 ; S ! "# $%& ! #' $ $ + & $ $ − & *$ *$+& , # $ , ' $ /18
確率的勾配降下法と誤差逆伝播法 第層のユニットから活性化関数に与える入力:; S 第層のユニットの出力:S (; S ) 15 第層のユニット ;
S = T ;3 S SV$ 3 SV$ + ; SV$ 3 2乗誤差を各パラメータで偏微分 5 ;3 S = 5 ; S ; S ;3 S = SV$ 3 SV$ 5 ; S = 5 ; S ; S ; S = 第層にかかるパラメータは を計算す れば求まる ! "# $%& ! #' $ $ + & $ $ − & *$ *$+& , # $ , ' $ /18
確率的勾配降下法と誤差逆伝播法 16 第層のユニット 合成関数の微分より 5 ; S = T 5
5 S4$ 5 S4$ ; S 5 ここで 5 S4$ = T 5; S4$ S ; S + 5 S ; なので 5 S4$ ; S = T 5; S4$ S \ ; S ; 最終的に 5 ; S = T 5 5 S4$ T 5; S4$ S \ ; S ; 5 ! "# $%& ! #' $ $ + & $ $ − & *$ *$+& , # $ , ' $ /18
確率的勾配降下法と誤差逆伝播法 17 第層のユニット 合成関数の微分より = T 5 5 S4$ 5
S4$ ; S 5 ここで 5 S4$ = T 5; S4$ S ; S + 5 S ; なので 5 S4$ ; S = T 5; S4$ S \ ; S ; 最終的に 5 ; S = T 4 T 5; S4$ S \ ; S ; 5 ! "# $%& ! #' $ $ + & $ $ − & *$ *$+& , # $ , ' $ 1つ上の層の ] を計算すれば が求まる 出力層から入力層に向かって誤差を伝播して いくことでパラメータを更新していく → 誤差逆伝播法 /18
まとめ 18 l Chainerとは l NumPyの使い方 l ニューラルネットモデル l 確率的勾配降下法と誤差逆伝播法
参考文献 「Chainerによる実践深層学習」 新納浩幸 著 オーム社 /18