Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Chainerによる深層学習(1)

66cc992074ab4522374e429c11fef225?s=47 youichiro
February 21, 2017

 Chainerによる深層学習(1)

長岡技術科学大学
自然言語処理研究室
B3ゼミ発表(第5回)

66cc992074ab4522374e429c11fef225?s=128

youichiro

February 21, 2017
Tweet

More Decks by youichiro

Other Decks in Technology

Transcript

  1. Chainerによる深層学習(1) 平成29年2月22日 長岡技術科学大学 自然言語処理研究室 小川耀一朗

  2. 発表内容 l Chainerとは l NumPyの使い方 l ニューラルネット (確率的勾配降下法と誤差逆伝播法) 1 /18

  3. Chainerとは l Deep Learningのプログラムを作るためのPythonライブラリ l フリーソフトウェアとして公開されている 特徴 l あらゆるニューラルネットの構造に柔軟に対応 l

    ネットワーク構成を直感的に記述できる l GPUを利用した高速な計算が可能 2 /18
  4. NumPy l 配列を効率的に扱うためのパッケージ l データ解析のプログラムでよく使われる インストール Ø pip install numpy

    Pythonプログラムでインポート Ø import numpy as np 3 /18
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. ニューラルネットモデル 中間層の出力ベクトル = $ $ + $ 出力層の出力 = ()

    = . . + . = . . $ $ + $ + . $ , . :バイアス $ , . :重み $ , . :活性化関数 11           !(#) !(%) &% &# &' (% (# ()      *(%) *(#) /18
  13. 確率的勾配降下法と誤差逆伝播法 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
  14. 確率的勾配降下法と誤差逆伝播法 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
  15. 確率的勾配降下法と誤差逆伝播法 第層のユニットから活性化関数に与える入力:; 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
  16. 確率的勾配降下法と誤差逆伝播法 第層のユニットから活性化関数に与える入力:; 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
  17. 確率的勾配降下法と誤差逆伝播法 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
  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
  19. まとめ 18 l Chainerとは l NumPyの使い方 l ニューラルネットモデル l 確率的勾配降下法と誤差逆伝播法

    参考文献 「Chainerによる実践深層学習」 新納浩幸 著 オーム社 /18