perceptron
Last updated
Was this helpful?
Last updated
Was this helpful?
ํผ์ ํธ๋ก (perceptron) : ํผ์ ํธ๋ก ์ ํ๋ํฌ ๋ก์ ๋ธ๋ผํธ(Frank Rosenblatt)๊ฐ 1957๋ ์ ๊ณ ์ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ๋ค์์ ์ ํธ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ์ฑํ ํจ์์ ํจ๊ป ์ฌ์ฉํด ์ถ๋ ฅ ๊ฐ์ ๋ค์์ผ๋ก ๋๊ธฐ๋ ๊ฐ์ฅ ์์ ์ ๊ฒฝ๋ง ๋จ์ ์ ๊ฒฝ๋ง(๋ฅ๋ฌ๋)์ ๊ธฐ์์ด ๋๋ ์๊ณ ๋ฆฌ์ฆ ํผ์ ํธ๋ก ์ ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ ์ ๊ฒฝ๋ง๊ณผ ๋ฅ๋ฌ๋์ผ๋ก ๋์๊ฐ๋ ๋ฐ ์ค์ํ ์์ด๋์ด๋ฅผ ๋ฐฐ์ด๋ค.
์ ํธ๋ ? ์ ๋ฅ๋ ๊ฐ๋ฌผ์ฒ๋ผ ํ๋ฆ์ด ์๋ ๊ฒ. ์ฆ, 1์ ์ ํธ๊ฐ ํ๋ฅธ๋ค, 0์ ์ ํธ๊ฐ ํ๋ฅด์ง ์๋๋ค
์ ๋ ฅ๊ฐ (x)๊ณผ ๊ฐ์ค์น(w)์ ๊ณฒ์ ๋ชจ๋ ๋ํ ๋ค์ ๊ฑฐ๊ธฐ์ ๋ฐ์ด์ด์ค(b)๋ฅผ ๋ํ ๊ฐ์ ๊ฐ์คํฉ(y)์ด๋ผ๊ณ ํ๋ค ๊ฐ์คํฉ์ ๊ฒฐ๊ณผ๋ฅผ ๋๊ณ 1 ๋๋ 0์ ์ถ๋ ฅํด์ ๋ค์์ผ๋ก ๋ณด๋ด๋ฉฐ, 0๊ณผ 1์ ํ๋จํ๋ ํจ์๊ฐ ์๋๋ฐ ์ด๋ฅผ ํ์ฑํ ํจ์ (activation function)์ด๋ผ ํ๋ค
๋จ์ํ ๋ ผ๋ฆฌ ํ๋ก
๊ฒ์ดํธ(gate, ํ๋ก)
์ ์
AND ๊ฒ์ดํธ
๋ชจ๋๊ฐ 1์ผ๋๋ง
NAND ๊ฒ์ดํธ
Not AND ์๋ฏธ
OR ๊ฒ์ดํธ
์ ํธ์ค์ ํ๋ ์ด์์ด 1์ด๋ฉด
XOR ๊ฒ์ดํธ
๋ ์ค ํ๋๋ง 1์ผ ๋ 1์ ์ถ๋ ฅ
AND ํจ์ (๊ฐ์ค์น์ ํธํฅ์ ๋์ )
NAND ๊ฒ์ดํธ
```python
import numpy as np
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 if name == 'main': for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]: y = NAND(xs[0], xs[1]) print(str(xs) + " -> " + str(y))
: ๊ธฐ์กด์ด ํผ์ ํธ๋ก ์ผ๋ก๋ XOR๋ฅผ ํด๊ฒฐํ ์ ์์ด ๋ค์ธต ํผ์ ํธ๋ก ์ผ๋ก ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค. ์ฆ, ์ขํ ํ๋ฉด ์์ฒด์ ๋ณํ๋ฅผ ์ฃผ์ด, ๋๊ฐ์ ํผ์ ํธ๋ก ์ ํ๋ฒ์ ๊ณ์ฐ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ผ๋ฉฐ, ์จ์ด์๋ ์ธต, ์ฆ ์๋์ธต์ ๋ง๋ค์ด์ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค ์๋์ธต์ ๋ชจ์ด๋ ์ค๊ฐ ์ ๊ฑฐ์ฅ์ ๋ ธ๋(node)๋ผ๊ณ ํ๋ค
์ ๋ ์์ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ์ธ ์๋ก ๋ณด๋ด์ง๋ฉฐ, ์ถ๋ ฅ์ธต์์๋ ์๊ทธ๋ชจ์ด๋ ํจ์๋ฅผ ํตํด y๊ฐ์ด ์ ใ ์ง๋ค
์ด ๊ฐ์ yout์ด๋ผ ํ ๋ ์์ผ๋ก ํํํ๋ฉด
๊ฐ๊ฐ์ ๊ฐ์ค์น(w) ์ ๋ฐ์ด์ด์ค (b)์ ๊ฐ์ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋์ด ๋์ ์ ์์ผ๋ฉฐ,
์๋์ธต์ ํฌํจํด ๊ฐ์ค์น 6๊ฐ์ ๋ฐ์ด์ด์ค 3๊ฐ๊ฐ ํ์ํ๋ค