Published on

๐Ÿ“Deep Learning from Scratch - 02 ํผ์…‰ํŠธ๋ก 

ํผ์…‰ํŠธ๋ก  ์•Œ๊ณ ๋ฆฌ์ฆ˜(Perceptron Algorithm)


ํผ์…‰ํŠธ๋ก  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? 1957๋…„ ํ”„๋ž‘ํฌ ๋กœ์  ๋ธ”๋ผํŠธ(Frank Rosenblatt)์— ์˜ํ•ด ๊ณ ์•ˆ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ์„œ ํ˜„๋Œ€ ์‹ ๊ฒฝ๋ง(๋”ฅ๋Ÿฌ๋‹)์˜ ๊ธฐ์›์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

2.1 ํผ์…‰ํŠธ๋ก ์ด๋ž€?


  • ๋‹ค์ˆ˜์˜ ์‹ ํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ํ•˜๋‚˜์˜ ์‹ ํ˜ธ๋ฅผ ์ถœ๋ ฅ.
  • ์‹ ํ˜ธ๋ž€? ์ „๋ฅ˜๋‚˜ ๊ฐ•๋ฌผ์ฒ˜๋Ÿผ ํ๋ฆ„์ด ์žˆ์Œ.
  • ํ๋ฆ„์— ๊ด€ํ•œ ์‹ ํ˜ธ๋กœ 'ํ๋ฅธ๋‹ค/์•ˆ ํ๋ฅธ๋‹ค'๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๋‘๊ฐ€์ง€ '1/0'์œผ๋กœ๋งŒ ๊ตฌ๋ถ„.
  • 1 = ์‹ ํ˜ธ๊ฐ€ ํ๋ฅธ๋‹ค. 0 = ์‹ ํ˜ธ๊ฐ€ ํ๋ฅด์ง€ ์•Š๋Š”๋‹ค๋กœ ์„ค์ •.

2.1.2 ํผ์…‰ํŠธ๋ก  ์ˆ˜์‹


