한 번만 더 해보자

[Deep Learning] 밑바닥부터 시작하는 딥러닝 2장 본문

Deep Learning

[Deep Learning] 밑바닥부터 시작하는 딥러닝 2장

정 하임 2023. 2. 26. 16:53

2. 퍼셉트론

2.1. 퍼셉트론이란?

  • 퍼셉트론 : 다수의 신호를 입력으로 받아 하나의 신호 출력
  • 신호가 흐른다(1) / 신호가 안 흐른다(0) 두가지 값을 가짐

퍼셉트론

 

  • 입력으로 두개의 신호를 받은 퍼셉트론의 예
  • x1, x2 = 입력신호 /  y = 출력신호 / w1, w2 = 가중치
  • 원 = 뉴런 or 노드라고 불림
  • 입력신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해짐
  • 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설때만 1을 출력함
  • 정해진 한계 = 임계값, Θ(세타)로 나타냄

 

 

 

 

퍼셉트론 수식

$$ y = \begin{Bmatrix} 0(w_{1}x_{1}+w_{2}x_{2} \leq \theta )\\ 1(w_{1}x_{1}+w_{2}x_{2} < \theta ) \end{Bmatrix} $$

가중치는 각 신호가 결과에 주는 영향력을 조전하는 요소로 작용한다.

가중치가 클수록 해당 신호가 중요함을 뜻함

 

 

 

 

 

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

print(AND(0,0)) # 0
print(AND(1,0)) # 0
print(AND(0,1)) # 0
print(AND(1,1)) # 1

 

 

 

2.3.2. 가중치와 편향 도입

$$ y = \begin{Bmatrix} 0( b + w_{1}x_{1}+w_{2}x_{2} \leq 0 )\\ 1( b + w_{1}x_{1}+w_{2}x_{2} < 0 ) \end{Bmatrix} $$
  • b = 편향
  • w1, w2 = 가중치
  • 퍼셉트론  
    • 입력신호에 가중치를 곱한 값 + 편향  > 0 → 1 출력
    • 입력신호에 가중치를 곱한 값 + 편향  <= 0 → 0 출력
import numpy as np

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

print(w*x) # [0.  0.5]
print(np.sum(w*x)) # 0.5
print(np.sum(w*x) + b) # -0.19999999999999996

 

 

 

2.3.3. 가중치와 편향 구현하기

AND 게이트 구현

import numpy as np

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
  • -Θ가 편향 b로 치환됨
  • 편향(b)는 가중치(w1, w2)와 기능이 다름
    • 가중치(w1, w2) : 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수
    • 편향(b) : 뉴런이 얼마나 쉽게 활성화 하느냐를 조정하는 매개변수 (결과를 1로 출력하느냐

 

 

NAND 게이트 구현

import numpy as np

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 1
    else:
        return 0

 

 

 

 

 

2.4. 퍼셉트론의 한계

2.4.1. XOR 게이트

  • XOR게이트는 배타적 논리합이라는 논리회로임
    • 배타적 : 자기 외에는 거부한다
  • 퍼셉트론은 직선 하나로 나눈 영역에만 표현할 수 있다는 한계가 있음 곡선은 표현할 수 X

 

 

 

 

 

2.5. 다층 퍼셉트론

2.5.1. 기존 게이트 조합

 

 

 

 

2.5.2. XOR 게이트 구현하기

import numpy as np



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 1
    else:
        return 0

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

 

다층 퍼셉트론

  • 왼쪽부터 0층, 1층, 2층
  • 다층 퍼셉트론 : 층이 여러개인 퍼셉트론
  • 실행순서
    • 1. 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄 
    • 2. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y 출력

 

 

 

 

 

2.7. 정리

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