본문 바로가기
Deep Learning

[딥러닝] 밑바닥부터 시작하는 딥러닝 공부 2-1 : 퍼셉트론이란?

by 단깅수 2024. 1. 19.
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