본문 바로가기
밑바닥 딥러닝

Chapter2 - Perceptron

by winston1214 2020. 12. 28.
반응형

퍼셉트론이란?

 

다수의 신호를 입력으로 받아 하나의 신호를 출력한다.

- 신호 : 흐름이 있는 것이라고 정의 (1 : 신호가 흐른다. 0: 신호가 흐르지 않는다.)

perceptron 기본 원리

x1x2 : input (입력 신호), (w1,w2) : 각각의 가중치, y : 출력 신호

 

여기서 theta는 임계값(한계점이라고 이해)

 

퍼셉트론은 각각의 고유한 가중치를 부여. 각 가중치가 신호의 결과에 주는 영향력을 조절. , 가중치가 클수록 해당 신호가 그만큼 더 중요

 

 

논리회로

 

- AND 게이트

x1

x2

y

0

0

0

1

0

0

0

1

0

1

1

1

모두 1일 때만 1

예시) (w_1,w_2,theta)(0.5,0.5,0.7) or (0.5,0.5,0.8) or (1.0,1.0,1.0)

 

 

 

- NAND(Not AND) 게이트

x1

x2

y

0

0

1

1

0

1

0

1

1

1

1

0

모두 AND의 반대. 서로 같은 조합이면 1을 출력하지 않는다.

예시) (w_1,w_2,theta) (-0.5,-0.5,-0.7) etc...

 

- OR 게이트

x1

x2

y

0

0

0

1

0

1

0

1

1

1

1

1

둘 중 하나만 1이어도 1

예시) (w_1,w_2,theta) (0.5,0.5,0.2) etc...

 

퍼셉트론 구현

def AND(x1,x2):
    w1,w2,theta = 0.5,0.5,0.7
    tmp = x1*w1+x2*w2
    if tmp <= theta: return 0
    else: return 1
if __name__ == "__main__":
    print(AND(0,0)) # 0
    print(AND(1,0)) # 0
    print(AND(0,1)) # 0
    print(AND(1,1)) # 1

 

theta 값을 이항

 이 때 b편향(bias)이 된다.

퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다.

 

w1,w2(가중치)는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수

b(편향)는 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력) 하느냐를 조절하는 매개변수

import numpy as np
x = np.array([0,1]) # inpu
w = np.array([0.5,0.5]) # weight
b = -0.7 # bias
print(w*x) # [0.  0.5]
print(np.sum(w*x)) # 0.5
print(np.sum(w*x)+b) # -0.2

 

# 가중치와 편향을 도입한 AND
def AND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.7 # -theta = b
    tmp = np.sum(w*x) +b
    if tmp <=0: return 0
    else: return 1
if __name__ == "__main__":
    print(AND(0,0)) # 0
    print(AND(1,0)) # 0
    print(AND(0,1)) # 0
    print(AND(1,1)) # 1
가중치와 편향을 도입한 NAND
def NAND(x1,x2):
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5]) # AND 와 가중치와 편향만 다름
    b = 0.7
    tmp = np.sum(w*x)+b
    if tmp<=0: return 0
    else: return 1
if __name__ == "__main__":
    print(NAND(0,0)) # 1
    print(NAND(1,0)) # 1
    print(NAND(0,1)) # 1
    print(NAND(1,1)) # 0
# 가중치와 편향을 도입한 OR
def OR(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5]) # AND 와 가중치와 편향만 다름
    b = -0.2
    tmp = np.sum(w*x)+b
    if tmp<=0: return 0
    else: return 1
if __name__ == "__main__":
    print(OR(0,0)) # 0
    print(OR(1,0)) # 1
    print(OR(0,1)) # 1
    print(OR(1,1)) # 1

퍼셉트론의 한계

베타적 논리합(XOR)을 구현할 수 없다.

x1

x2

y

0

0

0

1

0

1

0

1

1

1

1

0

 

위와 같은 그래프는 선형적인 선으로 나눌 수가 없음. 곡선으로 가야함

XOR

다층퍼셉트론

퍼셉트론에 층을 쌓아서 다층 퍼셉트론을 구현

XOR 게이트를 AND,NAND,OR 게이트를 조합하여 구현

조합으로 구현한 XOR

 

def XOR(x1,x2):
    s1 = NAND(x1,x2)
    s2 = OR(x1,x2)
    y = AND(s1,s2)
    return y
if __name__ == "__main__":
    print(XOR(0,0)) # 0
    print(XOR(1,0)) # 1
    print(XOR(0,1)) # 1
    print(XOR(1,1)) # 0

- XOR 게이트

x1

x2

s1

s2

y

0

0

1

0

0

1

0

1

1

1

0

1

1

1

1

1

1

0

1

0

XOR gate

 

1. 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄

2. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 이 입력 신호를 바탕으로 y를 출력

반응형

'밑바닥 딥러닝' 카테고리의 다른 글

Chapter5 - Backpropogation  (0) 2021.07.03
Chapter4 - Training Neural Network(1)  (0) 2021.02.02
Chapter3 - Neural Network(3)  (0) 2021.01.10
Chapter3 - Neural Network(2)  (0) 2021.01.10
Chapter3 - Neural Network(1)  (0) 2021.01.10

댓글