[책 요약] 밑바닥부터 시작하는 딥러닝 1-Chapter 2. 퍼셉트론

Introduction

  • 퍼셉트론(perceptron)은 Frank Rosenblatt에 의해 1957년에 고안된 알고리즘이다
  • 이 알고리즘은 신경망(딥러닝)의 기원이 되는 알고리즘이다

퍼셉트론이란?

  • 퍼셉트론은(인공뉴런, 단순 퍼셉트론)은 다수의 신호를 입력으로 받아 하나의 신호를 출력

  • x1, x2는 입력, y는 출력, w1과 w2는 가중치, 원은 노드 혹은 뉴런
  • 뉴런에서 보내온 신호의 총합이 정해진 한계(\(\theta\))를 넘으면 1을 출력. 아니면 0.
  • 여기서는 임계값(\(\theta\))으로 표현
  • 이를 수식으로 나타내면 다음과 같다. $$y = \begin{cases}
       0 & (w_1x_1 + w_2x_2 \leq \theta) \\
       1 & (w_1x_1 + w_2x_2 > \theta)
    \end{cases}$$
  • 가중치는 전류에서 말하는 저항으로 볼 수도 있다.

단순한 논리 회로

  • AND 게이트
    • 입력이 둘이고 출력은 하나. 다음과 같은 입력 신호와 출력 신호의 대응표를 진리표라고 한다. 두 입력이 모두 1일 때만 1을 출력, 그 외에는 0을 출력
      $$ \begin{array}{cc:c}
      x_1 & x_2 & y
      \\ \hdashline
      0 & 0 & 0 \\
      1 & 0 & 0 \\
      0 & 1 & 0 \\
      1 & 1 & 1 \\
      \end{array}$$
    • 이 AND 게이트로 퍼셉트론을 표현하려면 어떻게 해야 할까? → w1, w2, \(\theta$를 정하면 된다
    • 위 표를 만족하는 조합은 무수히 많다. (0.5, 0.5, 0.8), (1.0, 1.0, 1.0) 등…
  • NAND 게이트와 OR 게이트
    • NAND(Not And) : AND 게이트의 출력을 뒤집은 것, 두 값이 같으면 1 아니면 0 출력
      $$\begin{array}{cc:c}
      x_1 & x_2 & y
      \\ \hdashline
      0 & 0 & 1 \\
      1 & 0 & 1 \\
      0 & 1 & 1 \\
      1 & 1 & 0 \\
      \end {array}$$
      • (w1, w2, \(\theta\)) = (-0.5, -0.5, -0.7), (1, -0.5, -1)…
      • 사실 AND 게이트의 Weight와 \(\theta\)를 부호만 바꾸면 된다
    • OR 게이트: 입력 신호 중 하나 이상이 1이면 출력이 1
      • $$\begin{array}{cc:c}
        x_1 & x_2 & y
        \\ \hdashline
        0 & 0 & 0 \\
        1 & 0 & 1 \\
        0 & 1 & 1 \\
        1 & 1 & 1 \\
        \end {array}$$
      • (w1, w2, \(\theta\)) = (0.2, 0.2, 0.1) …
  • 여기서 퍼셉트론의 매개 변수 값을 정하는 것을 컴퓨터가 자동으로 하도록 하는 것이 학습이다.

퍼셉트론 구현하기

  • 가중치와 편향 도입
    • \(\theta\)를 -b로 치환하면 다음과 같이 된다
      $$y = \begin{cases}
         0 & (b + w_1x_1 + w_2x_2 \leq 0) \\
         1 & (b + w_1x_1 + w_2x_2 > 0)
      \end{cases}$$ 
    • 여기서 b(편향은) 가중치 w와 기능이 다르다. w는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수고, 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)되느냐를 조정하는 매개변수
    • 문맥에 따라 둘 다 가중치라고 부르기도 한다.