y={0(w1x1+w2x2โ‰คฮธ)1(w1x1+w2x2>ฮธ)y= \begin{cases} 0 & ( w_1x_1 + w_2x_2 \leq \theta)\\ 1 & ( w_1x_1 + w_2x_2 > \theta)\\ \end{cases}

๋ณต์ˆ˜์˜ ์ž…๋ ฅ ์‹ ํ˜ธ์— ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌ. ๊ฐ€์ค‘์น˜๋Š” ๊ฐ ์‹ ํ˜ธ๊ฐ€ ๊ฒฐ๊ณผ์— ์ฃผ๋Š” ์˜ํ–ฅ๋ ฅ์„ ์กฐ์ ˆํ•˜๋Š” ์š”์†Œ๋กœ ์ž‘์šฉ. "๊ฐ€์ค‘์น˜๊ฐ€ ํด์ˆ˜๋ก ํ•ด๋‹น ์‹ ํ˜ธ๊ฐ€ ๊ทธ๋งŒํผ ๋” ์ค‘์š”ํ•จ"

2.2 ๋‹จ์ˆœํ•œ ๋…ผ๋ฆฌ ํšŒ๋กœ


AND ๊ฒŒ์ดํŠธ ๊ตฌํ˜„

x1x_1x2x_2yy
001
100
010
111

์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐํ•ฉ ๊ฐ€๋Šฅ.

(w1,w2,ฮธ)โˆ’(0.5,0.5,0.7)โˆ’(0.5,0.5,0.8)โˆ’(1.0,1.0,1.0) (w_1, w_2, \theta) - (0.5, 0.5, 0.7) - (0.5, 0.5, 0.8) - (1.0, 1.0, 1.0)

๋ชจ๋‘ AND ๊ฒŒ์ดํŠธ์˜ ์กฐ๊ฑด ๋งŒ์กฑ

NAND ๊ฒŒ์ดํŠธ ๊ตฌํ˜„

x1x_1x2x_2yy
001
101
011
110
(w1,w2,ฮธ)=(โˆ’0.5,โˆ’0.5,โˆ’0.7) (w_1, w_2, \theta) = ( -0.5, -0.5, -0.7)

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋”์šฑ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ ๊ฐ€๋Šฅ.

2.3 ํผ์…‰ํŠธ๋ก  ๊ตฌํ˜„ํ•˜๊ธฐ


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

AND(0, 0) # 0์„ ์ถœ๋ ฅ
AND(0, 1) # 0์„ ์ถœ๋ ฅ
AND(1, 0) # 0์„ ์ถœ๋ ฅ
AND(1, 1) # 1์„ ์ถœ๋ ฅ

2.3.2 ๊ฐ€์ค‘์น˜์™€ ํŽธํ–ฅ ๋„์ž…


์•ž์„œ ๋‚˜์˜จ ํผ์…‰ํŠธ๋ก  ์ˆ˜์‹์„ ํ™•์žฅ์„ ์œ„ํ•ด ์ˆ˜์ •

y={0(b+w1x1+w2x2โ‰ค0)1(b+w1x1+w2x2>0)y= \begin{cases} 0 & ( b + w_1x_1 + w_2x_2 \leq 0)\\ 1 & ( b + w_1x_1 + w_2x_2 > 0)\\ \end{cases}

b = ํŽธํ–ฅ(bias), w1 & w2 = ๊ฐ€์ค‘์น˜(weight)

์ƒˆ๋กœ ์ž‘์„ฑํ•œ ์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด์„ํ•˜๋ฉด, ํผ์…‰ํŠธ๋ก ์€ ์ž…๋ ฅ ์‹ ํ˜ธ์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณฑํ•œ ๊ฐ’๊ณผ ํŽธํ–ฅ์„ ํ•ฉํ•˜์—ฌ, 0์ด ๋„˜์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅ.

import numpy as np
def AND(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 <= 9:
        return 0
    else:
        return 1

2.4 ํผ์…‰ํŠธ๋ก ์˜ ํ•œ๊ณ„


XOR ๊ฒŒ์ดํŠธ ๊ตฌํ˜„์€ ํ•จ์ˆ˜ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ผ ๋•Œ, ์ง์„ ์„ ์ด์šฉํ•ด์„œ ๋‚˜ํƒ€๋‚ด๊ธฐ์—๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, "๊ณก์„ "์„ ํ™œ์šฉํ•˜์—ฌ ํ‘œํ˜„๊ฐ€๋Šฅํ•˜๋‹ค. ์ง์„ ๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์˜์—ญ์„ ๋‚˜๋ˆˆ ๊ฒƒ์„ "์„ ํ˜• ์˜์—ญ"์ด๋ผ ํ•˜๊ณ , ๊ณก์„ ์„ ํ™œ์šฉํ•˜์—ฌ ์˜์—ญ์„ ๋‚˜๋ˆˆ ๊ฒƒ์„ "๋น„์„ ํ˜• ์˜์—ญ"์ด๋ผ๊ณ  ํ•œ๋‹ค.

2.5 ๋‹ค์ธต ํผ์…‰ํŠธ๋ก 


XOR ๊ฒŒ์ดํŠธ ๊ตฌํ˜„์€ "๋‹จ์ธต ํผ์…‰ํŠธ๋ก (single-layer perceptron)"์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ํ˜„์žฌ ๊นŒ์ง€ ๋ฐฐ์šด ํผ์…‰ํŠธ๋ก ๋“ค์€ ๋ชจ๋‘ ๋‹จ์ธต ํผ์…‰ํŠธ๋ก ์ด๊ณ  ์ด๋“ค์€ ๋ชจ๋‘ ์„ ํ˜•์˜์—ญ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์•ž์„œ ๊ตฌํ˜„ํ•œ ํผ์…‰ํŠธ๋ก  ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ "๋‹ค์ธต ํผ์…‰ํŠธ๋ก (multi-layer perceptron)"์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.6 ๋งˆ๋ฌด๋ฆฌ

๋‹ค์ธต ํผ์…‰ํŠธ๋ก ์„ ์ด์šฉํ•˜์—ฌ "์ด๋ก ์ƒ" 2์ธต ํผ์…‰ํŠธ๋ก ์œผ๋กœ ์ปดํ“จํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. "๋น„์„ ํ˜•์ธ ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜"๋ฅผ ํ™œ์„ฑํ™”ํ•จ์ˆ˜๋กœ ์ด์šฉํ•˜์—ฌ ์ž„์˜์˜ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ. ์œ„์—์„œ ๋ฐฐ์šด ํผ์…‰ํŠธ๋ก  ํ•จ์ˆ˜๋Š” ์‹ ๊ฒฝ๋ง์˜ ๊ธฐ์ดˆ๊ฐ€ ๋œ๋‹ค.

๋ฐฐ์šด ๋‚ด์šฉ ์š”์•ฝ

  • ํผ์…‰ํŠธ๋ก ์€ ์ž…์ถœ๋ ฅ์„ ๊ฐ–์ถ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ž…๋ ฅ์„ ์ฃผ๋ฉด ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ฅธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ํผ์…‰ํŠธ๋ก ์€ '๊ฐ€์ค‘์น˜'์™€ 'ํŽธํ–ฅ'์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ํผ์…‰ํŠธ๋ก ์€ AND, OR ๊ฒŒ์ดํŠธ๋“ฑ์˜ ๋…ผ๋ฆฌ ํšŒ๋กœ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • XOR๊ฒŒ์ดํŠธ๋Š” ๋‹จ์ธต ํผ์…‰ํŠธ๋ก ์œผ๋กœ๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค.
  • 2์ธต ํผ์…‰ํŠธ๋ก ์„ ์ด์šฉํ•˜๋ฉด XOR ๊ฒŒ์ดํŠธ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ธต ํผ์…‰ํŠธ๋ก ์€ ์ง์„ ํ˜• ์˜์—ญ๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์ธต ํผ์…‰ํŠธ๋ก ์€ ๋น„์„ ํ˜• ์˜์—ญ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์ธต ํผ์…‰ํŠธ๋ก ์€ (์ด๋ก ์ƒ) ์ปดํ“จํ„ฐ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.