Sun.El Data Analysis

[딥러닝] 퍼셉트론 및 게이트 개념 본문

Deep Learning

[딥러닝] 퍼셉트론 및 게이트 개념

Sun.El 2023. 8. 11. 17:40
728x90
1. 퍼셉트론 기초
    1.1 개념
    1.2 역할
    1.3 생물학적 뉴런의  역할과 동작과정
    1.4 퍼셉트론 동작과정

2. 단층 퍼셉트론(Single-Layer Perceptron)
    2.1 개념
    2.2 게이트(gate)
    2.3 AND, NAND, OR 게이트 코드 구현

3. 다층 퍼셉트론(MultiLayer Perceptron, MLP)

 

1. 퍼셉트론 기초

1.1 개념

  • 퍼셉트론(Perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 제안한 초기 형태의 인공 신경망으로, 인공 신경망(Aritificial Neural Network, ANN)의 구성 요소(unit)로서 다수의 값을 입력받아 하나의 결과를 내보내는 알고리즘
  • 퍼셉트론은 생물학적인 신경계(Neual Network)의 기본 단위인 신경세포(=뉴런)의 동작 과정을 통계학적으로 모델링한 알고리즘
  • Perceptron은 perception과 neuron의 합성어이며 인공 뉴런이라고도 부름

1.2 역할

  • 퍼셉트론은 이진 분류(Binary Classification) 모델을 학습하기 위한 지도학습(Supervised Learning) 기반의 알고리즘임
  • 이진 분류는 아래 그림과 같이, 푸른색과 녹색 동그라미 2가지 클래스를 특정 기준 하에 구분함(예: 개 vs. 고양이)
  • 두 클래스를 구분하는 기준은 붉은 직선이고, 이러한 기준(i.e., 여기선 직선)을 Decision Boundary라고 부름

1.3 생물학적 뉴런의  역할과 동작과정

  • 뉴런은 아래 그림과 같은 형태의 신경계를 구성하는 세포이며, 인접한 다른 뉴런과 다양한 신호(=자극)를 주고받으며 정보를 얻거나 저장하는 역할
  • 뉴런은 가지돌기에서 신호를 받아들이고, 이 신호가 일정치(=임계값) 이상의 크기를 가지면 축삭돌기를 통해서 신호를 전달하며, 이러하 원리를 통해 출력 신호를 제어할 수 있음

 

1.4 퍼셉트론 동작과정

  • 퍼셉트론은 뉴런이 다른 뉴런으로부터 신호를 입력받듯 다수의 값 x을 입력(뉴런 입력값)받고, 입력된 값마다 가중치(weight, w)를 곱합
  • 가중치는 생물학 뉴런에서 뉴런 간 시냅스를 통한 결합의 세기와 같은 역할이며 가중치가 클수록 입력값이 중요하다는 것을 의미
  • 입력값으로써 x외에도 편향(bias, b)은 딥러닝 모델 최적화의 중요 변수임
  • 입력값과 가중치의 곱, 편향을 합산한 가중합퍼셉트론으로 전달함
  • 가중합이 임계치(threshold, (Θ))를 넘으면 종착지에 있는 인공 뉴런은 출력 신호로서 1을 출력하고, 그렇지 않을 경우에는 0을 출력
  • 이러한 가중합의 크기를 임계값과 비교하는 함수를  활성화 함수(Activation Function)라고 함

 

  • 퍼셉트론은 활성화 함수로 계단 함수(Step Function)를 사용하고, 이는 가중합이 임계값(Θ)보다 클 경우 +1을 출력하고, 그렇지 않다면 −1을 출력

  • 임계치를 좌변으로 넘기고 편향 b(bias)로 표현할 수도 있어 편향 b 또한 퍼셉트론의 입력으로 사용됨

  • 보통 그림으로 표현할 때는 입력값이 1로 고정되고 편향 b가 곱해지는 변수로 표현함

 

2. 단층 퍼셉트론(Single-Layer Perceptron)

2.1 개념

  • 값을 보내는 단계과 값을 받아서 출력하는 두 단계로만 이루어짐
  • 각 단계를 보통 층(layer)이라고 하며, 입력층(input layer)과 출력층(output layer)으로 이루어져 있음

2.2 게이트(gate)

  • 컴퓨터는 두 개의 값 0과 1을 입력해 하나의 값을 출력하는 회로가 모여 만들어지는데, 이 회로를 게이트(gate)라고 부름
  • 게이트 종류
    •  AND 게이트 : 두 개의 입력값 모두 1인 경우에만 출력값 y가 1이 나오는 구조
    • NAND 게이트 : 두 개의 입력값이 모두 1인 경우에만 0이 나오는 구조
    • OR 게이트 : 두 개의입력값이 모두 0인 경우에 출력값이 0이고 나머지 경우에는 모두 출력값이 1이 나오는 구조
    • XOR 게이트 : 두 개가 서로 다른 값을 갖고 있을때에만 출력값이 1이 나오는 구조
AND 게이트 NAND 게이트 OR 게이트 XOR 게이트

 

  • 단층 퍼셉트론을 이용하면 AND, NAND, OR 게이트는 구현가능하나, XOR 게이트는 구현할 수 없다는 한계가 존재
  • 단층 퍼셉트론은 입력값에 따른 출력값을 구분짓는 직선을 1개밖에 그릴 수 없기 때문임
  • XOR은 다음과 같은 논리기호가 적용되어야 하며, 2층 퍼셉트론이 필요함

 

2.3 AND, NAND, OR 게이트 코드 구현

  • AND 게이트

[IN]

def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7 #초기값인 가중치 1, 가중치 2 임계값 설정
    tmp = w1 * x1 + w2 * x2
    if tmp <= theta : 
        return 0 
    elif tmp > theta:
        return 1
        
print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))

