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

Chainerによる深層学習(1)

youichiro
February 21, 2017

 Chainerによる深層学習(1)

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

youichiro

February 21, 2017
Tweet

More Decks by youichiro

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  3. Chainerとは
    l Deep Learningのプログラムを作るためのPythonライブラリ
    l フリーソフトウェアとして公開されている
    特徴
    l あらゆるニューラルネットの構造に柔軟に対応
    l ネットワーク構成を直感的に記述できる
    l GPUを利用した高速な計算が可能
    2 /18

    View Slide

  4. NumPy
    l 配列を効率的に扱うためのパッケージ
    l データ解析のプログラムでよく使われる
    インストール
    Ø pip install numpy
    Pythonプログラムでインポート
    Ø import numpy as np
    3 /18

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  12. ニューラルネットモデル
    中間層の出力ベクトル
    = $
    $ + $
    出力層の出力
    = () = .
    . + .
    = .
    . $
    $ + $ + .
    $ , . :バイアス
    $ , . :重み
    $
    , .
    :活性化関数
    11








    !(#)
    !(%)
    &%

    &'
    (%
    (#
    ()









    *(%)
    *(#)
    /18

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  19. まとめ
    18
    l Chainerとは
    l NumPyの使い方
    l ニューラルネットモデル
    l 確率的勾配降下法と誤差逆伝播法
    参考文献
    「Chainerによる実践深層学習」 新納浩幸 著 オーム社
    /18

    View Slide