# 論理回路をパーセプトロンで表現

パーセプトロン : 単層のネットワークであり、活性化関数にステップ関数を使用

- x : 入力
- w : 重み（各入力の重要度を表す）
- b : バイアス（発火のしやすさを表す）
- a : ニューロンへの入力の総和
- h : 活性化関数（今回はステップ関数）
- y : 出力

\begin{equation}
    a = (x_1 * w_1 + x_2 * w_2) + b
\end{equation}

\begin{equation}
    y = h(a)
\end{equation}


```python
import numpy as np
```


```python
# ステップ関数 h(a)
def step(a):
    if a <= 0:
        return 0
    elif a > 0:
        return 1
```


```python
# 1層
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.6, 0.6])
    b = -1.0
    a = np.sum(x*w) + b
    y = step(a)
    return y

# 1層
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.6, -0.6])
    b = 1.0
    a = np.sum(x*w) + b
    y = step(a)
    return y

# 1層
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.6, 0.6])
    b = -0.4
    a = np.sum(x*w) + b
    y = step(a)
    return y

# 2層
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y
```


```python
# ANDの確認
print(AND(0, 0), end=" ")
print(AND(0, 1), end=" ")
print(AND(1, 0), end=" ")
print(AND(1, 1))
```

    0 0 0 1



```python
# NANDの確認
print(NAND(0, 0), end=" ")
print(NAND(0, 1), end=" ")
print(NAND(1, 0), end=" ")
print(NAND(1, 1))
```

    1 1 1 0



```python
# ORの確認
print(OR(0, 0), end=" ")
print(OR(0, 1), end=" ")
print(OR(1, 0), end=" ")
print(OR(1, 1))
```

    0 1 1 1



```python
# XORの確認
print(XOR(0, 0), end=" ")
print(XOR(0, 1), end=" ")
print(XOR(1, 0), end=" ")
print(XOR(1, 1))
```

    0 1 1 0



```python

```

e52743ae53f5d54966d17b9b9fcdbb6bc5014b92
ipynb
Jupyter Notebook
Notebook/1_perceptron.ipynb
YusukeKato/Start_DeepLearning
8b20f2b15ae16fa1c9cb9c10db740fa2d9cc0c4d
MIT
Notebook/1_perceptron.ipynb
YusukeKato/Start_DeepLearning
8b20f2b15ae16fa1c9cb9c10db740fa2d9cc0c4d
MIT
Notebook/1_perceptron.ipynb
YusukeKato/Start_DeepLearning
8b20f2b15ae16fa1c9cb9c10db740fa2d9cc0c4d
MIT
Qwen/Qwen-72B
1. YES
2. YES