Deep Learning

[밑바닥부터시작하는딥러닝1] Chapter 2. 퍼셉트론

씨주 2024. 4. 2. 23:04

2.1 퍼셉트론이란?

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

(1 - 신호가 흐른다 / 0 - 신호가 흐르지 않는다)

 

그림 2-1. 입력이 2개인 퍼셉트론

입력신호 : x1, x2

출력신호  : y

가중치(weight) : w1, w2

뉴런(or 노드) : 그림의 원

 

식 2-1.

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

뉴런에서 보내온 신호의 총합이 정해진 한계(임계값 θ)를 넘어설 때만 1을 출력한다. = 뉴런이 활성화한다.

 

가중치 : 각 신호가 결과에 주는 영향력을 조절하는 요소로, 가중치가 클수록 해당 신호가 더 중요함을 뜻함.

 

2.2 단순한 논리 회로

✔️ AND 게이트

그림 2-2. AND 게이트

(w1, w2, θ) = (0.5, 0.5, 0.7)

 

✔️ NAND 게이트와 OR 게이트

그림 2-3. NAND 게이트

(w1, w2, θ) = (-0.5, -0.5, -0.7)

 

그림 2-4. OR 게이트

(w1, w2, θ) = (0.5, 0.5, 0.5)

 

2.3 퍼셉트론 구현하기

✔️ 간단한 구현부터

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

 

✔️ 가중치와 편향 도입

이 식을 좀 더 직관적으로 바꾸면 아래와 같이 된다. (theta를 -b로 치환)

식 2-2.

이 때 b를 편향(bias)라 부른다.

 

✔️ 가중치와 편향 구현하기

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

 

편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수이다.

예를 들어 편향이 -0.1이면 입력신호와 가중치를 곱한 값들의 합이 0.1을 초과하면 뉴런이 활성화되지만 편향이 -20이면 20을 넘어야 한다.

 

def NAND(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
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 퍼셉트론의 한계

✔️ XOR 게이트

식 2-3.
그림 2-6. 퍼셉트론의 시각화

OR 게이트는 그림 2-6과 같이 직선(선형)으로 나눠 한쪽 영역은 1, 다른 한쪽은 0으로 표현이 가능하다.

 

그림 2-5. XOR 게이트

XOR게이트 : 배타적 논리합

XOR게이트를 퍼셉트론으로 구현하려면 어떻게 해야 할까?

 

✔️ 선형과 비선형

그림 2-8.

XOR 게이트는 그림 2-8과 같이 직선이 아닌 곡선(비선형)으로만 표현이 가능하다.

 

2-5. 다층 퍼셉트론이 출동한다면

다층 퍼셉트론 : 퍼센트론으로 층을 쌓아(조합하여) 표현

 

✔️ 기존 게이트 조합하기

XOR 게이트를 만드는 방법 : AND, NAND, OR 게이트를 조합

그림 2-9. AND, NAND, OR 게이트 기호
그림 2-11. AND, NAND, OR 게이트를 조합하여 구현한 XOR 게이트
왼쪽 : 그림 2-12. XOR 게이트 / 오른쪽 : 그림 2-13. XOR 퍼셉트론

 

✔️ XOR 게이트 구현하기

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

 

이를 공장의 조립라인에 비유하면

1단(1층) 작업자는 부품을 다듬어 일을 완료하여 2단(2층) 작업자에 전달한다.

2단(2층) 작업자는 1단(1층) 작업자로부터 받은 부품을 다듬어 완성품을 출하(출력)한다.

 

이처럼 퍼셉트론은 층을 쌓아(깊게 하여) 더 다양한 것을 표현할 수 있다.

 

2.7 정리

- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.

- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.

- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.

- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.

- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.

- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.

- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.

 

 

 

참고 git : https://github.com/geonsangyoo/DeepLearning/tree/master