Perceptron

  • 퍼셉트론?
  • 다수의 신호를 입력으로 받아 하나의 신호를 출력.
    신호 => 강물, 전류, 바람 같이 "흐름"이 있는 것으로 생각!
    가중치=weight(w), 편향=bias(b) 를 매개변수로 설정해 나타냄.

  • 간단한 게이트들 : AND, NAND, OR, NOR
  • 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 <= 0:
            return 0
        else:
            return 1
    
    def NAND(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 <= 0:
            return 0
        else:
            return 1
        
    def OR(x1, x2):
        x = np.array([x1,x2])
        w = np.array([0.5, 0.5])
        b = -0.2
        tmp = np.sum(w*x) + b
        if tmp <= 0:
            return 0
        else:
            return 1
        
    def NOR(x1, x2):
        x = np.array([x1,x2])
        w = np.array([-0.5, -0.5])
        b = 0.2
        tmp = np.sum(w*x) + b
        if tmp <= 0:
            return 0
        else:
            return 1
        
    
  • 퍼셉트론의 한계
  • 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있음.(선형 영역 가능, 비선형 영역 불가) ex) 단층으로는 XOR 게이트 표현 불가 따라서 "층을 쌓아" 다층 퍼셉트론을 구현할 필요가 있음.

  • XOR 게이트 NAND로만 구현해보기 + AND,OR,NAND로 구현해보기
  • 
    def XOR(x1,x2):
        """ USING ONLY NAND 1"""    
        s1 = NAND(x1,x1)
        s2 = NAND(x2,x2)
        t1 = NAND(s1,x2)
        t2 = NAND(x1,s2)
        return NAND(t1,t2)    
    
        """ USING ONLY NAND 2"""    
        nand = NAND(x1,x2)
        s1 = NAND(x1,nand)
        s2 = NAND(x2,nand)
        return NAND(s1,s2)
    
        """ USING AND, OR, NAND """
        s1 = NAND(x1,x2)    
        s2 = OR(x1,x2)
        return AND(s1,s2)
    

댓글

이 블로그의 인기 게시물

Loss Function

Backpropagation

SGD = Stochastic Gradient Descent