일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- HTML
- PostgreSQL
- 리뷰
- C언어
- 소프트맥스 함수
- Python
- 설치
- AdaGrad
- FastAPI
- 순전파
- 기울기
- 백준
- PHP
- 아파치
- 파이썬
- 오차역전파법
- 신경망
- 신경망 학습
- 우분투
- 책
- PICO CTF
- flag
- picoCTF
- Python Challenge
- 코딩
- 딥러닝
- CTF
- sgd
- Apache2
- 역전파
- Today
- Total
Story of CowHacker
딥러닝 1. 퍼셉트론 본문
퍼셉트론이란?
딥러닝의 기원이 되는 알고리즘이다.
Frank Rosenblatt가 1957년에 고안한 알고리즘이다.
퍼셉트론의 원리
그림 1에서 x1, x2는 입력 신호고 y는 출력 신호, w1, w2는 가중치다.
네모 칸을 뉴런 또는 노드 라고 부른다.
입력 신호가 뉴런에 보내질 때 각각의 가중치가 곱해진다. 이때 가중치의 각각의 식은 w1*x1, w2*x2다.
이 입력 신호가 정해진 한계 ( θ theta )를 넘어설 때만 1을 출력한다.
그림 2는 그림 1을 수식으로 나타낸 것이다.
다음은 세가지 논리회로의 진리표를 보겠다.
- AND 게이트 진리표 -
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
- NAND 게이트 진리표 -
x1 | x2 | y |
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
- OR 게이트 진리표 -
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
이제 위 세 가지 논리회로를 퍼셉트론으로 구현해 볼 것이다.
사용한 언어는 python이다.
그전에 θ ( theta )를 b로 치환한 식 ( 그림 3 ) 을 본다. 여기서 b는 편향이라고 한다.
import numpy as num
def AND(x1, x2):
x = num.array ([x1, x2]) # x는 입력이다.
w = num.array ([0.5, 0.5]) # w는 가중치다.
b = -0.7 # b는 편향 ( θ )이다.
tmp = num.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
def NAND (x1, x2) :
x = num.array([x1, x2])
w = num.array([-0.5, -0.5]) # AND와는 가중치 (w와 b)만 다르다
b = 0.7
tmp = num.sum ( w*x ) + b
if tmp <= 0:
return 0
else:
return 1
def OR(x1, x2) :
x = num.array([x1, x2])
w = num.array([0.5, 0.5])
b = -0.2
tmp = num.sum(w*x) + b
if tmp <=0:
return 0
else:
return 1
퍼셉트론의 한계
퍼셉트론은 AND, NAND, OR 3가지 논리 회로를 구현할 수 있었지만, XOR 게이트는 불가능하다.
먼저 XOR 게이트 진리표를 확인해보자
x1 | x2 | y |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
XOR은 x1, x2이 각각 1, 1일 때 y가 0이라는 점 빼고는 OR 게이트 진리표와 같은데 바로 이점이 퍼셉트론으로 구현이 불가능하다는 것이다.
그림 4는 OR게이트를 그래프화 한 것이다. 빨간 점은 1을 초록점은 0을 나타낸다.
빨간점 3개와 초록점 1개가 빨간 선 하나로 분리된 걸 볼 수 있다.
빨간 점 3개는 x1, x 2가 각각 ( 1,0 ), ( 0,1 ), ( 1,1 ) 일때를 나타내는 것이고,
초록점 1개는 x1, x2가 각각 ( 0,0 )일 때를 나타낸 것이다.
이제 XOR게이트를 그래프화 해볼 것이다.
XOR 게이트는 위에서 언급했듯이 x1, x2각각 ( 1,1 ) 일떄 0을 가진다 즉 초록 점이 된다.
그렇지만 빨간 직선 하나로 분리하지 못하는 걸 알 수 있다.
그림 6은 비선형 영역으로 분리한 모습이다.
머신러닝에서는 이 비선형을 자주 쓴다.
지금까지 AND, NAND, OR 세 가지 논리회로를 퍼셉트론으로 구현을 해봤는데 여기서 쓰인 퍼셉트론은 단층 퍼셉트론이었다.
이 단층 퍼셉트론을 여러 개 쓰면 다중 퍼셉트론이 될 수 있는데 바로 이 다중 퍼셉트론으로 XOR 게이트를 구현할 수 있다.
x1 | x2 | s1 | s2 | y |
0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 |
위 표는 AND, NAND, OR 세 가지 논리회로를 조합해서 만든 XOR 게이트 진리표다.
x1, x2는 각각 NAND와 OR의 입력 신호다.
s1은 NAND의 출력 신호고, s2는 OR의 출력 신호다.
s1, s2 둘의 출력 신호가 AND게이트의 입력이 된다.
한번 퍼셉트론으로 구현을 해보면 쉽게 이해가 될 것이다.
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
이렇게 퍼셉트론으로 논리 회로 AND, NAND, OR, XOR를 구현해보았다.
하나의 단층 퍼셉트론으로는 구현하지 못하는 것을 여러 단층 퍼셉트론을 사용해 구현할 수 있음을 알 수 있었다.
'공부 > 딥러닝' 카테고리의 다른 글
딥러닝 2.4 신경망 (0) | 2020.08.03 |
---|---|
딥러닝 2.3 신경망 (0) | 2020.08.03 |
딥러닝 2.2 신경망 (0) | 2020.07.26 |
딥러닝 2.1 신경망 (0) | 2020.07.26 |
딥러닝 2.0 신경망 (0) | 2020.07.25 |