인공지능/딥러닝

퍼셉트론

해피밀세트 2020. 4. 13. 18:32

https://mcgovern.mit.edu/2019/02/28/ask-the-brain-how-do-neurons-communicate/

 

 

1. 퍼셉트론의 정의

  • 인공 뉴론, 단순 퍼셉트론, 인공 신경망의 한 종류
  • 1943년 미국 신경외과 의사인 워렌 맥컬록에 의해서 발단이 되었고
    1957년 프랑크 로젠 블라트가 퍼셉트론 알고리즘을 고안했다.
  • 인간의 뇌의 동작을 전기 신호 on/off로 흉내닐수 있다는 이론을 증명했다.
  • 인간의 신경세포 하나를 흉내냈다.
  • 다수의 신호를 입력받아 하나의 신호를 출력한다.
  • 가장 간단한 형태의 피드포워드 네트워크

 

 

2. 퍼셉트론의 구조와 식

2-1 퍼셉트론의 구조

https://wikidocs.net/24958

 

2-2 퍼셉트론의 식

 

http://blog.naver.com/PostView.nhn?blogId=infoefficien&logNo=221069835408
https://wikidocs.net/24958

 

2-3 퍼셉트론 구조와 식 설명

x1, x2 입력 신호  
w1, w2 가중치, weight - 각 신호가 결과에 주는 영향력을 조절하는 요소
- 가중치가 클수록 해당 신호가 그만큼 더 중요하다는 뜻
θ 임계값, -b  
b 편향, bias, -θ - '편향'은 한쪽이 치우쳐 균형이 깨진다는 뜻
- 뉴런이 얼마나 쉽게 활성화(1을 출력) 하느냐를 조정하는 매개변수
y 출력 신호 - 출력 신호가 1이 되는걸 '뉴런이 활성화한다'라고 표현

 

  • 입력 신호(x1, x2)가 뉴런에 보내질 때 각가 고유한 가중치(w1, w2)가 곱해진다. (여기에 편향(b)가 더해지기도 한다.)
  • 뉴런에서 보내온 신호가 임계값(θ) 출력 신호(y)가 1을 출력한다.

 

 

3. 단층 퍼셉트론

3-1 논리 회로 구현하기

 

  (w1, w2, θ) 성공 여부
AND (0.5, 0.5, 0.7) / (1, 1, 1) / ... 성공
NAND (-0.5, -0.5, -0.7) / ... 성공
OR (0.5, 0.5, 0.3) / ... 성공
XOR ??? 실패

 

  • 같은 구조의 퍼셉트론으로 AND, NAND, OR 논리 회로를 표현할 수 있다.
  • 매개변수(가중치, 임계값)만 바꾸면 된다.
  • 선형(직선)으로 표현할 수 있다.
  • 퍼셉트론의 매개변수 값을 컴퓨터가 자동으로 정하게 만드는 작업을 기계학습에서 '학습'이라고 한다.

 

 

3-2 AND 게이트

X1 X2 Y
0 0 0
0 1 0
1 0 0
1 1 1

Y = 0        W1*X1 + W2*X2 <= θ

Y = 1        W1*X1 + W2*X2 > θ

 

# 파이썬 코드로 구현

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

AND(0,0)

AND(0,1)

AND(1,0)

AND(1,1)

# R 코드로 구현

def AND(x1,x2):

    w1,w2,theta = 0.5,0.5,0.7

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

    w = np.array([w1,w2])

    tmp = np.sum(w*x)

    if tmp <= theta:

        return 0

    else:

        return 1

input = np.array([[0,0],[0,1],[1,0],[1,1]])

for i in input :

    print(str(i)+" => "+str(AND(i[0],i[1])))

 

 

3-3 OR 게이트

X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 1
# 파이썬 코드로 구현

def OR(x1,x2):
    w1,w2,theta = 0.5,0.5,0.4
    x = np.array([x1,x2])
    w = np.array([w1,w2])
    tmp = w1*x1 + w2*x2
    if tmp <= theta:
        return 0
    else:
        return 1

input = np.array([[0,0],[0,1],[1,0],[1,1]])
for i in input :
    print(str(i)+" => "+str(OR(i[0],i[1])))

 

 

3-4 NAND 게이트 (Not AND)

X1 X2 Y
0 0 1
0 1 1
1 0 1
1 1 0

# 파이썬으로 코드구현

def NAND(x1,x2):
    w1,w2,theta = -0.5,-0.5,-0.7
    x = np.array([x1,x2])
    w = np.array([w1,w2])
    tmp = w1*x1 + w2*x2
    if tmp <= theta:
        return 0
    else:
        return 1

input = np.array([[0,0],[0,1],[1,0],[1,1]])
for i in input :
    print(str(i)+" => "+str(NAND(i[0],i[1])))

 

 

 

4. 다층 퍼셉트론

https://kolikim.tistory.com/13
https://velog.io/@dscwinterstudy/%EB%B0%91%EB%B0%94%EB%8B%A5%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EB%94%A5%EB%9F%AC%EB%8B%9D-2%EC%9E%A5-wgk5jxneq5

 

XOR 게이트 (eXclusive OR)

X1 X2 Y
0 0 0
0 1 1
1 0 1
1 1 0

 

 

퍼셉트론의 한계

  • 직선 하나로 XOR 출력을 구분할 없다.
  • 퍼셉트론(단층 퍼셉트론) 직선 하나로 나눈 영역만 표현할 있다는 한계가 있다.
  • 민스키 교수님이 기존 퍼셉트론의 문제점을 지적했는데 XOR 분류를 못한다는 문제점을 지적하고 인공지능의 겨울기가 시작되었다.

 

 

다층퍼셉트론(Multi layer perceptron)

XOR(eXclusive OR)

X1 X2 OR NAND AND XOR
0 0 0 1 0 0
0 1 1 1 1 1
1 0 1 1 1 1
1 1 1 0 0 0

 

  1. X1, X2 통해 OR층을 만든다.
  2. X1, X2 통해 NAND층을 만든다.
  3. OR층과 NAND층을 AND 계산 작업을 하면 XOR 만들 수 있다.

 

# 파이썬으로 구현하기

input = np.array([[0,0],[0,1],[1,0],[1,1]])
def XOR(x1,x2):             # 입력층(0)
    s1 = OR(x1,x2)             # 1
    s2 = NAND(x1,x2)        # 1
    s3 = AND(s1,s2)           # 2
    return s3

for i in input :

    print(str(i)+" => "+str(XOR(i[0],i[1])))

반응형

'인공지능 > 딥러닝' 카테고리의 다른 글

손실 함수(Loss Function)와 최적화(Optimizer)  (0) 2020.04.27
신경망의 출력층  (0) 2020.04.21
활성화 함수  (0) 2020.04.20
인공지능 / 머신러닝과 딥러닝의 차이점  (0) 2020.04.19
신경망  (0) 2020.04.13