본문 바로가기
AI

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

by YeonGun M 2023. 1. 29.

밑바닥부터 시작하는 딥러닝 요약
Untitled

Chapter 2. 퍼셉트론

  • 퍼셉트론(perceptron) 알고리즘
  • 프랑크 로젠브라크(Frank Rosenblatt)가 1957년 고안
  • 신경망(딥러닝)의 기원

2.1 퍼셉트론이란?

퍼셉트론

  • 다수의 신호를 입력받아 하나의 신호로 출력
  • *신호 흐름과 유사, 흐른다 => 1, True 흐르지 않는다 => 2, False
  • 인공 뉴런, 단순 퍼셉트론
  • $x1$, $x2$ : 입력신호
  • $y$ : 출력신호
  • $w1$, $w2$ :가중치(weight)
  • 그림의 원 : 뉴런 or 노드

Untitled

  • 가중치가 클수록 강한 신호 (전류에서의 저항과 유사)
  • 입력신호가 뉴런에 보내질 때 고유한 가중치를 곱함
  • $\theta$ : 임계값

$y= \begin{cases}
0 \ (w_1x_1 + w_2x_2 <= \theta) \\\
1 \ (w_1x_1 + w_2x_2 > \theta)
\end{cases}$

 

2.2 단순한 논리 회로

2.2.1 AND 게이트

$x_1$ $x_2$ $y$
0 0 0
1 0 0
0 1 0
1 1 1

2.2.2 NAND 게이트

$x_1$ $x_2$ $y$
0 0 1
1 0 0
0 1 0
1 1 0

2.2.3 OR 게이트

$x_1$ $x_2$ $y$
0 0 0
1 0 1
0 1 1
1 1 1

2.3 퍼셉트론 구현

2.3.1 간단한 구현

$x1$, $x2$를 인수로 받는 AND 함수

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
AND(0, 0) # 0을 출력
AND(1, 0) # 0을 출력
AND(0, 1) # 0을 출력
AND(1, 1) # 1을 출력

2.3.2 가중치와 편향 도입

$b$ : $-\theta$ 치환, 편향(bias)

$y= \begin{cases}
0 \ (b + w_1x_1 + w_2x_2 <= 0) \\\
1 \ (b + w_1x_1 + w_2x_2 > 0)
\end{cases}$

import numpy as np
x = np.array([0, 1])     # 입력
w = np.array([0.5, 0.5]) # 가중치
b = -0.7                 # 편향
w*x

>>> array([ 0. ,  0.5])
np.sum(w*x)
>>> 0.5
np.sum(w*x) + b
>>> -0.19999999999999996

2.3.3 가중치와 편향 구현

  • $w1$, $w2$ : 가중치, 입력신호가 결과에 주는 영향력(중요도) 조절 매개변수
  • $b$ : 편향, 뉴런의 활성화(결과로 1 출력) 난이도 조정 매개변수, '한쪽으로 치우쳐 균형을 깬다'
  • $w1$, $w2$, $b$ 를 모두 가중치라 할 수도 있음
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]) # 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

2.4 퍼셉트론의 한계

2.4.1 XOR 게이트

XOR 게이트?

  • 배타적 논리합
  • 배타적: 자기 외에는 거부
  • $x1$과 $x2$가 서로 다를 때 $1$ 출력
  • 직선으로 구현 불가
$x_1$ $x_2$ $y$
0 0 0
1 0 1
0 1 1
1 1 0

2.4.2 선형과 비선형

선형(직선)으로 불가능하지만 비선형(곡선)으로 XOR 구분 가능

Untitled

2.5 다층 퍼셉트론

2.5.1 기존 게이트 조합

AND, NAND, OR 게이트를 조합하여 XOR 게이트 만들기

Untitled

Untitled

$x_1$ $x_2$ $y$
0 0 0
1 0 1
0 1 1
1 1 0

2.5.2 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을 출력

Untitled

  • 다층 퍼셉트론을 통해 단층 퍼셉트론으로 표현하지 못한 것 구현 가능
  • 2진수=>10진수 인코더, 가산기, 컴퓨터 등
  • 시그모이드 함수를 활성화함수로 사용하여 임의의 함수 표현 가능(Chapter 3 참고)

퍼셉트론 정리

  • 퍼셉트론은 입출력을 갖춘 알고리즘
  • 퍼셉트론에서는 가중치와 편향을 매개변수로 설정
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현 할 수 있음
  • XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음
  • 2층 퍼셉트론을 이용하면 XOR 게이트를 표현 할 수 있음
  • 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있음
  • 다층 퍼셉트론은 이론상 컴퓨터를 표현 할 수 있다.

Reference

댓글