퍼셉트론(perceptron)은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다.
전자회로에서 배우는 AND, OR, NAND(Not AND), XOR(eXclusive OR) 회로 구현을 생각하면 된다.
(단순 퍼셉트론)
두 개의 신호(0, 1)가 입력되어 하나의 출력(y)으로 이어지는 구조
두 개의 신호, x1, x2 에 각각 가중치 w1, w2 가 부여되어 합해지고 (x1*w1 + x2+w2)
이 값이 임계값(θ:theta)보다 높으면 '1'로 출력되고, 같거나 작으면 '0' 으로 출력되는 구조
x1*w1 + x2*w2 ≤ θ ==> y=0
x1*w1 + x2*w2 > θ ==> y=1
임계값(θ)을 편향값(bias)으로 치환하면, ( bias = θ * -1)
bias + x1*w1 + x2*w2 ≤ 0 ==> y=0
bias + x1*w1 + x2*w2 > 0 ==> y=1
가중치와 bias (혹은 임계치)를 설정하는 것만으로 동일한 로직에서 and, or, nand 회로를 구성할 수 있다.
퍼셉트론의 매개변수 값을 정하는 것은 컴퓨터가 아니라 인간. 인간이 직접 진리표라는 학습 데이터를 보면서 매개변수의 값을 생각함. 기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 함. 학습이란 적절한 매개변수 값을 정하는 작업이며, 사람은 퍼셉트론의 구조(모델)을 고민하고 컴퓨터에 학습할 데이터를 주는 일을 함
하지만 XOR 는 하나의 회로로 구현이 불가능하다. (그래프로 표현하면 쉽게 이해가 된다.)
AND, OR, NAND 는 직선으로 영역의 구분이 가능했지만, XOR 는 직선으로 영역 구분이 불가능.
곡선형태의 구분처리가 필요함.
다층의 퍼셉트론이 필요.
다층 퍼셉트론으로 비선형 영역도 표현가능, (이론상) 컴퓨터를 표현할 수 있다.
구현 예)== python ==
def AND(x1, x2): # 아래는 임계치를 이용한 방식, 편향(bias)를 이용한 방식으로 변경도 가능
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp<= theta:
return 0
elif tmp > theta:
return 1
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
== 그래프작성용 python code ==
import numpy as np
import matplotlib.pyplot as plt
plt.plot([0,1,0],[0,0,1], 'bv')
plt.plot([1],[1], 'ro')
plt.axis([-0.2,1.2,-0.2,1.2])
x = np.arange(-0.2, 1.5, 0.1)
y = np.arange(-0.2, 1.5, 0.1)
plt.plot(x, x*0, linestyle='--', color="gray", linewidth=1)
plt.plot(0*y, y, linestyle='--', color="gray", linewidth=1)
plt.plot(x, x*-1 + 1.1)
plt.title("AND")
plt.show()
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1,0],[0,1], 'ro')
plt.plot([0,1],[0,1], 'bv')
plt.axis([-0.2,1.2,-0.2,1.2])
x = np.arange(-0.2, 1.5, 0.1)
y = np.arange(-0.2, 1.5, 0.1)
plt.plot(x, x*0, linestyle='--', color="gray", linewidth=1)
plt.plot(0*y, y, linestyle='--', color="gray", linewidth=1)
plt.title("XOR")
plt.show()
'Bite Bits > Data Science' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝(Deep Learning from Scratch) - 4장 신경망 학습 (0) | 2018.08.24 |
---|---|
한국어 문서 데이타 딥러닝 실습 (feat. doc2vec, mecab-ko) (0) | 2018.08.01 |
Deep Learning from Scratch (밑바닥부터 시작하는 딥러닝) 소스코드 다운로드 (0) | 2017.08.16 |
Supervised Learning vs. Unsupervised Learning (0) | 2017.08.14 |
강화학습 - 마코프 디시즌 프로세서 (0) | 2017.04.17 |