반응형

출처 : 밑바닥부터 시작하는 딥러닝

 

퍼셉트론perceptron 프랑크 로젠블라트 Frank Rosenblatt

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

 

2.1 퍼셉트론 이란 ?

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

여기서 말하는 신호란 전류나 강물처럼 흐름이 있는 것을 상상하면 좋습니다.

전류  로 생각하면 되는데 실제 전류와 달리 퍼셉트론 신호는 '흐른다/ 안 흐른다(1이나 0) ' 의 두 가지 값을 가질 수 있습니다. 

1은 신호가 흐른다. 0은 신호가 흐르지 않는다.

 

x1, x2는 입력신호 , y는 출력 신호 , w1과 w2는 가중치를 뜻합니다. 

그림의 원을 뉴런 혹은 노드

w1, w2 가중치 

w1x1, w2x2 

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

한계를 임계값이라고 하며 θ 기호 theta 세타라 합니다.

가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용합니다. 

가중치가 클 수록 해당 신호가 그만큼 더 중요함을 뜻합니다. 

 

2.2 단순한 논리 회로

2.2.1 AND 게이트

진리표 입력 신호와 출력 신호의 대응표를 진리표라고 합니다.

모두 1이여야 1이다.

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

 

 

2.2.2 NAND게이트와 OR게이트

NAND NOT AND  모두 1이면 0이다.

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

OR 모두 0이면 0이다. 

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

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

 

퍼셉트론의 구조는 똑같지만  세가지 게이트에서 다른 매개변수( 가중치와 임계값)의 값뿐입니다. 

 

2.3 퍼셉트론 구현하기

 

AND구현하기 

def AND(x1,x2):
    w1, w2, theta = 0.5, 0.6, 0.7
    tmp = x1*w1 + x2* w2
    if tmp <= theta:
        return 0
    elif tmp>theta:
        return 1

print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))

2.3.2 가중치와 편향 도입

θ를 -b로 치환하면 프셉트론의 동작이 아래처럼 됩니다. 

b를 편향 bias

w1, w2 가중치 weight

0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력합니다. 

numpy 배열끼리의 곱셈은 두 배열의 원소 수가 같다면 각 원소끼리 곱합니다. 

w*x

 

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 tmp <= 0:
        return 0
    else:
        return 1

print(AND(0,0))
print(AND(1,0))
print(AND(0,1))
print(AND(1,1))

W1,W2는 각 입력 신호가 결과에 주는 영향력(중요도_을 조절하는 매개변수고 , 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력) 하느냐를 조정하는 매개변수 입니다. 

편향의 값은 뉴런이 얼마나 쉽게 활성화 되는지를 결정합니다. 

 

NAND게이트와 OR게이트를 구현 

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

print(NAND(0,0))
print(NAND(1,0))
print(NAND(0,1))
print(NAND(1,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

print(OR(0,0))
print(OR(1,0))
print(OR(0,1))
print(OR(1,1))

2.4 퍼셉트론의 한계

2.4.1 도전 !XOR게이트

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

X1과 X2중 한쪽이 1일 때만 1을 출력합니다.('배타적'이란 자기외에는 거부한다는 의미죠 )排他

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

or게이트의 동작을 시각적으로 생각해보죠 .

0을 원 , 1을 삼각형으로 표시

실제로 이 그림의 직선은 네 점을 제대로 나누고 있습니다.

2.4.2 선형과 비선형

비선형 영역 : 곡선 영영

선형 영역 : 직선의 영역  

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

ko.wikipedia.org/wiki/AND_%EA%B2%8C%EC%9D%B4%ED%8A%B8

 

AND 게이트 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

ko.wikipedia.org/wiki/OR_%EA%B2%8C%EC%9D%B4%ED%8A%B8

 

OR 게이트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

ko.wikipedia.org/wiki/NAND_%EA%B2%8C%EC%9D%B4%ED%8A%B8

 

NAND 게이트 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

ko.wikipedia.org/wiki/XOR_%EA%B2%8C%EC%9D%B4%ED%8A%B8

 

XOR 게이트 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. INPUT OUTPUT A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 XOR 게이트, EOR 게이트, EXOR 게이트는 참 입력의 개수가 홀수일 때 참 (1/HIGH) 출력을 내보내는 디지털 논리 게이트이다. 배타

ko.wikipedia.org

"단층 퍼셉트론 single-layer perceptron 으로는 xor게이트를 표현할 수 없다." 또는 " 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다" 가 됩니다.

xor진리표 

x1 x2 s1 s2 y
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

 

 

2.5 다층 퍼셉트론의 충돌한다면 

층을 쌓는다. multi-layer percptron을 만들 수 있다는데 있습니다. 

 

2.5.1 기존 게이트 조합하기

2.5.2 XOR 게이트 구현하기

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

print(XOR(0,0))
print(XOR(1,0))
print(XOR(0,1))
print(XOR(1,1))

 

0층 1층 2층 왼쪽부터  

xor는 2층 퍼셉트론입니다. 

여러 개인 퍼셉트론을 다층 퍼셉트론이라 합니다. 

퍼셉트론은 모두 3층으로 구성됩니다만 , 가중치를 갖는 층은 사실 2개(0층과 1층사이 , 1층과 2층 상이) 뿐이니 '2층 퍼셉트론'이라 부르기로 합시다. 

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

2. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고 , 2층의 뉴런은 y를 출력한다.

 

 

단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있었습니다.

층을 쌓아(깊게 하여 ) 더 다양한 것을 표현할 수 있답니다. 

 

2.6 NAND 에서 컴퓨터까지

복잡한 회로

 

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

06. 학습 관련 기술들  (0) 2020.10.20
05. 오차역전파법  (0) 2020.10.16
04. 신경망 학습  (0) 2020.09.25
03. 신경망  (0) 2020.09.23
01. 헬로 파이썬  (0) 2020.09.18

+ Recent posts