.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

動作原理

(x1) --------- w1 --------> (y)
                             ↑
(x2) --------- w2 -----------┘
 入力信号  固有の重み     出力信号

-θ= bはバイアスと呼ばれ、w, θ同様に、「重み」と呼ぶことがある。

単純な論理回路をパーセプトロンで表現

機械学習では下のパラメタを決める作業をコンピュータに行わせる。

ANDゲート

下記のANDゲートを満たすパーセプトロンを作る。

  x1    x2      y
──────┼───
  0     0   │  0
──────┼───
  1     0   │  0
──────┼───
  0     1   │  0
──────┼───
  1     1   │  1

NANDゲート

下記のNANDゲートを満たすパーセプトロンを作る。

  x1    x2      y
──────┼───
  0     0   │  1
──────┼───
  1     0   │  1
──────┼───
  0     1   │  1
──────┼───
  1     1   │  0

例(ANDゲートのパラメタの符号を反転すればOK)

ORゲート

下記のNANDゲートを満たすパーセプトロンを作る。

  x1    x2      y
──────┼───
  0     0   │  0
──────┼───
  1     0   │  1
──────┼───
  0     1   │  1
──────┼───
  1     1   │  1

XORゲートは実装できない。

理由は、以下を縦軸x1、横軸x2にプロットしても閾値の直線を引けないため。

  x1    x2      y
──────┼───
  0     0   │  0
──────┼───
  1     0   │  1
──────┼───
  0     1   │  1
──────┼───
  1     1   │  0

AND

 │
 0  ①
 │
 │
─0──0─────
 │

NAND

 │
 ①  0
 │
 │
─①──①─────
 │

OR

 │
 ①  ①
 │
 │
─0──①─────
 │

NOR

 │
 ①  0
 │
 │
─0──①─────
 │

パーセプトロンを実装する。

簡単な実装

ここから、VSCodeでPythonファイルに書いた。

ANDゲート

"""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))

NANDゲート

w, thetaを以下のようにする。

w_1, w_2, theta = -0.5, -0.5, -0.7

ORゲート

w, thetaを以下のようにする。

w_1, w_2, theta = 0.5, 0.5, 0.3

バイアスを用いた実装

バイアスとベクトルを用いて書き直す。

ANDゲート

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))

NANDゲート

w, bを以下のようにする。

w = np.array([-0.5, -0.5])
b = 0.7

ORゲート

w, bを以下のようにする。

w = np.array([0.5, 0.5])
b = -0.3

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS