728x90
이번에 소개할 내용은 밑시딥 2장의 첫부분 퍼셉트론이다.
퍼셉트론(perceptron)은 인공신경망의 한 종류로서, 1957년에 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트 (Frank Rosenblatt)에 의해 고안되었다. 이것은 가장 간단한 형태의 피드포워드(Feedforward) 네트워크, 선형분류기로도 볼 수 있다.[위키백과참조: https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%85%89%ED%8A%B8%EB%A1%A0]
1. 퍼셉트론이란?
- 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다.
- 여기서 말하는 신호란 전류나 강물에서 흐름이 있듯이 퍼셉트론 자체에서 신호로 흐름을 만들어 정보를 앞으로 전달한다.
- 그러나, 실제 전류와는 다르게 흐른다 / 안흐른다 (1 / 0)의 두 가지 값을 가질 수 있다.
- 이 그림은 입력으로 2개의 신호를 받은 퍼셉트론의 예시이다.
- x1, x2는 입력값, w1, w2는 가중치, y는 출력값이다.
- 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해지고 이렇게 보내온 신호의 총합이 임계값을 넘어서면 1을 출력한다.
2. 게이트
- AND 게이트
- AND 게이트는 입력이 둘이고 출력은 하나.
- 두 입력이 모두 1일 때만 1을 출력하고 그 외에는 0을 출력. (집합에서 곱집합과 비슷)
x1 (입력값) | x2 (입력값) | y (출력값) |
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
- NAND 게이트
- NAND는 Not AND를 의미, AND 게이트의 출력을 뒤집은 느낌
x1 (입력값) | x2 (입력값) | y (출력값) |
0 | 0 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
- OR 게이트
- OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 게이트 (집합에서 합집합과 비슷)
x1 (입력값) | x2 (입력값) | y (출력값) |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
3. 퍼셉트론 구현
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7 # 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을 출력
- x1, x2를 인자로 받는 AND 함수 구현
- w1, w2는 가중치 / theta는 임계값
- 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그 외에는 0을 반환
4. 가중치와 편향 구현
# 가중치와 편향을 도입한 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
# 가중치와 편향을 도입한 NAND 게이트 구현
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) # AND 게이트와의 차이점
b = -0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
# 가중치와 편향을 도입한 OR 게이트 구현
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
b = -0.2 # AND 게이트와의 차이점
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
728x90
반응형
'Deep Learning' 카테고리의 다른 글
[딥러닝] CNN, 합성곱 신경망 (0) | 2024.07.08 |
---|---|
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 3-2 : MNIST 손글씨 숫자 인식 및 구현 (0) | 2024.02.17 |
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 3-2 : 행렬 곱연산과 신경망 구현 (2) | 2024.02.11 |
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 3-1 : 신경망과 활성화 함수 (1) | 2024.01.31 |
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 2-2 : 퍼셉트론의 한계 및 다중 퍼셉트론 (0) | 2024.01.24 |
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 1-2 : 시각화 (1) | 2024.01.12 |
[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 1-1 : 헬로 파이썬 (0) | 2024.01.01 |