퍼셉트론의 한계

  • XOR 게이트
    • XOR 게이트는 배타적 논리합으로서 x1과 x2중 한쪽이 1일 때만 1을 출력
      $$\begin{array}{cc:c}
      x_1 & x_2 & y
      \\ \hdashline
      0 & 0 & 0 \\
      1 & 0 & 1 \\
      0 & 1 & 1 \\
      1 & 1 & 0 \\
      \end {array}$$
    • 퍼셉트론으로는 XOR을 구현할 수 없다. 왜일까?
    • 우선 OR 게이트의 동작을 시각적으로 표현해보면 다음과 같다.
    • (b, w1, w2) = (-0.5, 1.0, 1.0)이라 하면,
      $$y=\begin{cases}
       0 & (-0.5 + x_1 + x_2 \leq 0) \\
       1 & (-0.5 + x_1 + x_2 > 0)
      \end{cases}$$
      회색 영역은 0을 출력, 전체 영역은 OR 게이트의 성질을 만족한다.
    • 0은 원, 1은 삼각형일 때 OR 게이트를 만들려면 O와 삼각형을 직선으로 나눠야한다. 위 그림의 직선은 네 점을 제대로 나누고 있다.
    • 반면 다음과 같은 XOR 게이트의 출력은 직선 하나로 만들 수 없다.
    • 하지만 직선 하나로 O와 △을 나눌순 없지만 곡선이라면 가능하다.
    • 곡선의 영역을 비선형 영역, 직선의 영역을 선형 영역이라고 한다.

다층 퍼셉트론이 출동한다면

  • 퍼셉트론으로는 XOR 게이트를 표현할 수 없지만 다층 퍼셉트론(Multi-layer perceptron)은 가능하다.
  • 기존 게이트 조합하기
    • XOR 게이트를 만드는 방법은 다양하다. AND, NAND,OR 게이트를 조합하면 된다.
    • 다음 그림에서 '?'에 게이트를 하나씩 대입하면 XOR를 완성할 수 있다.
      • XOR 게이트의 진리표
        $$\begin{array}{cc:cc:c}
        x_1 & x_2 & s_1 & s_2 & y
        \\ \hdashline
        0 & 0 & 1 & 0 & 0 \\
        1 & 0 & 1 & 1 & 1 \\
        0 & 1 & 1 & 1 & 1 \\
        1 & 1 & 0 & 1 & 0 \\
        \end {array}$$
      • s1 = NAND 게이트 출력, s2= OR 게이트 출력
  • XOR 게이트 구현하기
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

XOR(0, 0) # 0을 출력
XOR(1, 0) # 1을 출력
XOR(0, 1) # 1을 출력
XOR(1, 1) # 0을 출력
  • XOR 게이트를 뉴런을 이용한 퍼셉트론으로 표현하면 다음과 같이 된다.
0, 1, 2 세 개의 층으로 구분되지만, 가중치를 갖는 층은 2개 뿐이라 2층 퍼셉트론이라고 부른다.
  • 위 그림과 같은 2층 퍼셉트론에서는 0층에서 1층으로 신호가 전달되고, 이어서 1층에서 2층으로 신호가 전달 된다.
  • 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있다.
  • 책에는 안나와있지만 아래처럼 그림을 그릴 수 있음

  • XOR 게이트는 계단식 Activation Function이 있는 비선형 함수라고 생각해야함! 즉, 위에서 2개의 레이어를 쌓을 때, 선형 함수 조합이 아니라 비선형 조합이기 때문에 비선형성이 필요한 XOR 문제를 해결 할 수 있었다고 봐야한다. 헷갈리지 말자

NAND에서 컴퓨터까지

  • 다층 퍼셉트론은 복잡한 회로를 만들 수 있다. 예를 들면, 덧셈을 처리하는 계산기, 2진수를 10진수로 변환하는 인코더, 어떤 조건을 충족하면 1을 출력하는 회로(패리티 검사 회로)도 퍼셉트론으로 표현 할 수 있다.
  • 사실은 퍼셉트론을 이용하면 ‘컴퓨터’마저 표현할 수 있다.
  • 컴퓨터 내부에서 이뤄지는 처리가 매우 복잡할 거 같지만 사실은 NAND 게이트의 조합만으로 컴퓨터가 수행하는 일을 재현할 수 있다.
  • 그럼 어떤 구조의 퍼셉트론이면 컴퓨터를 표현할 수 있을까? 층을 얼마나 깊게 하면 컴퓨터가 만들어 질까?
  • 답은 “이론상 2층 퍼셉트론이면 컴퓨터를 만들 수 있다”
  • 정확히는 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다는 사실이 증명되었다.
  • 그러나 실제로 2층 퍼셉트론 구조에서 가중치 조절만으로 컴퓨터를 만다는 것은 너무 어렵다.
  • 실제로도 NAND 등의 저수준 소자에서 시작하여 컴퓨터를 만드는 데 필요한 부품(모듈)을 단계적으로 만들어가는 쪽이 자연스럽다. 즉, 처음에는 AND와 OR 게이트, 그다음에는 반가산기와 전가산기, 그 다음에는 산술 논리 연산 장치(ALU), 그 다음에는 CPU…

정리

질문

  • 퍼셉트론은 애초에 왜 덧셈으로 구현되었지?