オライリー・ジャパンから刊行された「ゼロから作るDeepLearning」の読書会を横浜で開催しています。 その第0回として、同書第2章の「パーセプトロン」をサンプルを兼ねて資料作成・発表をしました。
※当日発表の際に頂いた質問などを盛り込んで加筆修正しています。
「ゼロから作るDeepLearning」読書会 in YOKOHAMA vol.0第2章 「パーセプトロン」たのっち @dproject212016.11.17 さくらWORKS<関内>
View Slide
読書会で読む本、読書会について• 「ゼロから作る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/
パーセプトロンとは• パーセプトロンは、複数の信号を⼊⼒として受け取り、ひとつの信号を出⼒します。ここで⾔う「信号」とは、電流や川のような「流れ」をもつものをイメージするとよいでしょう。電流が導線を流れ、電⼦を先に送り出すように、パーセプトロンの信号も流れを作り、情報を先へと伝達していきます。ただし、実際の電流とは違い、 パーセプトロンの信号は「流す/流さない(1 か 0)」の⼆値の値です。本書では、0 を「信号を流さない」、1 を「信号を流す」に対応させて記述します。(21pより引⽤)
パーセプトロンとは ≤ のとき0 > のとき1(ニューロンが発⽕する)'('(出⼒信号⼊⼒信号 重みノード''((
'('(パーセプトロンとは出⼒信号⼊⼒信号 重みノード''(( = +0 (''+ ((≤ )1 (''+ ((> )式にすると…(式 2.1)
パーセプトロンでANDゲート'('(出⼒信号⼊⼒信号 重みノード''(('(0 0 01 0 00 1 01 1 1 = +0 (0.5'+ 0.5(≤ 0.7)1 (0.5'+ 0.5(> 0.7)真理値表パラメータを当てはめると…
パーセプトロンでNANDゲート'('(出⼒信号⼊⼒信号 重みノード''(('(0 0 11 0 10 1 11 1 0 = +0 (−0.5'+ −0.5(≤ −0.7)1 (−0.5'+ −0.5(> −0.7)真理値表パラメータを当てはめると…
パーセプトロンでORゲート'('(出⼒信号⼊⼒信号 重みノード''(('(0 0 01 0 10 1 11 1 1 = +0 (''+ ((≤ )1 (''+ ((> )真理値表パラメータはどんな値?
パーセプトロンでORゲート(パラメータ⼊れてみた)'('(出⼒信号⼊⼒信号 重みノード''(('(0 0 01 0 10 1 11 1 1 = +0 (0.5'+ 0.5(≤ 0.4)1 (0.5'+ 0.5(> 0.4)真理値表パラメータの例
機械学習の”学習“って?'('(出⼒信号⼊⼒信号 重みノード''((パーセプトロンのパラメータを決めているのは⼈間。機械学習の問題では、このパラメータの値を決める作業をコンピュータに⾃動で⾏わせる。コンピュータがやること:適切なパラメータを決める作業(学習)⼈間がやること:パーセプトロンの構造 (モデル)を考え、コンピュータに学習データを与える。
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.7tmp = x1*w1 + x2*w2if tmp <= theta:return 0elif tmp > theta:return 1 = +0 (''+ ((≤ )1 (''+ ((> )
重みとバイアスの導⼊'('(出⼒信号⼊⼒信号 重みノード''(( = +0 (''+ ((≤ )1 (''+ ((> ) = +0 (''+ ((≤ −)1 (''+ ((> −) = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)バイアス (式 2.1)(式 2.2)
重みとバイアスの導⼊'('(出⼒信号⼊⼒信号 重みノード''(( = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)バイアスとはニューロンの発⽕のしやすさ(出⼒信号が1を出⼒する度合い)を調整するパラメータバイアス (式 2.2)
重みとバイアスの導⼊'('(出⼒信号⼊⼒信号 重みノード''(( = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)>>> import numpy as np>>> x = np.array([0, 1)] #入力>>> w = np.array([0.5, 0.5]) #重み>>> b = -0.7 #バイアス>>> w*xarray([0. , 0.5])>>> np.sum(w*x)0.5>>> np.sum(w*x) + b-0.19999999999999996バイアス インタプリタで実⾏すると…
重みとバイアスの導⼊'('(出⼒信号⼊⼒信号 重みノード''(( = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)■当⽇受けた質問なぜバイアスを⼊れるのか?■回答(おそらく)正規化をしている。をバイアスにすることで、右辺が0になる。すると、式が扱いやすくなる。バイアス
ANDゲートをPythonで実装(バイアス付き)'('(出⼒信号⼊⼒信号 重みノード''((def AND(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1 = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)バイアス
NANDゲートをPythonで実装(バイアス付き)'('(出⼒信号⼊⼒信号 重みノード''((def NAND(x1, x2):x = np.array([x1, x2])w = np.array([-0.5, -0.5])b = 0.7tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1 = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)バイアス ANDとは、重みとバイアスが変わる
ORゲートをPythonで実装(バイアス付き)'('(出⼒信号⼊⼒信号 重みノード''((def OR(x1, x2):x = np.array([x1, x2])w = np.array([0.5, 0.5])b = -0.2tmp = np.sum(w*x) + bif tmp <= 0:return 0else:return 1 = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)バイアス ANDとは、重みとバイアスが変わる
重みとバイアスの導⼊'('(出⼒信号⼊⼒信号 重みノード''(( = +0 ( + ''+ ((≤ 0)1 ( + ''+ ((> 0)同じパーセプトロンでも、重みとバイアスを変えれば別の特性を持ったものにすることができる。バイアス
パーセプトロンでXORゲート'('(出⼒信号⼊⼒信号 重みノード''(('(0 0 01 0 10 1 11 1 0このパーセプトロンでは実現できない真理値表
ORゲートの判定領域'('(出⼒信号⼊⼒信号 重みノード''((バイアス 出⼒0出⼒11110線形な領域になっている
XORゲートの判定領域'('(出⼒信号⼊⼒信号 重みノード''((バイアス 出⼒0出⼒11100線形な領域では実現できない
XORゲートの判定領域'('(出⼒信号⼊⼒信号 重みノード''((バイアス 出⼒0出⼒11100⾮線形な領域にしないといけないではどうするか
多層パーセプトロンでXORゲートAND, NAND, ORの組み合わせでXORの論理回路は実現できる。'('('('(0 0 1 0 01 0 1 1 10 1 1 1 11 1 0 1 0
多層パーセプトロンでXORゲート'('(def XOR(x1, x2):s1 = NAND(x1, x2)s2 = OR(x1, x2)y = AND(s1, s2)return yAND, NAND, ORの組み合わせでXORの論理回路は実現できる。
多層パーセプトロンでXORゲート'(第2層第0層 第1層ノード'('(0 0 1 0 01 0 1 1 10 1 1 1 11 1 0 1 0AND, NAND, ORの組み合わせで実現する'(
【おまけ】NANDのみでXORゲートNANDのみでもXORの論理回路は実現できる。'('( '(0 0 1 1 1 01 0 1 0 1 10 1 1 1 0 11 1 0 1 1 0'(
【おまけ】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
【おまけ】NANDのみ版多層パーセプトロンでXORゲート'(第3層第0層 第1層NANDのみの場合、こうなるのかもしれない'('( '(0 0 1 1 1 01 0 1 0 1 10 1 1 1 0 11 1 0 1 1 0第2層