쟈크손 2023. 2. 22. 01:15

책: 밑바닥부터 시작하는 딥러닝

chapter2

퍼셉트론

 

주요 단어

x: 입력 신호

w: 가중치

y: 출력 신호

b: 편향

θ: 임계값

 

2.1퍼셉트론

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

-다수의 신호를 입력으로 받아 하나의 신호를 출력한다.

 -퍼셉트론은 1이나 0의 두 가지 값을 가질 수 있다.

입력이 2개인 퍼셉트론

x: 입력 신호

w: 가중치

y: 출력 신호

-그림의 원은 뉴런 혹은 노드라 부른다.

-x(입력 신호)가 뉴런에 보내질 때는 각각 고유한 w(가중치)가 곱해진다.(x₁w₁, x₂w₂)

-뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력한다.(뉴런이 활성화 한다.)

-그 한계를 임계값이라고 한다.(기호: θ(theta))

-가중치가 클수록 해당 신호가 그만큼 더 중요하다.

퍼셉트론 식

 

 

2.2 단순한 논리 회로(AND, OR, NAND)

-퍼셉트론의 구조는 AND, OR, NAND모두 같다.

-다른 것은 매개변수(가중치와 임계값)의 값 뿐이다.

 

1.AND게이트

-입력이 둘, 출력이 하나이다.

-x₁=1,  x₂=1 일때 1이 출력된다.

-AND게이트를 퍼셉트론으로 구현했을때의 (w₁, w₂, θ) 값은 (0.5, 0.5, 0.7) / (0.5, 0.5, 0.8) / (1.0, 1.0, 1.0) 이 있다.

-(w₁, w₂, θ) 값은 앞에서 말했던 값 이외에도 무한한 값이 있다.

AND게이트 진리표

 

2.OR게이트

-x₁와 x₂중 하나 이상이 1이면 출력이 1이된다.

OR게이트 진리표

3.NAND게이트

- x₁=1, x₂ =1이면 0을 출력하고 나머지는 1을 출력한다.

-AND게이트의 매개변수의 부호를 모두 반전하면 NAND게이트가 된다.

-NAND게이트를 퍼셉트론으로 구현했을때의 (w₁, w₂, θ) 값은 (-0.5, -0.5, -0.7)

-(w₁, w₂, θ) 값은 앞에서 말했던 값 이외에도 무한한 값이 있다.

NAND게이트 진리표

 

2.3 퍼셉트론 구현하기

2.3.1 간단 구현(AND)

 

-x1과 x2를 인수로 받는 AND함수

-입력(x1, x2)에 각각의 가중치(w1, w2)를 곱한 총합이 임계값(theta)을 넘으면 1을 반환하고 그 외에는 0을 반환한다.

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함수를 출력

 

 

2.3.2 가중치와 편향 도입

-θ를 -b로 치환

-여기서 b를 편향(bias)이라고 한다.

&theta;를 -b로 치환한 퍼셉트론 식

-numpy를사용한 구현

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

결과

-np.sum(w*x)+b의 값은 부동소수점 수에 의한 연산 오차이고 대략 -0.2의 값이다.

 

 

2.3.2 가중치와 편향 구현하기

-w1, w2b(편향)은 기능이 다르다.

-w1, w2는 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수

-b(편향)은 뉴런이 얼마나 쉽게 활성화(결과를 1로 출력)하느냐를 조정하는 매개변수

 

가중치와 편향을 도입한 AND게이트

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
    
print('AND(0,0): ',AND(0,0))
print('AND(1,0): ',AND(1,0))
print('AND(0,1): ',AND(0,1))
print('AND(1,1): ',AND(1,1))

AND게이트 결과

가중치와 편향을 도입한 OR게이트

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
    
print('OR(0,0): ',OR(0,0))
print('OR(1,0): ',OR(1,0))
print('OR(0,1): ',OR(0,1))
print('OR(1,1): ',OR(1,1))

OR게이트 결과

 

가중치와 편향을 도입한 NAND게이트

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
    
print('NAND(0,0): ',NAND(0,0))
print('NAND(1,0): ',NAND(1,0))
print('NAND(0,1): ',NAND(0,1))
print('NAND(1,1): ',NAND(1,1))

NAND게이트 결과

 

2.4 퍼셉트론의 한계

XOR게이트

-x₁과 x₂ 중 한쪽이 1일 때만 1을 출력

-지금까지의 퍼셉트론으론 XOR게이트를 구현할 수 없다. 

XOR게이트 진리표

구현할 수 없는 이유

-퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다.

 

 

OR게이트를 시각화

OR게이트 식
OR게이트를 시각적으로 표현

-O모양은 0이 출력되는 입력좌표이고

-△모양은 1이 출력되는 입력좌표이다

-파란 직선은 OR게이트를 표현한 식을 직선화 시킨것이고(-0.5+x₁w₁+x₂w₂)

-회색 부분은 0이 출력되는 부분이다.

-하나의 직선으로 O와 △를 나눌 수 있다.

 

XOR게이트를 시각화

XOR게이트를 시각적으로 표현

-O모양은 0이 출력되는 입력좌표이고

-△모양은 1이 출력되는 입력좌표이다

-OR게이트처럼 하나의 직선으로 O와 △가 나뉘게 할 수 없다.

 

XOR게이트 시각화에서 직선의 제약을 걸지 않음

-XOR처럼 곡선의 영역을 비선형 영역

-OR처럼 직선의 영역을 선형 영역이라고 한다.

 

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

-퍼셉트론의 한계를 극복하기 위해 층을 쌓는 '다층 퍼셉트론'(multi-layer perceptron)을 사용한다.

 

2.5.1 기존 게이트 조합하기

-NAND게이트와 OR게이트, AND게이트를 조합

-NAND게이트의 출력과 OR게이트의 출력값을 AND게이트가 입력으로 받는다.

XOR게이트
XOR게이트 진리표

2.5.2 XOR게이트 구현하기

-기존에 구현했던 AND, OR, NAND함수를 사용한다.

def XOR(x1, x2):
    s1=NAND(x1,x2)
    s2=OR(x1,x2)
    y=AND(s1,s2)
    return y

print('XOR(0,0): ',XOR(0,0))
print('XOR(1,0): ',XOR(1,0))
print('XOR(0,1): ',XOR(0,1))
print('XOR(1,1): ',XOR(1,1))

XOR게이트 결과

XOR게이트를 다층 퍼셉트론으로 표현

XOR게이트를 뉴런을 이용한 퍼셉트론으로 표현한것

-그림과 같이 XOR은 다층 구조의 네트워크이다.

-현재까지AND, OR은 단층 퍼셉트론이고 XOR은 2층 퍼셉트론이다.

-0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.

-1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다.

 

정리

1.퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.

2.퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.

3.퍼셉트론으로 AND, OR게이트 등의 논리 회로를 표현할 수 있다.

4.XOR게이트는 단층 퍼셉트론으로는 표현할 수 없다.

5.2층 퍼셉트론을 이용하면 XOR게이트를 표현할 수 있다.

6.단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.