• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[01] Deep learning 1: 퍼셉트론

12 Mar 2020

Reading time ~3 minutes

Table of Contents
  • 퍼셉트론 목차
  • 퍼셉트론
    • 퍼셉트론이란?
  • 단순한 논리회로(1층퍼셉트론)
    • AND 게이트
    • NAND 게이트
    • OR 게이트
    • 예외) XOR 게이트
  • 퍼셉트론의 한계
    • SOLUTION 1
    • SOLUTION 2
  • 다층 퍼셉트론의 충돌 시
  • 정리

퍼셉트론 목차

  • 퍼셉트론
    • 퍼셉트론이란?
  • 단순한 논리회로(1층퍼셉트론)
    • AND 게이트
    • NAND 게이트
    • OR 게이트
    • 예외) XOR 게이트
  • 퍼셉트론의 한계
    • SOLUTION 1
    • SOLUTION 2
  • 다층 퍼셉트론의 충돌 시
  • 정리


퍼셉트론

퍼셉트론을 배우는 이유는 딥러닝이 이 개념에서 확장한 것이기 때문이다.
그러므로 쉽다고 간과하지 말고 후에 딥러닝을 배울 때 이 개념을 참조하고 비교해가면서 읽기를 권장한다.

퍼셉트론이란?

  • 의의
    딥러닝의 기원이 되는 알고리즘
    다수의 신호(0,1)를 입력으로 받아 하나의 신호를 출력
  • 입력이 2개인 퍼셉트론

image

➡️ 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해짐
\((w_1 x_1 , w_2 x_2 )\).

그리고 이 가중치를 통한 값의 결과를 통해서 해당 값이 임계점(θ)을 넘기면 이 뉴런이 활성화 되는지 아닌지가 정해진다.
자세한 것은 활성화 함수에서 다룰 것이다.

아래의 식은 활성화 함수의 예시이다.
y
\(= 0(w_1 χ_1 + w_2 x_2 ≤ θ)\)
\(= 1(w_1 χ_1 + w_2 x_2 > θ)\)

이 식을 해석할 때,

  • 뉴런이 활성화한다: 뉴런에서 보낸 신호의 총합이 정해진 한계(임계값,θ, theta,세타)를 넘어설 때만 1을 출력하는 것
  • 가중치가 더 큼: 그만큼 더 중요(전류에서는 저항으로 반대의미)


단순한 논리회로(1층퍼셉트론)

그럼 위의 개념을 확장해서 게이트를 만들어보겠다.
앞서 말했듯 입력뉴런에 따라 활성화 할지말지를 정해주는데 이 활성화 여부는 게이트의 종류에 따라 다르다.

아래의 게이트는 모두 단순 논리회로로 입력이 둘, 출력은 하나이다


AND 게이트

입력이 모두 1이여야 1을 출력
image

각 입력값과 출력값의 위의 노드 그림에 대응시켜서 생각해보면 편하다

📝 게이트 구현

앞서 말했던 식의 θ를 -b로 치환

y
\(= 0(w_1 χ_1 + w_2 x_2 ≤ θ)\)
\(= 1(w_1 χ_1 + w_2 x_2 > θ)\)

 def AND(x1, x2):
     # 임의로 정한 AND를 만족하는 매개변수 조합
     w1, w2, theta = 0.5, 0.5, 0.7 
     tmp = x1*w1 + x2*w2 
     if tmp <= theta:
         return 0 
     elif tmp > theta:
         return 1

[가중치와 편향 구현하기]

  • b: 편향 bias
    • 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수
    • 문맥에 따라 셋 모두를‘가중치’라고 할 때도 있음
  • \(w_1\),\(w_2\): 가중치
    • 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수

    y
    \(= 0(b + w_1 χ_1 + w_2 x_2 ≤ θ)\)
    \(= 1(b + w_1 χ_1 + w_2 x_2 > 0)\)

 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 게이트

Not AND, (동작) AND 게이트의 출력을 뒤집은 것
image ➡️ AND 게이트를 구현하는 매개변수의 부호를 모두 반전


OR 게이트

입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로
image


예외) XOR 게이트

XOR 게이트는 배타적 논리합이라는 논리 회로
‘배타적’: 자기 외에는 거부
\(x_1\) 과 \(x_2\)중 한쪽이 1일 때만 1을 출력 image


그럼 이러한 가중치(매개변수)의 값의 지정은 누가할까?
[일반 매개변수 값 지정]
인간(인간이 직접 진리표라는 ‘학습 데이터’를 보면서 매개변수의 값을 생각)

[기계학습에서 매개변수의 값 지정]
매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 함

  • 학습: 적절한 매개변수 값을 정하는 작업
  • 사람: 퍼셉트론의 구조(모델) 고민, 컴퓨터에 학습할 데이터를 주는 일 수행

퍼셉트론의 구조는 AND, NAND, OR 게이트 모두 같음(즉 먄 위의 간단한 노드 구조라는 것이다)
그러므로 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값) 의 값일 뿐이다.



퍼셉트론의 한계

AND게이트, NAND게이트, OR게이트들은 퍼셉트론(맨앞의 단순 구조)로 구현이 가능했다.

하지만 XOR게이트는 지금까지 배운 퍼셉트론으로 구현이 불가하다.

즉 선형적으로 구분이 불가하다는 것이다.

PS) 퍼셉트론은 직선 하나로 나눈 영역만 표현 가능

텍스트로는 이해가 힘들것 같으니 그림으로 비교해보자

[PROBLEM]
image

  • 회색 영역은 0

선형으로 나눠지는 OR 게이트의 동작과 달리,
XOR 게이트 는 선형으로 나눌 수 없다.

그래서 ‘직선으로 나누자 라는 제한을 없애자’ 자는 개념을 도입해야한다.


SOLUTION 1

: 위의 퍼셉트론 직선이라는 제한 없으면 구현 가능 image


SOLUTION 2

다층 퍼셉트론의 충돌 시

위에서 배운 퍼셉트론을 조합하여 조금 더 복잡하고 새로운 퍼셉트론 생성이 가능하다.
또한 이렇게 다층 퍼셉트론이 충돌할 시(비선형으로 표현해야할 시) 비선형이라는 개념없이 기존 AND, NAND, OR 게이트를 조합하여 2(3)층의 다층 퍼셉트론으로 표현이 가능하다.

image

👀구현 코드 보기
 def XOR(x1, x2):
   s1 = NAND(x1, x2) 
   s2 = OR(x1, x2) 
   y = AND(s1, s2) 
   return y

이것으로 컴퓨터까지 구현할 수 있지만 이 가중치를 설정하는 것은 수동(매우 어려움)이다


정리

이번 장에서 배운 내용
● 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력
● 퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
● 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
● XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
● 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
● 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.



Deep Learning Share Tweet +1