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

Chainerによる深層学習(1)

Avatar for youichiro youichiro
February 21, 2017

 Chainerによる深層学習(1)

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

Avatar for youichiro

youichiro

February 21, 2017
Tweet

More Decks by youichiro

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. ニューラルネットモデル 中間層の出力ベクトル = $ $ + $ 出力層の出力 = ()

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

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