3 분 소요

퍼셉트론이 뭐죵?

  • 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호로 출력한다.
  • 여기서 말하는 신호 란 전류가 “흐른다”, “안흐른다”의 두 가지 값을 가질 수 있다.
  • 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력하며 그 한계를 임계값 이라고한다.
  • 신호가 흐른다 -> 1 , 신호가 흐르지 않는다 -> 0
  • 식으로 표현하면 이렇다.

AND 게이트

  • 입력이 둘이고 출력은 하나다.
  • 입력이 모두 1일 때만 1을 출력하고 그 이외에는 0을 출력한다.

파이썬으로 간단한 구현

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

print("AND 함수 기대값 0 출력" , AND(0,1))
print("AND 함수 기대값 1 출력" , AND(1,1))

코드 이해하기

  • w1, w2 는 가중치 , theta는 임계 값이다.
  • 파라미터 x1, x2 각각 0 과 1 을 받으면 미리 정해둔 가중치와 곱한 값이 tmp 변수에 저장된다.
  • 이 떄 tmp의 변수 값이 임계 값 0.7. 보다 높다면 1을 출력한다.

가중치와 편향 도입

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

코드 이해하기

  • 아까전에 쎄타를 -b로 치환한다.
  • 변수 x, w 는 브로드캐스팅으로 계산된다.
  • 총 합에서 편향이 더해져 0 보다 작은지 판별한뒤 값이 리턴된다.

NAND 게이트와 OR 게이트

  • NAND 진리표


  • OR 진리표

파이썬으로 구현

def NAND(x1, x2):

    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5]) # and와는 가중치(w와 b)만 다르다!
    b = 0.7
    tmp = np.sum(w*x) + b

    if tmp <= 0:
        return 0
    else:
        return 1

def OR(x1, x2):

    x = np.array([x1, x2])
    w = np.array([0.5, 0.5]) # and와는 가중치(w와 b)만 다르다!
    b = -0.2
    tmp = np.sum(w*x) + b

    if tmp <= 0:
        return 0
    else:
        return 1
  • AND,NAND,OR 는 모두 같은 구조의 퍼셉트론이다.
  • 차이는 가중치 매개변수의 값뿐이다.

퍼셉트론의 한계

  • 위의 OR 게이트는 0,0 일 때 0을 출력하고 나머지 (0, 1) , (1, 0) , (1 , 1) 일 때는 1을 출력한다. 따라서 위 그림과 같이 1개의 직선으로 네 점을 나눌 수 있다.

  • XOR 게이트는 배타적 논리 회로다.
  • 위와 같은 XOR 게이트 같은 경우 직선으로 나눌 수 없다.
  • 하지만 아래 그림과 같이 곡선이면 나눌 수 있다.

아니 그럼 XOR 게이트는 어떻게 만들지?

  • XOR 게이트를 만드는 방법은 다양하지만 그 중에 하나는 앞에서 만든 AND, NAND, OR 게이트를 조합하면 된다.
  • 다음의 그림을 다시 진리표로 나타내면 아래와 같다.
  • 복습을 해보자면
    • x1, x2 값이 둘 다 0이면 NAND 에서 값은 1, OR 에서는 0 이다.
    • x1, x2 값이 0, 1이면 NAND 에서 값은 1, OR 에서는 1 이다.
    • x1, x2 값이 1, 0이면 NAND 에서 값은 1, OR 에서는 1 이다.
    • x1, x2 값이 둘 다 1이면 NAND 에서 값은 0, OR 에서는 1 이다.
      • 위 값으로 다시 AND 게이트에 대입하면 XOR이 완성된다.

파이썬으로 구현

def XOR(x1, x2):

    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)

    return y

다층 구조의 네트워크

  • XOR 의 퍼셉트론을 그림으로 표현하면 이렇다.
  • AND, OR은 단층 퍼셉트론인 데 반해 XOR은 2층 퍼셉트론이다.
  • 이처럼 층이 여러개인 퍼셉트론을 다층 퍼셉트론이라고 한다.
  • 놀라운 사실은 NAND 게이트의 조합만으로 컴퓨터를 만들 수 있다고 한다.
  • 이론상 퍼셉트론은 층을 거듭 쌓으면 비선형적인 표현도 가능하고 컴퓨터가 수행하는 처리도 모두 표현할 수 있다.

출처 : 밑바닥부터 시작하는 딥러닝

댓글남기기