모두야

CH2) 퍼셉트론 본문

밑.시.딥/1권

CH2) 퍼셉트론

미미밍2 2021. 7. 8. 11:37
반응형

2.1 퍼셉트론이란?

퍼셉트론 

  • 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 
  • 신호가 흐른다 (0) , 신호가 흐르지 않는다 (1)

x1, x2 입력 신호
출력 신호
w1,w2 가중치 
노드 (뉴런)
  • 입력 신호가 뉴런에 보내질 때, 각각 고유한 가중치가 곱해진다. 
  • 뉴런에서 보낸 신호의 총 합이 정해진 한계(임계값)을 넘으면 1을 출력한다.  (= 뉴련이 활성화한다.)
  • 가중치는 각 신호가 결과에 주는 영향력이다. 가중치가 클수록 해당 신호가 더 중요하다는 뜻이다.

2.2 단순한 논리 회로

AND 게이트

- AND게이트는 입력이 둘이고 출력은 하나이다.

- 두 입력이 모두 1일때만 1을 출력하고, 그 외에는 0을 출력한다.

 

(w1,w2,θ) = (0.5, 0.5, 07),

(w1,w2,θ) = (0.5, 0.5, 0.8),

(w1,w2,θ) = (1.0, 1.0. 1.0) 일 때 모두 AND 게이트 조건을 만족한다.

 

- x1, x2가 서로 같으면서, 가중치과 곱한 값의 합이 임계치보다 커야한다. 


NAND 게이트

- Not AND 이며, AND 출력을 뒤집은 모양이다.

- 두 입력 x1,x2가 모두 1일때만 0을 출력하고, 그 외에는 1을 출력한다.

 

(w1,w2,θ) = (-0.5, -0.5, -07),

 

OR 게이트

- 입력 신호 중 하나 이상이 1이면, 출력이 1이 된다.

 

 

 

 

 

 

퍼셉트론의 매개변수(임계값, 가중치) 값을 정하는 것은 사람이다. 


2.3 퍼셉트론 구현하기

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 <= 0.7   >> 0
print(AND(1,0))   # 0.5 <= 0.7 >> 0
print(AND(0,1))   # 0.5 <= 0.7 >> 0
print(AND(1,1))   # 1 > 0.7    >> 1

 

가중치 편향 도입

θ 를 -b로 치환하여 편향이라 부른다.

 

  • 퍼셉트론 : 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0 넘으면 1 출력 / 그렇지 않으면 0 출력
  • 가중치 : w1,w2 는 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수이다.
  • 편향 b: 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수이다.
import numpy as np
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이 출력될 것이다.
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

2.4 퍼셉트론의 한계

XOR 게이트

- 배타적 논리합(eXclusive OR)

- x1, x2 중 한 쪽이 1일 때만 1을 출력한다. 

 

왼쪽 : OR 게이트 선형 그래프

오른쪽 : XOR 게이트는 선형 그래프로 표현이 불가하다.

          : 비선형 영역으로 표시한다. 


2.5 다중 퍼셉트론의 한계

 

  • 단층 퍼셉트론의 조합으로 다층 구조 XOR 게이트를 구현할 수 있다.
  • x1, x2는 NAND와 OR 게이트의 입력이 되고, 
  • NAND와 OR 출력이 AND 게이트의 입력으로 이어진다.

 

 

0층 ~ 1층, 1층 ~ 2층 사이에 가중치 w가 존재한다. 

  1. 0층의 두 뉴런이 입력 신호(x1,x2)를 받아, 1층 뉴런으로 신호를 보낸다.
  2. 1층의 뉴런에서의 출력을 2층의 뉴런으로 입력 신호를 보낸다.
  3. 2층 뉴런은 1층 뉴런으로부터 입력 신호는 받아 y로 출력한다.
# XOR 게이트 구현
def XOR(x1,x2):
  s1 = NAND(x1,x2)
  s2 = OR(x1,x2)
  y = AND(s1,s2)
  return y
print(XOR(0,0))   # 0
print(XOR(1,0))   # 1
print(XOR(0,1))   # 1
print(XOR(1,1))   # 0

2.6 NAND에서 컴퓨터까지

다층 퍼셉트론을 이용하여 더욱 복잡한 회로를 만들 수 있다.

하지만, 더 나아가기 위해서는

비선형인 시그모이드 함수를 활성화 함수로 이용하면 좋다. (3장 신경망)

 

반응형

'밑.시.딥 > 1권' 카테고리의 다른 글

CH4) 신경망 학습 - (2)  (0) 2021.07.23
CH4) 신경망 학습 - (1)  (0) 2021.07.15
CH3) 신경망 - (2)  (0) 2021.07.12
CH3) 신경망 - (1)  (0) 2021.07.08
CH1)헬로 파이썬  (1) 2021.04.21