---
# System prepended metadata

title: Untitled

---

## secter 2 パーセプトロン

### chapter 2.1 パーセプトロンとは

まず、パーセプトロンとはアルゴリズムの一種です。
詳しくは、複数の信号を入力として受け取り、一つの信号を出力するアルゴリズムとなっています。
パーセプトロンの動作原理を数式で表すとこうなります。
$$
\begin{equation}
y = 
\begin{cases}
    0, & w_1x_1 + w_2x_2\le \theta \\
    1,        & w_1x_1+w_2x_2>\theta
\end{cases}
\end{equation}
$$

wが重み(バイアス)を表しており、yが出力信号で、xが入力信号を表しております。
また、ここでのθは、送られてきた信号の総和の限界値としています。

パーセプトロンは、複数ある入力信号のそれぞれに固有の重みを持ちます。
そして、その重みは、各信号の重要性をコントロールする要素として働きます。
つまり、重みが大きければ大きいほど、その重みに対応する信号の重要性が高くなるのです。

### chapter 2.2 単純な論理回路

#### 2.2.1 ANDゲート

| x_1|x_2 | y|
| ------ | ----------- | -------|
| 0| 0| 0|
| 1| 0| 0|
| 0| 1| 0|
| 1| 1| 1|

このような、真理値表がある。
このような、２つの入力が１のときだけ１を出力し、それ以外は０を出力するようなものを**ANDゲート**と言います。

#### 2.2.2 NANDゲートとORゲート
まずは、NANDゲートから。
NANDゲートの、NANDとは、Not ANDを表しており、ANDゲートと逆の振る舞いをします。
真理値表では、以下のようになります。
| x_1|x_2 | y|
| ------ | ----------- | -------|
| 0| 0| 1|
| 1| 0| 1|
| 0| 1| 1|
| 1| 1| 0|

このような、２つの入力が１のときだけ0を出力し、それ以外は１を出力するようなものを**NANDゲート**と言います。

続いては、ORゲートを紹介していきます。
早速真理値表から、
| x_1|x_2 | y|
| ------ | ----------- | -------|
| 0| 0| 0|
| 1| 0| 1|
| 0| 1| 1|
| 1| 1| 1|

このような、２つの入力のうちどちらか一方でも１のときに１を出力し、それ以外は０を出力するようなものを**ORゲート**と言います。

ここまで、3つの論理回路を紹介してきましたが、
重要な点は、**パーセプトロンの構造は、AND、NAND、ORゲートの全てで同じであるということ。**
実際この三つで違っている点は、パラメータ(重み)の値だけでした。
つまり、パラメータを変化させることによって、自在に変化させることが可能だということです。

### chapter 2.3 パーセプトロンの実装

#### 2.3.1 簡単な実装

早速ANDゲートを実装していきます。
```python=
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

print(AND(0,0)) #0
print(AND(1,0)) #0
print(AND(0,1)) #0
print(AND(1,1)) #1
```
#### 2.3.2 重みとバイアスの導入

パーセプトロンの動作原理の数式はこのようなものでした。
$$
\begin{equation}
y = 
\begin{cases}
    0, & w_1x_1 + w_2x_2\le \theta \\
    1,        & w_1x_1+w_2x_2>\theta
\end{cases}
\end{equation}
$$
こちらを、こうします。
bをバイアス、wを重みとしています。
$$
\begin{equation}
y = 
\begin{cases}
    0, & b+w_1x_1 + w_2x_2\le 0 \\
    1,        & b+w_1x_1+w_2x_2>0
\end{cases}
\end{equation}
$$



### 2.3.3 重みとバイアスの実装

ここでのバイアスとは、重みとは違う働きをすることに注意していきたい。
具体的には、w1,w2は入力信号への重要度をコントロールするパラメータとして機能するが、バイアスの方は、イベントの発火のしやすさを調整するパラメータとして機能します。

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

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
```
### chapter 2.4 パーセプトロンの限界

#### 2.4.1 XORゲート

XORゲートは、排他的論理和とも呼ばれている論理回路です。

早速真理値表から、
| x_1|x_2 | y|
| ------ | ----------- | -------|
| 0| 0| 0|
| 1| 0| 1|
| 0| 1| 1|
| 1| 1| 0|


