2-1. 퍼셉트론이란?
퍼셉트론
- 다수의 신호를 입력으로 받아 하나의 신호를 출력한다
- 신호가 흐름을 만들고 정보를 앞으로 전달한다
- '흐른다/안 흐른다(1이나 0)'의 두 가지 값을 가질 수 있다
※ 신호
- 흐름이 있는 것과 같다
퍼셉트론 동작원리
- 위는 입력으로 2개의 신호를 받은 퍼셉트론의 예로 왼쪽 그림에서의 원은 뉴런 혹은 노드라고 부른다
- 오른쪽은 동작원리를 수식으로 표현한 것이다
> 입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해져 이 신호들의 총합이 정해진 한계를 넘어설 때만 1을 출력한다. 이를 '뉴런이 활성화한다'라고 표현한다
> 위에서 말한 한계는 임계값이라고 말한다
2-2. 단순한 논리 회로
AND 게이트
- 진리표는 왼쪽과 같고 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다
- 오른쪽은 진리표를 만족하는 매개변수 조합으로 그 수는 많다.
NAND 게이트
- Not AND를 의미하며, AND 게이트의 출력을 뒤집은 것이 된다
- AND 게이트를 구현하는 매개변수의 부호를 모두 반전하기만 하면 NAND 게이트가 된다
OR 게이트
- 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로이다
> 이런 퍼셉트론의 매개변수 값을 정하는 것은 인간이 직접 진리표라는 '학습 데이터'를 보면서 매개변수의 값을 생각한다
> 기계학습 문제는 매개변수의 값을 정하는 작업을 컴퓨터가 시동으로 하도록 한다
> 여기서 학습이란 매개변수 값을 정하는 작업이다
2-3. 퍼셉트론 구현하기
- 논리 회로 AND를 파이썬으로 구현할 때 아래와 같이 나온다
def AND(x1,x2):
w1,w2,theta=0.5,0.5,0.7
tmp=x1*w1+x2*w1
if(tmp<=theta):
return 0
elif(tmp>theta):
return 1
가중치와 편향 도입
- AND 게이트를 다른 방식으로 수정하면 아래와 같이 나온다
- 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다
- 아래는 Interpreter로 순서대로 결과를 확인하면서 진행한 것이다.
import numpy as np
x=np.array([0,1])
w=np.array([0.5,0.5])
b=-0.7
w*x
# array([0. , 0.5])
np.sum(w*x)
# 0.5
np.sum(w*x)+b
# -0.19999999999999996 대략 -0.2로 부동소수점 수에 의한 연산 오차이다
- 아래는 AND, NAND, OR 게이트를 구현한 것이다.
import numpy as np
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
elif(tmp>0):
return 1
def NAND(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
elif(tmp>0):
return 1
def OR(x1,x2):
x=np.array([x1,x2])
w=np.array([0.5,0.5])
b=-0.2
tmp=np.sum(w*x)+b
if(tmp<=0):
return 0
elif(tmp>0):
return 1
- w1, w2는 각 입력 신호가 결과에 주는 영향력(중요도)를을 조절하는 매개변수고, 편향은 뉴런이 얼마나 쉽게 활성화(결과 1로 출력)하느냐를 조정하는 매개변수이다.
2-4. 퍼셉트론의 한계
XOR 게이트
- 배타적 논리합이라는 논리 회로로 x1과 x2 중 한 쪽이 1일 때만 1을 출력한다
- 진리표를 나타내면 아래와 같다
- 퍼셉트론은 XOR 게이트를 표현할 수 없는데 그 이유는 아래와 같다
> OR 게이트의 식과 그래프는 아래와 같다
> OR 게이트의 그래프, 퍼셉트론은 직선으로 두 영역을 나타낼 수 있다
> OR 게이트를 그래프로 표현하면 아래와 같다
> 하지만 직선으로 두 영역으로 나눌 수 없다
> 이 둘을 나누기 위해서는 곡선의 영역, 비선형 영역과 직선의 영역, 선형 영역으로 나누어야 한다
- XOR 게이트를 만들기 위해서는 AND, NAND, OR 게이트를 조합해야한다.
def XOR(x1,x2):
s1= NAND(x1,x2)
s2=OR(x1,x2)
y=AND(s1,s2)
return y
- XOR을 아래와 같은 다층 구조의 네트워크이다
- 이로 인해 AND, NAND, OR은 단층 퍼셉트론이지만 XOR은 다층 퍼셉트론이다
- XOR의 다층 퍼셉트론의 동작원리는 이와 같다
> 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다
> 1층의 두 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다
- XOR 게이트를 보면 단층 퍼셉트론으로 표현하지 못한 것을 층을 하나 늘려서 구현할 수 있었다
- 또한 단층 퍼셉트론에서 표현하지 못했던 곡선 영역을 다층 퍼셉트론에서 표현할 수 있었다
2.6 NAND에서 컴퓨터까지
- 다층 퍼셉트론은 가산기, 인코더(2진수에서 10진수로 바꾸어주는 것), 회로 등 그리고 컴퓨터를 표현할 수 있다 (정확히는 비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다는 사실이 증명되었다.)
- 퍼셉트론으로 컴퓨터로 표현할 수 있는 이유는 컴퓨터는 NAND 게이트만으로도 만들 수 있기 때문이다
- 이러한 방식으로 NAND 저수준 소자에서 시작하여 컴퓨터를 만드는데 필요한 모듈을 단계적으로 만들어가는 쪽으로 컴퓨터를 만들 수 있다
'학교 공부 > 컴퓨터비전' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝 Chapter 4 : 신경망 학습 (0) | 2024.05.02 |
---|---|
밑바닥부터 시작하는 딥러닝 Chapter3-2 : 신경망 (0) | 2024.05.02 |
밑바닥부터 시작하는 딥러닝 Chapter3-1 : 신경망 (0) | 2024.05.01 |
밑바닥부터 시작하는 딥러닝 Chapter1 : 헬로 파이썬 (0) | 2024.04.29 |