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

ゼロから作るDeepLearning読書会 in YOKOHAMA vol.0 第2章「パーセプトロン」

dproject21
November 17, 2016

ゼロから作るDeepLearning読書会 in YOKOHAMA vol.0 第2章「パーセプトロン」

オライリー・ジャパンから刊行された「ゼロから作るDeepLearning」の読書会を横浜で開催しています。
その第0回として、同書第2章の「パーセプトロン」をサンプルを兼ねて資料作成・発表をしました。

※当日発表の際に頂いた質問などを盛り込んで加筆修正しています。

dproject21

November 17, 2016
Tweet

More Decks by dproject21

Other Decks in Technology

Transcript

  1. 読書会で読む本、読書会について • 「ゼロから作るDeepLearning」斎藤 康毅 著 オライリー・ジャパンより2016年9⽉ 発⾏ https://www.oreilly.co.jp/books/9784873117584/ • 公式サポートページ

    https://github.com/oreilly-japan/deep-learning-from-scratch • 読書会⽤リポジトリ(Wikiで情報集約の予定) https://github.com/dproject21/deep-learning-from-scratch • 読書会Connpassグループ(隔週⽊曜20:00開催予定) https://deeplearning-yokohama.connpass.com/
  2. ' ( ' ( パーセプトロンとは 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 (' ' + ( ( ≤ ) 1 (' ' + ( ( > ) 式にすると… (式 2.1)
  3. パーセプトロンでANDゲート ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( ' ( 0 0 0 1 0 0 0 1 0 1 1 1 = + 0 (0.5' + 0.5( ≤ 0.7) 1 (0.5' + 0.5( > 0.7) 真理値表 パラメータを当てはめると…
  4. パーセプトロンでNANDゲート ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( ' ( 0 0 1 1 0 1 0 1 1 1 1 0 = + 0 (−0.5' + −0.5( ≤ −0.7) 1 (−0.5' + −0.5( > −0.7) 真理値表 パラメータを当てはめると…
  5. パーセプトロンでORゲート ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( ' ( 0 0 0 1 0 1 0 1 1 1 1 1 = + 0 (' ' + ( ( ≤ ) 1 (' ' + ( ( > ) 真理値表 パラメータはどんな値?
  6. パーセプトロンでORゲート (パラメータ⼊れてみた) ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード

    ' ' ( ( ' ( 0 0 0 1 0 1 0 1 1 1 1 1 = + 0 (0.5' + 0.5( ≤ 0.4) 1 (0.5' + 0.5( > 0.4) 真理値表 パラメータの例
  7. 機械学習の”学習“って? ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( パーセプトロンのパラメー タを決めているのは⼈間。 機械学習の問題では、この パラメータの値を決める作 業をコンピュータに⾃動で ⾏わせる。 コンピュータがやること: 適切なパラメータを決める 作業(学習) ⼈間がやること: パーセプトロンの構造 (モ デル)を考え、コンピュー タに学習データを与える。
  8. ANDゲートをPythonで実装 ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 (0.5' + 0.5( ≤ 0.7) 1 (0.5' + 0.5( > 0.7) def AND(x1, x2): w1, w2, theta = 0.5, 0.5, 0.7 tmp = x1*w1 + x2*w2 if tmp <= theta: return 0 elif tmp > theta: return 1 = + 0 (' ' + ( ( ≤ ) 1 (' ' + ( ( > )
  9. 重みとバイアスの導⼊ ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 (' ' + ( ( ≤ ) 1 (' ' + ( ( > ) = + 0 (' ' + ( ( ≤ −) 1 (' ' + ( ( > −) = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) バイアス (式 2.1) (式 2.2)
  10. 重みとバイアスの導⼊ ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) バイアスとは ニューロンの発⽕のしやすさ (出⼒信号が1を出⼒する度合い) を調整するパラメータ バイアス (式 2.2)
  11. 重みとバイアスの導⼊ ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) >>> import numpy as np >>> x = np.array([0, 1)] #入力 >>> w = np.array([0.5, 0.5]) #重み >>> b = -0.7 #バイアス >>> w*x array([0. , 0.5]) >>> np.sum(w*x) 0.5 >>> np.sum(w*x) + b -0.19999999999999996 バイアス インタプリタで実⾏すると…
  12. 重みとバイアスの導⼊ ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) ▪当⽇受けた質問 なぜバイアスを⼊れるのか? ▪回答 (おそらく)正規化をしている。 をバイアスにすることで、 右辺が0になる。 すると、式が扱いやすくなる。 バイアス
  13. ANDゲートをPythonで実装 (バイアス付き) ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード

    ' ' ( ( def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]) b = -0.7 tmp = np.sum(w*x) + b if tmp <= 0: return 0 else: return 1 = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) バイアス
  14. NANDゲートをPythonで実装 (バイアス付き) ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード

    ' ' ( ( def NAND(x1, x2): x = np.array([x1, x2]) w = np.array([-0.5, -0.5]) b = 0.7 tmp = np.sum(w*x) + b if tmp <= 0: return 0 else: return 1 = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) バイアス ANDとは、重みとバイアスが変わる
  15. ORゲートをPythonで実装 (バイアス付き) ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード

    ' ' ( ( def OR(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]) b = -0.2 tmp = np.sum(w*x) + b if tmp <= 0: return 0 else: return 1 = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) バイアス ANDとは、重みとバイアスが変わる
  16. 重みとバイアスの導⼊ ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( = + 0 ( + ' ' + ( ( ≤ 0) 1 ( + ' ' + ( ( > 0) 同じパーセプトロンでも、 重みとバイアスを変えれば 別の特性を持ったものに することができる。 バイアス
  17. パーセプトロンでXORゲート ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( ' ( 0 0 0 1 0 1 0 1 1 1 1 0 このパーセプトロンでは 実現できない 真理値表
  18. ORゲートの判定領域 ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( バイアス 出⼒0 出⼒1 1 1 1 0 線形な領域になっている
  19. XORゲートの判定領域 ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( バイアス 出⼒0 出⼒1 1 1 0 0 線形な領域では実現でき ない
  20. XORゲートの判定領域 ' ( ' ( 出⼒信号 ⼊⼒信号 重み ノード '

    ' ( ( バイアス 出⼒0 出⼒1 1 1 0 0 ⾮線形な領域にしないと いけない ではどうするか
  21. 多層パーセプトロンでXORゲート ' ( ' ( def XOR(x1, x2): s1 =

    NAND(x1, x2) s2 = OR(x1, x2) y = AND(s1, s2) return y AND, NAND, ORの 組み合わせでXORの 論理回路は実現できる。
  22. 多層パーセプトロンでXORゲート ' ( 第2層 第0層 第1層 ノード ' ( '

    ( 0 0 1 0 0 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 AND, NAND, ORの 組み合わせで実現する ' (
  23. 【おまけ】NANDのみでXORゲート NANDのみでも XORの論理回路は 実現できる。 ' ( ' ( def XOR(x1,

    x2): a = NAND(x1, x2) s1 = NAND(a, x1) s2 = NAND(a, x2) y = NAND(s1, s2) return y