🔴 퍼셉트론이란?
- 퍼셉트론은 신경망(딥러닝)의 기원이 되는 알고리즘
- 퍼셉트론은 '인공뉴런' or '단순 퍼셉트론'으로 불린다
- 다수의 신호(전류나 강물처럼 흐름이 있는 것)를 입력으로 받아 하나의 신호를 출력한다
- 단, 흐른다/안 흐른다(1이나 0)의 2가지 값을 가질 수 있다
- 가중치가 클수록 해당 신호가 중요하다는 의미이다
- 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다
- 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다
- 즉, 가중치가 클수록 해당 신호가 그만큼 중요하다는 것을 의미한다
🔴 AND 게이트
- AND 게이트는 입력은 2개이고, 출력은 1개이다
- 두 입력이 모두 1일때만 1을 출력하고, 그 외에는 0을 출력한다
🔴 NAND 게이트와 OR 게이트
- NAND는 Not AND를 의미하며, 그 동작은 AND 게이트의 출력을 뒤집은 것이 된다
- 퍼셉트론으로 AND, NAND, OR 논리 회로를 표현할 수 있다
- 중요한 점은 퍼셉트론의 구조는 AND, NAND, OR 게이트에서 모두 똑같다
- 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값뿐이다
🔴 퍼셉트론 구현하기
def AND(x1, x2): # x1, x2를 인수로 받는 AND라는 함수이다 w1, w2, theta = 0.5, 0.5, 0.7 # 매개변수 w1, w2, theta는 함수 안에서 초기화하고 tmp = x1*w1 + x2*w2 # 가중치를 곱함 if tmp <= theta: # 가중치를 곱한 입력의 총합이 임계값을 넘으면 return 0 # 1을 반환하고 그 외는 0을 반환 elif tmp > theta: return 1
AND(0, 0) # 0을 출력 AND(1, 0) # 0을 출력 AND(0, 1) # 0을 출력 AND(1, 1) # 1을 출력
🔴 가중치와 편향 도입
# b는 편향(bias) # 퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다 import numpy as np x = np.array([0, 1]) # 입력 w = np.array([0.5, 0.5]) # 가중치 b = -0.7 # 편향 print(w*x) # w*x 인덱스가 같은 것끼리 곱하다 ([0, 1] * [0.5, 0.5] => [0, 0.5]) print(np.sum(w*x)) # np.sum() 메서드는 입력한 배열에 담긴 모든 원소의 총합을 계산한다 print(np.sum(w*x) + b)
🔴 가중치와 편향 구현하기
# 가중치와 편향을 도입한 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 # w1, w2는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수 # 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수 # 편향 : 한쪽으로 치우쳐 균형을 깬다
# NAND 게이트 & OR 게이트 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
🔴 퍼셉트론의 한계
🔴 도전! XOR 게이트
- XOR 게이트는 '베타적 논리합'이라는 논리 회로임
- 베타적이란, 자기 외에는 거부한다는 의미
🔴 선형과 비선형
- 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있음
- 즉, 곡선은 표현할 수 없음
🔴 다중 퍼셉트론이 출동한다면
- 퍼셉트론은 XOR 게이트를 표현할 수 없음
- 층을 쌓는 '다층퍼셉트론'을 만들 수 있음
🔴 기존 게이트 조합하기
- 퍼셉트론의 한계는 '단층 퍼셉트론'으로, 이는 XOR 게이트를 표현할 수 없음
- 또는 '단층 퍼셉트론'으로는 비선형 영역을 분리 할 수 없음
- 퍼셉트론을 조합하여 층을 쌓아서 XOR 게이트를 구현할 수 있음
🔴 XOR 게이트 구현하기
import numpy as np 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을 출력
🔴 퍼셉트론
- 퍼셉트론은 모두 3층으로 구성되지만, 가중치를 갖는 층은 사실 2개 (0층과 1층 사이, 1층과 2층 사이) 뿐이니 '2층 퍼셉트론'이라고 부름
- 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄
- 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력함
- XOR 게이트 퍼셉트론에서 작업자들 사이에서 부품을 전달하는 일이 이루어짐
- 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있음
🔴 퍼셉트론 (정리)
- 퍼셉트론은 입출력을 갖춘 알고리즘으로, 입력을 주면 정해진 규칙에 따른 값을 출력함
- 퍼셉트론에서 '가중치'와 '편향'을 매개변수로 설정함
- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있음
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음
- 2층 퍼셉트론을 이용하면, XOR 게이트를 표현할 수 있음
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있음
- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있음