DS Study/밑바닥부터 시작하는 딥러닝 1

[밑시딥1] [1] 퍼셉트론 (Perceptron)

23학번이수현 2024. 7. 24. 21:41

1. 퍼셉트론

- 다수의 신호를 입력 받아 하나의 신호를 출력하는 체계를 의미

- 퍼셉트론 신호는 흐름을 만들고 정보를 앞으로 전달해줌

- 퍼셉트론의 OutPut은 1/0 두가지 논리값을 가짐(1: 전류흐름 / 0: 전류 흐름X)

- 다음은 퍼셉트론의 구조를 의미

변수 설명 -------------------------------------------------------------------------------------------------

x1,x2 : input

w1,w2 : 가중치(weight)

y : Output

-----------------------------------------------------------------------------------------------------------

Perceptron

- 해당 그림의 원은 뉴런 또는 노드라고 부름

- 뉴런에서 전달 받은 신호의 총합이 임계값을 넘기면 y 에서 1을 출력하고 아니면 0을 출력

- 이를 수식으로 나타내면 다음과 같음.

 

수식을 보면 x1,x2에 가중치가 곱해지면서 x1,x2의 영향력을 조절해줄 수 있음

- 즉, 가중치(weight)가 클수록 해당 input이 상대적으로 중요함을 의미

 

2. 단순한 논리회로

- 이러한 퍼셉트론으로 간단한 논리회로를 구현해보자.

2.1. AND 게이트

- AND게이트의 진리표는 다음과 같다.

 

- 입력값 두개가 전부 True일때만 True

- 한개라도 False면 False를 리턴해준다, 이를 boolean에서 integer로 변환한 진리표를 봐보자.

이를 나타내는 퍼셉트론을 구현해보자.

- (w1,w2,theta) = (0.5,0.5,0.7) 이라고 두면 이를 만족한다.

- 이를 파이썬을 이용하여 간단히 구현해보자. 

- Input

def AND(x1,x2):
    w1,w2,theta = 0.5,0.5,0.7
    y = x1*w1 + x2*w2
    if y > theta:
        return 1
    else:
        return 0

-Output

print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
----------------------------------------
0
0
0
1

2.2. OR 게이트

- OR 게이트의 진리표를 보면 다음과 같다.

- x1,x2중 하나만 True여도 True가 반환되고,

- 둘다 False라면 False가 반환된다.

- (w1,w2,theta) = (0.5,0.5,0.2)로 두면 퍼셉트론을 간단히 구현 가능하다. 

 

- 이를 파이썬 코드로 나타내보자.(기존의 AND게이트를 나타낸 코드에서 가중치와 임계값만 변경해주면 된다.)

#INPUT
def OR(x1,x2):
    w1,w2,theta = 0.5,0.5,0.2
    y = x1*w1 + x2*w2
    if y > theta:
        return 1
    else:
        return 0

print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))

--------------------------------------------------------
#OUTPUT
0
1
1
1

2.3. NAND게이트

- NAND게이트의 진리표는 다음과 같다.

- AND게이트의 정확히 반대라고 생각하면 편하다.

- (w1,w2,theta) = (-0.5,-0.5,-0.7)로 잡으면 쉽게 구현이 가능하다.

- 이를 파이썬으로 한번 구현해보자.

#INPUT
def NAND(x1,x2):
    w1,w2,theta = -0.5,-0.5,-0.7
    y = x1*w1 + x2*w2
    if y > theta:
        return 1
    else:
        return 0

print(NAND(0,0))
print(NAND(1,0))
print(NAND(0,1))
print(NAND(1,1))

------------------------------------------
#OUTPUT
1
1
1
0

 

3. 단층 퍼셉트론의 한계

- 우리는 지금까지 단층 퍼셉트론 즉, 한개의 퍼셉트론으로 AND, NAND,OR게이트들을 구현하였다.

- 이번엔 XOR 게이트를 한번 바라보자.

3.1. XOR 게이트

- XOR게이트는 베타적 논리합을 의미하는데, 진리표는 다음과 같다.

 

- 입력값이 둘다 다르면 True를 반환, 둘다 같으면 False를 반환해준다.

- 이를 단층 퍼셉트론으로 나타내보자 하면 불가능하다.

- 우선 퍼셉트론은 직선으로 하나로 나눈 영역 즉, 선형 영역만 구분 가능하다.

- 이 사실을 인지한 채, XOR게이트를 나타낸 다음 그림을 보자.

- 절대 하나의 직선으로 구분할 수 없다는 것을 알 수 있다.

3.2. 다층 퍼셉트론

- 하지만 XOR게이트를 단층 퍼셉트론 여러개

- 즉, 다층 퍼셉트론으로 구현이 가능하다.

- 우리가 단층 퍼셉트론으로 구현했던 AND, OR, NAND게이트를 이용하여 나타내면 다음과 같다.

 

- 이를 바탕으로 XOR 게이트를 파이썬 코드로 나타내보자.

#INPUT
def XOR(x1,x2):
    z1 = OR(x1,x2)
    z2 = NAND(x1,x2)
    return AND(z1,z2)

print(XOR(1,1))
print(XOR(1,0))
print(XOR(0,1))
print(XOR(0,0))
-----------------------------------------------
#OUTPUT
0
1
1
0