신경망 기초 - 퍼셉트론(Perceptron)이란?
퍼셉트론은 인공 신경망으로 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 고안한 알고리즘이다. 인공 신경망은 아래 사진과 같은 실제 신경망을 논리 회로를 통해서 구현한 것이다. 최근 활발하게 개발되는 신경망 알고리즘을 이해하기 위해서 필수적으로 알아야 할 알고리즘이다.
퍼셉트론은 Supervised Learning의 분류기에 쓰이는 알고리즘이다. 결과값은 Vector값으로 나오게 된다. 퍼셉트론은 단층 신경망으로 input values, weights(가중치), bias(편향), net sum, 그리고 Activation Function으로 구성된다. 그림의 제일 우측에 있는 것은 Activation Function의 일종인 Step function으로 계단 함수라 부른다.
From Perceptron Definition | DeepAI
퍼셉트론은 다수의 신호를 받아 하나의 출력 신호를 만든다. 이는 뉴런이 전기신호를 화학적 작용을 통해서 다른 뉴런에 전달하는 과정과 비슷하다. 우선 원모양의 x1, x2, x3…는 뉴런(Neuron) 혹은 노드(Node)라 칭한다.
Perceptron의 Weight는 신경망의 축삭돌기와 같으며 이는 각각 입력신호에 곱해진다. 이런 뉴런들에게서 보내온 신호의 총합이 임계값을 넘었을때 1을 출력하며 임계값의 기호는 θ\theta로 표현한다. 넘지못하면 0 혹은 -1을 출력한다.
여기서 가중치가 클수록 해당 신호가 중요하다고 볼 수 있다.
🤔 Perceptron은 어떻게 동작할까?
우선 Perceptron의 동작 원리를 이해하기 위해서는 다양한 이진 논리 게이트에대한 이해가 필요하다.
대표적으로 많이 쓰이는 AND, OR, NAND게이트에 대해 알아보자.
- AND Gate
AND게이트는 모든 Input값이 참(1)일때만 Output이 1인 게이트이다.
- OR Gate
진리표중 하나 또는 모두가 참(1)이면 1을 출력하는 게이트이다.
- NAND Gate
NAND게이트는 AND의 반대로 모든 입력이 참일때만 거짓 출력을 내보내는 회로이다. 사실 NAND만 있으면 모든 논리 회로 나아가서 컴퓨터까지 구현 가능하다.
기본적인 논리 회로에 대한 설명을 마치고 파이썬으로 기본적인 논리회로 코드룰 구현해보았다.
import numpy as np
# 가중치 편향을 사용한 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
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
퍼셉트론의 한계
퍼셉트론의 한계란 퍼셉트론을 이용한 분류기는 선형 분류만 가능하여 실제 생활에 벌어지는 비선형적인 분류가 거의 불가능하다는 점이다.
From http://ecee.colorado.edu/~ecen4831/lectures/NNet3.html
그렇다면 XOR게이트를 구현해보자. 우선 XOR게이트에 대해서 알아볼 필요가 있다.
XOR게이트는 참 입력의 개수가 홀수일때 참인 출력을 내보내는 논리 게이트이다. OR의 반대인 NOR와 다른게이트이다.
XOR게이트는 단층 논리 게이트로는 구현이 불가능하다. 그러므로 이제 다층 퍼셉트론 (Multi-layer Perceptron)이 필요한 순간이다.
XOR게이트를 NAND, OR, AND을 조합해서 구현하면 다음 도표와 같다.
1층의 위는 NAND, 아래는 OR 그리고 우측은 AND게이트이다. 이를 통해서 XOR게이트를 구현하였고 이를 Python코드를 통해 표현하면 다음과 같다.
def XOR(x1,x2):
s1 = NAND(x1,x2)
s2 = OR(x1,x2)
y = AND(s1,s2)
return y
다층 퍼셉트론으로 단층 퍼셉트론의 한계를 극복하였다.
from https://commons.wikimedia.org/wiki/File:Perceptron_XOR.jpg
이제 딥러닝 공부 기초부터 시작이다.
Written with StackEdit.
'Python > Machine Learning' 카테고리의 다른 글
혼자공부하는 머신러닝 정리 (0) | 2021.01.02 |
---|---|
Machine Learning - 1 (0) | 2020.05.24 |