단층 퍼셉트론

2019. 7. 16. 21:19AI/Deep Learning

딥러닝 공부를 시작하면서 '밑바닥부터 시작하는 딥러닝' 교재들을 많이들 추천하여

이 책으로 공부를 하면서 내용을 정리해보고자 합니다.

 

퍼셉트론

 

퍼셉트론은 1957년에 프랑크 로젠블라트(Frank Rosenblatt)가 고안한 알고리즘입니다.

퍼셉트론은 신경망(딥러닝)의 기원이 되는 알고리즘이라고 합니다.

 

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

 

<그림 1>

<그림 1>은 입력으로 2개의 신호를 받은 퍼셉트론의 예입니다.

x1과 x2: 입력신호

w1과 w2: 가중치(weight)

y: 출력신호

 

그림의 원을 뉴런 혹은 노드라고 합니다.

입력 신호가 뉴런에 보내질 때 weight가 곱해집니다.-> x1w1 + x2w2

 

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

(이를 "뉴런이 활성화한다"라고 표현한다고 합니다.)

 

수식으로 나타내면 다음과 같습니다.

<식 1>

 

*퍼셉트론에서 가중치는 신호의 영향력을 표현합니다.

가중치 값이 클수록 강한 신호를 흘려보냅니다.

 

단순 논리 회로(논리 게이트)

 

1. AND 게이트

 

진리표

<그림 2>

AND 게이트는 입력 신호 2개 모두 1일 경우 1을 출력하고, 나머지는 0을 출력하는 게이트입니다.

AND게이트를 퍼셉트론으로 표현하기 위해서는 진리표대로 작동하는 w1, w2, θ(임계값)의 값을 정해야 합니다.

AND 게이트를 만족하는 매개변수 조합은 무한히 많습니다.

예를 들면,

(w1, w2, θ) -> (0.5, 0.5, 0.7), (0.5, 0.5, 0.8), (1.0, 1.0, 1.0)일 때 모두 AND 게이트의 조건을 만족합니다.

 

2. NAND 게이트

 

진리표

<그림 3>

NAND 게이트는 Not AND를 의미합니다.

동작은 AND 게이트의 출력의 반대입니다. 따라서 모두 1일 때 0, 나머지는 1을 출력합니다.

NAND 게이트를 퍼셉트론으로 표현하면 (w1, w2, θ) = (-0.5, -0.5, -0.7) 조합이 있고, 그 외에도 무한히 많이 있습니다.

AND 게이트를 구현하는 매개변수의 부호를 모두 반전하면 NAND 게이트가 됩니다.

 

3. OR 게이트

 

진리표

<그림 4>

OR 게이트는 모두 0일 때만 0이고, 나머지는 1을 출력합니다.

 

지금까지 AND, NAND, OR 게이트와 각각의 진리표 그리고 퍼셉트론으로 표현하는 것에 대해서 살펴보았습니다.

 

퍼셉트론의 매개변수 값을 정하는 것은 사람이 하는 것입니다.

사람이 직접 진리표라는 '학습 데이터'를 보면서 매개변수의 값을 생각합니다.

 

*기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 합니다.

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

 

AND, NAND, OR 게이트 모두 퍼셉트론 구조는 같습니다.

다른 점은 매개변수(가중치, 임계값)입니다.

 

퍼셉트론 구현

 

간단한 AND 함수

1

2

3

4

5

6

7

8

9

def AND(x1, x2):

 

    w1, w2, theta = 0.50.50.7

    tmp = x1*w1 + x2*w2

    

    if tmp <= theta:

        return 0

    elif tmp > theta:

        return 1

 

가중치와 편향 도입

<식 2>

위 수식에서 b는 편향(bias)입니다.

입력신호에 가중치를 곱하고, 편향을 더한 것이 0을 넘으면 1, 아니면 0을 출력합니다.

 

1

2

3

4

5

6

7

8

9

10

def AND(x1, x2):

 

    x = np.array([x1, x2])

    w = np.array([0.50.5])

    b = -0.7

    tmp = np.sum(w*x) + b

    

    if tmp <= 0:

        return 0

    else:

        return 1

AND를 코드로 표현하면 위와 같습니다.

np.array는 numpy의 array 형식을 말합니다.

 

지금까지 내용 중에 매개변수에 대해서 정리하면,

w는 weight로 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수.

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

 

만약 b값이 -20.0이면 각 입력 신호에 가중치를 곱한 값들의 합이 20.0을 넘어야 뉴런이 활성화됩니다.

즉, 뉴런이 얼마나 쉽게 활성화되는지를 결정합니다.

 

NAND 코드

1

2

3

4

5

6

7

8

9

10

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

OR 코드

1

2

3

4

5

6

7

8

9

10

def OR(x1, x2):

 

    x = np.array([x1, x2])

    w = np.array([0.50.5])

    b = -0.2

    tmp = np.sum(w*x) + b

    

    if tmp <= 0:

        return 0

    else:

        return 1

 

퍼셉트론의 한계

 

XOR 게이트!

 

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

 

진리표를 보시겠습니다.

<그림 5>

진리표를 보시면, x1과 x2가 서로 다를 때만 1을 출력합니다.

그림으로 보면 다음과 같습니다.

<그림 6>

XOR은 AND,NAND,OR처럼 하나의 직선으로 나눌 수가 없습니다.

따라서 다음과 같이 비선형적인 구조로 나눠야합니다.

<그림 7>

 

이번 포스팅에는 단층 퍼셉트론에 대해서 정리해봤습니다.

단층 퍼셉트론은 간단한 구조이고, AND, NAND, OR 같이 간단한 구조는 단층 퍼셉트론으로 해결이 가능합니다.

하지만 XOR 문제같이 비선형적인 구조는 단층 퍼셉트론으로는 해결을 할 수 없습니다.

그래서 나온 것이 다층 퍼셉트론입니다. 다층 퍼셉트론은 다음 포스팅에서 정리하도록 하겠습니다.

 

 

 

 

 

출처: 

.밑바닥부터 시작하는 딥러닝(한빛미디어, 사이토 고키 지음, 개앞 맵시 옮김)

.그림1~6, 식1: https://it-study-jh.tistory.com/7                                                    

.식2 : https://kolikim.tistory.com/11          

.그림  7: 

https://poddeeplearning.readthedocs.io/ko/latest/%EB%B0%91%EB%B0%94%EB%8B%A5%EB%B6%80%ED%84%B0%207%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EB%94%A5%EB%9F%AC%EB%8B%9D/2.Perceptron/

'AI > Deep Learning' 카테고리의 다른 글

신경망(2) 3층 신경망 구현  (0) 2019.07.16
신경망(1) 활성화 함수  (0) 2019.07.16
다층 퍼셉트론  (0) 2019.07.16
[cs231n] Lecture3. Loss Functions and Optimization  (0) 2019.07.16
[cs231n] Lecture 2. Image Classification  (0) 2019.07.11