밑바닥부터 시작하는 딥러닝-2장

DSC W/S·2020년 1월 18일
3
post-thumbnail

chapter 2. 퍼셉트론

퍼셉트론(perceptron) : 신경망(딥러닝)의 기원이 되는 알고리즘. 퍼셉트론의 구조를 배우는 것은 신경망과 딥러닝으로 나아가는데 중요한 아이디어를 배우는 일이다.

2.1 퍼셉트론이란?

다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 이 때 신호는 전류나 강물처럼 흐름이 있는 것.

신호도 흐름을 만들고 정보를 앞으로 전달.

가지는 값 : 흐른다/안 흐른다(1 혹은 0). 1 : 신호가 흐른다, 0 : 신호가 흐르지 않는다.

입력이 2개인 퍼셉트론

X1, X2는 입력신호, Y는 출력신호, W1, W2는 가중치. 그림의 원은 뉴런(노드). 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해진다(W1X1, W2X2). 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력(이를 ‘뉴런이 활성화한다’라고 표현). 그 한계를 임계값이라 하고 기호로 나타낸다.

퍼셉트론은 복수의 입력신호 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용. 즉 가중치가 클수록 해당 신호가 그만큼 더 중요하다는 것을 뜻한다.

2.2 단순한 논리 회로

2.2.1 AND 게이트

: 입력이 둘이고 출력은 하나. 두 입력이 모두 1일 때만 1을 출력, 나머지는 0 출력

진리표 :

X1X2Y
000
100
010
111

퍼셉트론(W1, W2, THETA) : (0.5, 0.5, 0.7), (0.5, 0.5, 0.8), (1.0, 1.0, 1.0)

def AND2(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

2.2.2 NAND 게이트, OR 게이트

NAND : Not AND. AND의 출력을 뒤집은 것. 모두 1일때만 0, 나머지는 0 출력.

퍼셉트론 : (-0.5, -0.5, -0.7). AND의 부호 반전.

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

OR 진리표 :

X1X2Y
000
101
011
111

퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 같다. 다른 것은 매개변수(가중치, 임계값)의 값. 퍼셉트론의 매개변수의 값만 적절히 조정하여 AND, NAND, OR로 변신

2.3 퍼셉트론 구현

2.3.1 간단한 구현

b를 편향, w1, w2는 가중치. 식 2.2 관점에서 보자면 퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다.

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

2.4.1 도전! XOR 게이트

x1, x2 중 하나만 1일 때만 1을 출력한다.

진리표 :

X1X2Y
000
101
011
110

퍼셉트론은 직선으로 나뉜 두 영역을 만든다.

곡선이라면 나눌 수 있다.

XOR게이트는 직선 하나로 두 영역을 나눌 수 없다. 즉, 비선형 영역으로는 나눌 수 있다.

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

다층 퍼셉트론 : 층이 여러 개인 퍼셉트론

2.5.1 기존 게이트 조합하기

XOR은 AND, NAND, OR의 조합으로 만들어 낼 수 있다.

XOR의 퍼셉트론

X1X2S1S2Y
00100
10111
01111
11010

NAND의 출력을 S1, OR의 출력을 S2로 한다.

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

2.5.2 XOR게이트 구현하기

그림 2-13

XOR은 다층 구조의 네트워크, 0층에서 1층으로 신호가 전달, 이어서 1층에서 2층으로 신호가 전달.

① 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.

② 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 이 입력 신호를 바탕으로 Y를 출력

2.6 NAND에서 컴퓨터까지

다층 퍼셉트론으로 복잡한 회로를 만들 수 있는데, 컴퓨터마저 표현할 수 있다.

profile
DSC Duksung 겨울방학 NLP 스터디

0개의 댓글