[OUT]

0
0
0
1

 

  • NAND 게이트

[IN]

def NAND(x1, x2): #NAND : AND의 출력을 뒤집은 것
    x = np.array([x1,x2])
    w = np.array([-0.5,-0.5]) #w1, w2에 -0.5 대입
    b = 0.7
    tmp = np.sum(w*x) + b #활성화 식
    if tmp <= 0:
        return 0
    else:
        return 1
    
print(NAND(0,0))
print(NAND(1,0))
print(NAND(0,1))
print(NAND(1,1))

[OUT]

1
1
1
0

 

  • OR 게이트

[IN]

def OR(x1, x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.2 #편향에 -0.2
    tmp = np.sum(w*x) + b #활성화 식
    if tmp <= 0:
        return 0
    else:
        return 1    
    
print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))

[OUT]

0
1
1
1

 

3. 다층 퍼셉트론(MultiLayer Perceptron, MLP)

  • XOR 게이트는 기존의 AND, NAND, OR 게이트를 조합하면 만들 수 있음
  • 다층 퍼셉트론과 단층 퍼셉트론의 차이는 단층 퍼셉트론은 입력층과 출력층만 존재하지만, 다층 퍼셉트론 입력층과 출력층 사이에 은닉층(hidden layer)을 추가되었다는 것에 차이가 있음

 

XOR 구현 논리기호

 

  • 다층 퍼셉트론은 본래 은닉층이 1개 이상인 퍼셉트론을 지칭하고 중간에 수많은 은닉층을 더 추가할 수 있음

 

 

  • 위와 같이 은닉층이 2개 이상인 신경망을 심층 신경망(Deep Neural Network, DNN)이라고 함
  • 심층 신경망은 다층 퍼셉트론만 이야기 하는 것이 아니라, 여러 변형된 다양한 신경망들도 은닉층이 2개 이상이 되면 심층 신경망이라고 함

※ 참고 : 게이트별 논리기호, 논리식, 진리

※ 참고사이트 : https://wikidocs.net/24958, https://heytech.tistory.com/332