Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 정처기
- 네트워크
- 알고리즘
- nfs mount
- 도커
- 스프링
- mAP@.5
- 딥러닝
- C
- C++
- 주피터 노트북
- 도커 컨테이너
- docker
- deepstream
- 딥스트림
- dkms
- yolov7
- Python
- 타오툴킷
- Linux
- 리눅스
- 파이썬
- tao_toolkit
- IOU
- nouveau
- 백준
- SQLD
- Spring
- pyMySQL
- 비디오미리보기
Archives
- Today
- Total
한 번만 더 해보자
[Deep Learning] 밑바닥부터 시작하는 딥러닝 2장 본문
2. 퍼셉트론
2.1. 퍼셉트론이란?
- 퍼셉트론 : 다수의 신호를 입력으로 받아 하나의 신호 출력
- 신호가 흐른다(1) / 신호가 안 흐른다(0) 두가지 값을 가짐

- 입력으로 두개의 신호를 받은 퍼셉트론의 예
- x1, x2 = 입력신호 / y = 출력신호 / w1, w2 = 가중치
- 원 = 뉴런 or 노드라고 불림
- 입력신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해짐
- 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설때만 1을 출력함
- 정해진 한계 = 임계값, Θ(세타)로 나타냄
퍼셉트론 수식
$$ y = \begin{Bmatrix} 0(w_{1}x_{1}+w_{2}x_{2} \leq \theta )\\ 1(w_{1}x_{1}+w_{2}x_{2} < \theta ) \end{Bmatrix} $$가중치는 각 신호가 결과에 주는 영향력을 조전하는 요소로 작용한다.
가중치가 클수록 해당 신호가 중요함을 뜻함
2.3 퍼셉트론 구현하기
2.3.1. x1, x2를 인수로 받는 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)) # 0
print(AND(1,0)) # 0
print(AND(0,1)) # 0
print(AND(1,1)) # 1
2.3.2. 가중치와 편향 도입
$$ y = \begin{Bmatrix} 0( b + w_{1}x_{1}+w_{2}x_{2} \leq 0 )\\ 1( b + w_{1}x_{1}+w_{2}x_{2} < 0 ) \end{Bmatrix} $$- b = 편향
- w1, w2 = 가중치
- 퍼셉트론
- 입력신호에 가중치를 곱한 값 + 편향 > 0 → 1 출력
- 입력신호에 가중치를 곱한 값 + 편향 <= 0 → 0 출력
import numpy as np
x = np.array([0,1]) # 입력
w = np.array([0.5, 0.5]) # 가중치
b = -0.7 # 편향
print(w*x) # [0. 0.5]
print(np.sum(w*x)) # 0.5
print(np.sum(w*x) + b) # -0.19999999999999996
2.3.3. 가중치와 편향 구현하기
AND 게이트 구현
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
else :
return 1
- -Θ가 편향 b로 치환됨
- 편향(b)는 가중치(w1, w2)와 기능이 다름
- 가중치(w1, w2) : 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수
- 편향(b) : 뉴런이 얼마나 쉽게 활성화 하느냐를 조정하는 매개변수 (결과를 1로 출력하느냐
NAND 게이트 구현
import numpy as np
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
else :
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 1
else:
return 0
2.4. 퍼셉트론의 한계
2.4.1. XOR 게이트
- XOR게이트는 배타적 논리합이라는 논리회로임
- 배타적 : 자기 외에는 거부한다
- 퍼셉트론은 직선 하나로 나눈 영역에만 표현할 수 있다는 한계가 있음 곡선은 표현할 수 X
2.5. 다층 퍼셉트론
2.5.1. 기존 게이트 조합

2.5.2. XOR 게이트 구현하기
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
else :
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
else :
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 1
else:
return 0
def XOR(x1, x2):
s1 = NAND(x1,x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
XOR(0,0) # 0
XOR(1,0) # 1
XOR(0,1) # 1
XOR(1,1) # 0

- 왼쪽부터 0층, 1층, 2층
- 다층 퍼셉트론 : 층이 여러개인 퍼셉트론
- 실행순서
- 1. 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄
- 2. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y 출력
2.7. 정리
- 퍼셉트론은 입출력을 갖춘 알고리즘임 입력을 주면 정해진 규칙에 따른 값을 출력함
- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정함
- 퍼셉트론으로 AND, OR 게이트 등의 논리회로를 표현할 수 있음
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있음
- 단층 퍼셉트론은 직선형 영역에만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역으로 표현할 수 있음
- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있음
반응형