「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
(x1) --------- w1 --------> (y) ↑ (x2) --------- w2 -----------┘ 入力信号 固有の重み 出力信号
┌ │0 ( x1 w1 + x2 w2 <= θ ) y = < │1 ( x1 w1 + x2 w2 > θ ) └
┌ │0 ( -θ + x1 w1 + x2 w2 <= 0 ) y = < │1 ( -θ + x1 w1 + x2 w2 > 0 ) └ ┌ │0 ( b + x1 w1 + x2 w2 <= 0 ) y = < │1 ( b + x1 w1 + x2 w2 > 0 ) └
-θ= bはバイアスと呼ばれ、w, θ同様に、「重み」と呼ぶことがある。
機械学習では下のパラメタを決める作業をコンピュータに行わせる。
下記のANDゲートを満たすパーセプトロンを作る。
x1 x2 y ──────┼─── 0 0 │ 0 ──────┼─── 1 0 │ 0 ──────┼─── 0 1 │ 0 ──────┼─── 1 1 │ 1
下記のNANDゲートを満たすパーセプトロンを作る。
x1 x2 y ──────┼─── 0 0 │ 1 ──────┼─── 1 0 │ 1 ──────┼─── 0 1 │ 1 ──────┼─── 1 1 │ 0
下記のNANDゲートを満たすパーセプトロンを作る。
x1 x2 y ──────┼─── 0 0 │ 0 ──────┼─── 1 0 │ 1 ──────┼─── 0 1 │ 1 ──────┼─── 1 1 │ 1
理由は、以下を縦軸x1、横軸x2にプロットしても閾値の直線を引けないため。
x1 x2 y ──────┼─── 0 0 │ 0 ──────┼─── 1 0 │ 1 ──────┼─── 0 1 │ 1 ──────┼─── 1 1 │ 0
│ 0 ① │ │ ─0──0───── │
│ ① 0 │ │ ─①──①───── │
│ ① ① │ │ ─0──①───── │
│ ① 0 │ │ ─0──①───── │
ここから、VSCodeでPythonファイルに書いた。
"""This is a test program.""" def and_method(x_1, x_2): """This is a test program.""" w_1, w_2, theta = 0.5, 0.5, 0.7 tmp = x_1 * w_1 + x_2 * w_2 if tmp <= theta: return 0 else: return 1 print(and_method(0, 0)) print(and_method(1, 0)) print(and_method(0, 1)) print(and_method(1, 1))
w, thetaを以下のようにする。
w_1, w_2, theta = -0.5, -0.5, -0.7
w, thetaを以下のようにする。
w_1, w_2, theta = 0.5, 0.5, 0.3
バイアスとベクトルを用いて書き直す。
import numpy as np """This is a test program.""" def and_method(x_1, x_2): """This is a test program.""" x = np.array([x_1, x_2]) w = np.array([0.5, 0.5]) b = -0.7 tmp = b + np.sum(x*w) if tmp <= 0: return 0 else: return 1 print(and_method(0, 0)) print(and_method(1, 0)) print(and_method(0, 1)) print(and_method(1, 1))
w, bを以下のようにする。
w = np.array([-0.5, -0.5]) b = 0.7
w, bを以下のようにする。
w = np.array([0.5, 0.5]) b = -0.3