๋”ฅ๋Ÿฌ๋‹/Today I learned :

[๋”ฅ๋Ÿฌ๋‹] ํผ์…‰ํŠธ๋ก  (perceptron) - ๋‹ค์ธต ํผ์…‰ํŠธ๋ก 

์ฃผ์˜ ๐Ÿฑ 2021. 3. 19. 13:19
728x90

ํผ์…‰ํŠธ๋ก ์˜ ํ•œ๊ณ„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์ขŒํ‘œ ํ‰๋ฉด ์ž์ฒด์— ๋ณ€ํ™”๋ฅผ ์ฃผ์ž!

XOR ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‘ ๊ฐœ์˜ ํผ์…‰ํŠธ๋ก ์„ ํ•œ๋ฒˆ์— ๊ณ„์‚ฐ ํ•ด์•ผํ•œ๋‹ค  ! ์€๋‹‰์ธต(hidden layer)์„ ๋งŒ๋“ฆ

 

x ์ž…๋ ฅ์ธต node์€๋‹‰์ธต y ์ถœ๋ ฅ์ธต

ํผ์…‰ํŠธ๋ก ์ด ๊ฐ€์šด๋ฐ ์€๋‹‰์ธต์œผ๋กœ ์ž์‹ ์˜ ๊ฐ€์ค‘์น˜w์™€ ๋ฐ”์ด์–ด์Šคb ๊ฐ’์„ ๋ณด๋‚ด๊ณ ,  

์€๋‹‰์ธต์—์„œ ๋ชจ์ธ ๊ฐ’์ด ํ•œ ๋ฒˆ ๋” ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜(σ)๋ฅผ ์ด์šฉํ•ด ์ตœ์ข…๊ฐ’์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ธ๋‹ค. 

 

๋…ธ๋“œ(node) = ์€๋‹‰์ธต์— ๋ชจ์ด๋Š” ์ค‘๊ฐ„ ์ •๊ฑฐ์žฅ

 

n1๊ณผ n2์˜ ๊ฐ’์€ ๊ฐ๊ฐ ๋‹จ์ผ ํผ์…‰ํŠธ๋ก ์˜ ๊ฐ’๊ณผ ๊ฐ™๋‹ค.

 

n1 = σ(x1w11 + x2w21+b1)

  n2 = σ(x1w12 + x2w22 + b2)

 

์ด์ œ ๊ฐ๊ฐ์˜ ๊ฐ€์ค‘์น˜(w)์™€ ๋ฐ”์ด์–ด์Šค(b)์˜ ๊ฐ’์„ ์ •ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋Š˜์–ด๋†“์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์€๋‹‰์ธต์„ ํฌํ•จํ•ด ๊ฐ€์ค‘์น˜ 6๊ฐœ์™€ ๋ฐ”์ด์–ด์Šค 3๊ฐœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

XOR๋ฌธ์ œ ํ•ด๊ฒฐ

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€์ˆ˜๊ฐ’์„ ์ •ํ•˜๊ณ , ๋„์‹์— ๋Œ€์ž…

x1

x2

n1

n2

y out

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’

0

0

σ(0 * (-2) + 0 * (-2) + 3) ≈ 1

σ(0 * 2 + 0 * 2 - 1) ≈ 0

σ(1 * 1 + 0 * 1 - 1) ≈ 0

0

0

1

σ(0 * (-2) + 1 * (-2) + 3) ≈ 1

σ(0 * 2 + 1 * 2 - 1) ≈ 1

σ(1 * 1 + 1 * 1 - 1) ≈ 1

1

1

0

σ(1 * (-2) + 0 * (-2) + 3) ≈ 1

σ(1 * 2 + 0 * 2 - 1) ≈ 1

σ(1 * 1 + 1 * 1 - 1) ≈ 1

1

1

1

σ(1 * (-2) + 1 * (-2) + 3) ≈ 0

σ(1 * 2 + 1 * 2 - 1) ≈ 1

σ(0 * 1 + 1 * 1 - 1) ≈ 0

0

≈๊ฑฐ์˜ ๊ฐ™๋‹ค๋Š” ์˜๋ฏธ

 

n1 = NAND ๊ฒŒ์ดํŠธ

n2 = x1, x2์— ๋Œ€ํ•œ OR ๊ฒŒ์ดํŠธ

y out = n1,n2์— ๋Œ€ํ•œ AND ๊ฒŒ์ดํŠธ

 

 


์ฝ”๋”ฉ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

 

import numpy as np

#w์™€ b
w11 = np.array([-2,-2])
w12 = np.array([2,2])
w2 = np.array([1,1])
b1 = 3
b2 = -1
b3 = -1

# ํผ์…‰ํŠธ๋ก 
def MLP(x, w, b):
	 y = np.sum(w*x)+b
     if y<0:
     	return 0
     else:
       return 1
       
# NAND ๊ฒŒ์ดํŠธ
def NAND(x1, x2):
    return MLP(np.array([x1, x2]), w11, b1)
 
# OR ๊ฒŒ์ดํŠธ
def OR(x1, x2):
    return MLP(np.array([x1, x2]), w12, b2)
 
# AND ๊ฒŒ์ดํŠธ
def AND(x1, x2):
    return MLP(np.array([x1, x2]), w2, b3)
 
# XOR ๊ฒŒ์ดํŠธ
def XOR(x1, x2):
    return AND(NAND(x1, x2),OR(x1, x2))
 
# x1, x2 ๊ฐ’์„ ๋ฒˆ๊ฐˆ์•„ ๋Œ€์ž…ํ•˜๋ฉฐ ์ตœ์ข…๊ฐ’ ์ถœ๋ ฅ
if __name__ == '__main__':
    for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = XOR(x[0], x[1])
        print("์ž…๋ ฅ ๊ฐ’: " + str(x) + " ์ถœ๋ ฅ ๊ฐ’: " + str(y))
๋ฐ˜์‘ํ˜•