퍼셉트론이란?
- 다수의 신호를 입력으로 받아 하나의 신호를 출력하는 알고리즘으로, 딥러닝의 기원이 되는 알고리즘.
- 입력신호를 받으면 뉴런(노드)에서 가중치가 곱해지고, 이 신호들의 총합이 임계값 보다 클 경우 1,
작거나 같을 경우 0을 출력
- 가중치는 입력신호의 가치에 따라 사용자가 임의로 설정 가능 (중요한 값에 높은 가중치)
- 따라서 출력신호가 1이 될 경우 뉴런이 활성화 되면서 데이터가 흐름
(가중치의 크기에 따라 데이터의 흐름 여부가 결정된다고 보면 됨)
- 임계값에 편향이라는 요소를 더하여 활성화의 민감도를 조절
- 가중치 (w) : 입력신호가 결과에 주는 영향력을 조절하는 요소
- 편향 (b) : 뉴런이 얼마나 쉽게 활성화 되느냐를 조절하는 요소 (보통 -로 표현)
=> ex) (가중치*입력값) + (가중치*입력값) +편향 > 1 뉴런활성화
(가중치*입력값) + (가중치*입력값) +편향 =< 0 뉴런비활성화
파이썬으로 표현하는 퍼셉트론의 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))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))
파이썬으로 표현하는 퍼셉트론과 편향(bias)
import numpy as np
x = np.array([0,1]) # 입력값
w = np.array([0.5,0.5]) # 가중치
b = -0.7 # 임계값 대신 사용하는 편향
print(np.sum(w*x)+b) # 계산된 가중치에 편향을 더한 결과 출력
퍼셉트론의 한계
- XOR게이트 계산 불가
: XOR 게이트 = 배타적 논리합. A와 B 중 한쪽이 1일때만 1을 출력하는 논리회로
- 선형영역 (그래프에서 직선으로 나누어지는 영역)은 가능하나
비선형 영역(그래프에서 곡선으로 나누어지는 영역)은 표현 불가
: 이를 해결하기 위해서 다층 퍼셉트론이 등장 (다음장에)
다층퍼셉트론
- XOR게이트 문제를 해결하지 못하는 단층퍼셉트론의 문제를 해결한 퍼셉트론
- 여러개의 단층퍼셉트론을 조합하여 XOR문제까지 해결
(OR, NAND, AND 논리회로를 조합하여 XOR문제 해결)
- 구조는 입력층 / 은닉층 / 출력층 으로 구분됨
- 입력층 : 입력을 담당하는 계층, 특징 벡터의 차원에 따라 d개의 노드와 여분의 편향노드로 구성
- 은닉층 : 입력층과 출력층 사이의 감춰진 계층. 노드의 개수는 사용자가 설정
- 출력층 : 출력을 담당하는 계층, 분류 개수에 따라 m개의 노드로 구성
기존 퍼셉트론의 AND, NAND, OR 파이썬코드
import numpy as np
def AND(x1, x2):
x = np.array([0,1])
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([0,1])
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([0,1])
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("AND = ", AND(0,1))
print("NAND = ", NAND(0,1))
print("OR = ", OR(0,1))
결과 :
AND = 0 NAND = 1 OR = 1
파이썬코드로 표현한 다층퍼셉트론을 이용한 XOR 구현
import numpy as np
def AND(x1, x2):
x = np.array([0,1])
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([0,1])
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([0,1])
w = np.array([0.5,0.5])
b = -0.2 tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
def XOR(x1,x2):
s1=NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
print("AND = ", AND(0,1))
print("NAND = ", NAND(0,1))
print("OR = ", OR(0,1))
print("XOR = ", XOR(0,1))
결과 : AND = 0 NAND = 1 OR = 1 XOR = 0
보다시피 XOR은 NAND와 OR을 거쳐 AND연산을 하여 계산이 된다.
즉, 퍼셉트론을 계층적인 구조로 변경하여 여러개를 사용해 해결을 한 것 이다.
다층 퍼셉트론과 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다고 한다.
이 다층퍼셉트론을 이용하면 더 복잡한 연산도 가능하며
앞으로 설명하게될 신경망(딥러닝)을 배우는데 베이스가 된다.
퍼셉트론과 다층 퍼셉트론 정리
1. 퍼셉트론에서는 가중치(결과에 대한 입력신호의 영향력 조절)와 편향(뉴런의 활성화 정도 조절)을
매개변수로 설정한다
2. 퍼셉트론을 여러층의 구조로 설계한 다층 퍼셉트론을 이용하면 더욱 복잡한 연산도 가능하다.
'Computer Science > DeepLearning' 카테고리의 다른 글
인공지능 기초 6 - 머신러닝 모델 선택과 검증 (0) | 2020.12.10 |
---|---|
인공지능 기초 5 - 특징공간 (0) | 2020.12.10 |
인공지능 기초 4 - 신경망 (0) | 2020.12.10 |
인공지능 기초 2 - 모델의 종류와 알고리즘 (0) | 2020.12.10 |
인공지능 기초 1 - 인공지능과 머신러닝 (0) | 2020.12.10 |