Bonseong 2021. 1. 6. 15:44

 

 

 

 

 

2.1 퍼셉트론이란?

  • 퍼셉트론 : 다수의 신호를 입력으로 받아 하나의 신호를 출력
  • 신경망은 뉴런(Neuron)들로 이루어진 그룹을 의미
  • 입력신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해짐
  • 뉴런에서 보내온 신호의 총합이 정해진 한계 (임계값) 를 넘어설 때 1 출력
  • 퍼셉트론은 각각에 고유한 가중치 부여, 가중치는 각 신호가 결과에 주는 영향을 조절하는 요소로 작용
 

2.2 단순한 논리 회로

 

2.2.1 AND 게이트

  • AND 게이트 : 두 입력이 모두 1일 때만 1을 출력, 그 외에는 9을 출력

2.2.2 NAND 게이트와 OR 게이트

  • NAND : Not AND, AND 게이트의 출력을 뒤집은 것
  • AND 게이트를 구현하는 매개변수의 불호를 모두 반전하면 NAND 게이트가 됨
  • OR 게이트 : 입력 신호 중 하나 이상 1이면 출력이 1이 되는 논리 회로
 
  • 퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 같음
  • 세 가지 게이트에서 다른 것은 매개변수 (가중치와 임계값)의 값
 

2.3 퍼셉트론 구현하기

 

2.3.1 간단한 구현

In [1]:
import numpy as np

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

2.3.2 가중치와 편향 도입

  • theta 를 -b로 치환
  • 퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력
In [2]:
x = np.array([0,1]) #입력
w = np.array([0.5, 0.5]) #가중치
b = -0.7 #편향

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

2.3.3 가중치와 편향 구현하기

 
  • theta 를 편향 -b로 치환시킴
  • 가중치 : 각 입력 신호가 결과에 주는 영향력을 조절하는 매개변수
  • 편향 : 뉴런이 얼마나 쉽게 활성화하느냐를 조정하는 매개변수
In [3]:
# 가중치와 편향을 구현한 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
In [4]:
# 가중치와 편향을 구현한 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
    
# 가중치와 편향을 구현한 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
 
  • AND, NAND, OR은 모두 같은 구조의 퍼셉트론이고, 차이는 가중치 매개변수의 값
 

2.4 퍼셉트론의 한계

 

2.4.1 XOR 게이트

  • XOR 게이트 : 배타적 논리합 논리회로, x1 x2 중 한쪽이 1일 때만 1을 출력
  • 퍼셉트론으로는 이 게이트를 구현할 수가 없음
 

2.4.2 선형과 비선형

  • 하지만 직선이라는 제약을 없앤다면 (비선형) XOR 게이트의 문제 해결 가능
 

2.5 다층 퍼셉트론

  • 퍼셉트론에 층을 쌓음
 

2.5.1 기존 게이트 조합

  • AND, NAND, OR 게이트를 조합해 XOR 게이트를 형성

2.5.2 XOR 게이트 구현

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

print(XOR(0,0))
print(XOR(0,1))
print(XOR(1,0))
print(XOR(1,1))
 
0
1
1
0
 
  • 위와 같은 2층 퍼셉트론에서는 0층에서 1층으로 신호가 전달되고, 이어서 1층에서 2층으로 신호가 전달 됨
  • 0층의 듀 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄, 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력함
  • 다충 퍼셉트론을 통해 더 다양한 것을 표현
 

2.6 NAND에서 컴퓨터까지

  • NAND를 통해 다양한 표현을 할 수 있음
  • 2층 퍼셉트론, 정확히 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있음
 

2.7 정리

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