본문 바로가기

book

밑바닥부터 시작하는 딥러닝.1 (chap2 : 퍼셉트론)

퍼셉트론 알고리즘

 - 신경망(딥러닝)의 기원이 되는 알고리즘

 - 1957년 프랑크 로젠블라트 고안

    • 퍼셉트론이란?
      • 다수의 신호를 입력 받아 하나의 신호로 출력
      • 당연히 컴퓨터에서는 0/1값으로 처리
        출처 : https://jiny-blog.tistory.com/3
        로직 : 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘는경우, 1을 출력
                 → "뉴런을 활성화 한다" 라고 표현
                 → 정해진 한계 -> "임계값" 이라고 표현
      • 이런 조건에 따라서 신경망을 활성화 할지 말지를 정하는것이다.
        • w1, w2 : 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수
        • θ : 얼마나 쉽게 활성화(결과 1)출력을 하느냐 조정하는 매개변수
        • 수식으로 표현
          θ 값(임계값) 보다 크면 1을 반환

          θ 값(임계값) 보다 작으면 0을 반환
          출처 : https://jiny-blog.tistory.com/3
           
          위에 식에서 θ 값만 편향시키면 같은 로직의 식이 구성된다.
    • 단순한 논리 회로
      https://jiny-blog.tistory.com/3

      "진리표" 라고 명명
      • AND 게이트 : input이 모두 1일 때, 1의 값 출력
        • 계산 방법
          (w1, w2, θ)이 (0.5, 0.5, 0.7), (0.5, 0,5, 0.8), (1.0, 1.0, 1.0) 모두 조건을 통과합니다.

          예를 들어서 계산을 해보면
          (w1, w2, θ)의 값을 (0.5, 0.5, 0.7)이라고 가정하였을때 계산이다.


          (0*0.5) + (0*0.5) = 0.0 < 0.7 → 0
          (1*0.5) + (0*0.5) = 0.5 < 0.7 → 0
          (0*0.5) + (1*0.5) = 0.5 < 0.7 → 0
          (1*0.5) + (1*0.5) = 1.0 > 0.7 → 1
    • NAND게이트 : AND gate의 반대(Not AND)
      • (w1, w2, θ)이 (-0.5, -0.5, -0.7) 이라면
        (0*-0.5) + (0*-0.5) = 0.0 > -0.7 → 1
        (1*-0.5) + (0*-0.5) = 0.5 > -0.7 → 1

        (0*-0.5) + (1*-0.5) = 0.5 > -0.7 → 1
        (1*-0.5) + (1*-0.5) = -1.0 > -0.7 → 0
    • OR게이트 : input 중 하나라도 1이면 1의 값 출력
  • 퍼셉트론 구현하기
    • 파이션 코드로 간단히 구성해보기
      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​
    • θ 을 편향 (왼쪽으로 이동시켜서) 넘파이 코드 작성해보기
      # 해당 코드를 보면서, 왜 Numpy를 사용해야 하는지 알수 있다.
      
      import numpy as np
      x = np.array([0, 1])       # 입력값
      w = np.array([0.5, 0.5])   # 가중치
      b = -0.7
      np.sum(x*w) + b            # (입력과 가중치를 곱하고 가중치를 더해서 0보다 큰지 작은지 비교)​
      
      # 결과 (-0.19999999999999996)
    • AND, NAND, OR에 대해서 파이선 로직이 달라지지 않는다.
      • 가중치(w1, w2)값과 θ 값만 달라지는 것이다. 
      • P.53
  • 퍼셉트론의 한계
    • XOR 게이트 : 배타적 논리합 ('베타적 의미' : 자기 외에는 거부한다는 말!!)
      • x1, x2 중 한쪽이 1일때만 1을 출력함 (자기만 1일때 인정하고 2명다 1인것도 부정하는 베타!!적 논리)
    • 위에서 구현한 로직으로는 커버가 되지 않음
    • XOR를 처리 하기 위해서, 곡선으로 표현하는 비선형 영역이 나오게 되었습니다.
      • 곡선 : 비선형 영역
      • 직선 : 선형 영역
  • 다중 퍼셉트론이 충돌한다면
    • 퍼셉트론으로는 XOR을 표현할 수 없습니다.
    • 퍼세트론의 층을 쌓아서, 다층 퍼셉트론을 구성할 수 있습니다.
      위 그림과 같이 X1,X2에 값에 대해서
      Step1) NAND 연산값을 구하고 
      Step2) OR 연산값을 구하고
      Step3) step1, step2에서 구한값으로 AND연산을 수행한다.
  • 나중에 읽어 볼만한 글