[밑시딥 1] Chapter 2. 퍼셉트론

Seong Woong Kim·2023년 11월 13일

💡 오랜 시간이 흐름에 따라서 예전에 공부해서 명확히 이해했었던 딥러닝 기초 개념들이 예전만큼 명확하지 않음을 느낀다.

그래서 다시 그것들을 상기하고자 밑시딥 정독을 시작한다.

Chapter 1. 파이썬 부분은 생략한다.


2.1 퍼셉트론이란?

퍼셉트론은 프랑크 로젠블라트 FrankRosenblatt^{Frank Rosenblatt}가 1957년에 고안했고, 신경망(딥러닝)의 기원이 되는 알고리즘이다.

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다.

위 그림에서

  • x1x_1x2x_2는 입력 신호, yy는 출력 신호, w1w_1w2w_2는 가중치를 의미하고, 그림의 원을 뉴런 혹은 노드라고 부른다.

  • 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해진다. (w1x1w_1x_1, w2x2w_2x_2).

  • 뉴런이 활성화된다
    - 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력
    - 이 책에서는 그 한계를 임계값이라고 하며, θ\theta 기호로 표현

퍼셉트론의 동작 원리는 이게 끝. 수식을 나타내면 다음과 같다.

퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다.

가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용하며, 가중치가 클수록 해당 신호가 그만큼 더 중요함을 의미한다.



2.2 단순한 논리 회로

2.2.1 AND 게이트

AND 게이트는 입력이 둘이고 출력이 하나이다.

아래는 AND 게이트의 진리표(입력 신호와 출력 신호의 대응표)로,

두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.

x1x_1x2x_2yy
000
100
010
111

AND 게이트 진리표를 퍼셉트론으로 표현하려면 진리표대로

작동하도록 하는 w1w_1, w2w_2, θ\theta의 값 (퍼셉트론의 매개변수)을 정하는 것이다.

  • e.g. (w1w_1, w2w_2, θ\theta) = (0.5, 0.5, 0.8)

2.2.2 NAND 게이트와 OR 게이트

NAND는 Not AND를 의미하며, AND 게이트의 출력을 뒤집은 것으로 동작한다.

x1x_1x2x_2yy
001
101
011
110

위 진리표를 보면, x1x_1x2x_2가 모두 1일 때만 0을 출력하고, 나머지는 1을 출력한다.

NAND 게이트 진리표를 퍼셉트론으로 표현하기 위한 매개변수 조합

  • e.g. (w1w_1, w2w_2, θ\theta) = (-0.5, -0.5, -0.8)
  • AND 게이트와 반대

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

x1x_1x2x_2yy
000
101
011
111

💡 NOTE 💡

  • 여기서 퍼셉트론의 매개변수 값을 정하는 것은 컴퓨터가 아니라 우리 인간
  • 기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 함
  • 학습이란 적절한 매개변수 값을 정하는 작업
    • 사람은 퍼셉트론의 구조(모델)을 고민하고 컴퓨터에 학습할 데이터를 주는 일을 함.


2.3 퍼셉트론 구현하기

2.3.1 간단한 구현부터

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
    
AND(0,0) # 0을 출력
AND(1,0) # 0을 출력
AND(0,1) # 0을 출력
AND(1,1) # 0을 출력

2.3.2 가중치와 편향 도입

위 퍼셉트론의 동작 원리 수식의 θ\thetab-b로 치환하면 다음과 같은 식이 완성된다.

{0  (b+w1x1+w2x20)1  (b+w1x1+w2x2>0)\begin{cases} 0\;(b+w_1x_1\,+\,w_2x_2 \leq 0)\\ 1\;(b+w_1x_1\,+\,w_2x_2 \gt 0) \end{cases}

  • bb편향(bias)라고 하며 w1w_1w2w_2는 그대로 가중치이다.

위 식의 관점으로 해석해보면

  • 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력
### 위의 식 구현 ###
import numpy as np
x = np.array([0, 1]) 	 # 입력
w = np.array([0.5, 0.5]) # 가중치
b = -0.7				 # 편향
w*x
>>> array([ 0. , 0.5])
np.sum(w*x)
>>> 0.5
np.sum(w*x) + b
>>> -0.19999999999996    # 대략 -0.2 

2.3.3 가중치와 편향 구현하기

가중치와 편향을 도입AND 게이트 구현

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 temp <= 0:
    	return 0
    else:
    	return 1
  • θ-\theta가 편향 bb로 치환되었음
  • w1w_1w2w_2는 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수
  • 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수

NAND 게이트OR 게이트 구현

def NAND(x1, x2):
	x = np.array([x1, x2])
    w = np.array([-0.5, -0.5) # AND와는 가중치(w와 b)만 다름
    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 0
    else:
    	return 1


2.4 퍼셉트론의 한계

2.4.1 XOR 게이트

XOR 게이트는 배타적 논리합이라는 논리 회로이다.

  • 아래 진리표와 같이 x1x_1x2x_2 중 한쪽이 1일 때만 1을 출력한다.
x1x_1x2x_2yy
000
101
011
110

지금까지 본 퍼셉트론으로는 XOR 게이트를 구현할 수 없다.

  • 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다.

AND와 OR 게이트를 살펴보면 아래 그림과 같이 직선으로 영역을 나눌 수 없다.

2.4.2 선형과 비선형

직선(선형) 하나로는 위 그림처럼 01을 나눌 수 없다.

  • '직선'이라는 제약을 없앤다면 가능

위 그림과 같은 곡선(비선형)으로 영역을 나눌 수 있다.


2.5 다층 퍼셉트론이 출동한다면

퍼셉트론으로는 XOR 게이트를 표현할 수 없었다.
하지만 퍼셉트론의 층을 쌓아 다층 퍼셉트론을 만들면 해결할 수 있다.

2.5.1 기존 게이트 조합하기

XOR 게이트를 만드는 방법은 다양한데, 그 중 하나는 AND, NAND, OR 게이트를 조합하는 방법이 있다.

AND, NAND, OR 게이트를 조합해 구현한 XOR 게이트 구조이다.

  • NAND의 출력을 s1s_1, OR의 출력을 s2s_2로 해서 XOR 게이트를 만들 수 있다.
x1x_1x2x_2s1s_1s2s_2y
00100
10111
01111
11010

2.5.2 XOR 게이트 구현하기

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을 출력

아래 그림은 XOR의 퍼셉트론이다.

  • AND, OR가 단층 퍼셉트론인 데 반해, XOR은 2층 퍼셉트론
    • 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라고 함.
  • 동작
    • 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보냄
    • 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런을은 y를 출력

2층 구조를 사용해 퍼셉트론으로 XOR 게이트를 구현 가능

  • 단층 퍼셉트론으론 표현하지 못한 것을 층을 하나 늘려 구현
  • 퍼셉트론은 층을 쌓아 (깊게 하여) 더 다양한 것을 표현할 수 있음


2.6 NAND에서 컴퓨터까지

--



2.7 정리

  • 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
  • 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
  • XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
    • 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
  • 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
  • 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
profile
성장과 연구하는 자세를 추구하는 AI 연구개발자

0개의 댓글