본문 바로가기
밑바닥 딥러닝/밑바닥부터 시작하는 딥러닝1

2장

by sxlvxrjxms2s2itsmes2s2 2023. 4. 7.

2장

2.1 퍼셉트론이란?

2.2 단순 논리 회로

2.3 퍼셉트론 구현하기

2.4 퍼셉트론의 한계

2.5 다층 퍼셉트론이란?

 

2.1 퍼셉트론이란?

- 다수의 신호를 입력으로 받아 하나의 신호를 출력하는 것

- 인간의 뇌 신경세포를 본 따 만든 알고리즘

  • 원 : 뉴런 or 노드
  • x : 입력 신호
  • y : 출력 신호
  • w : 가중치
  • θ : 임계값 (한계)

퍼셉트론의 동작 원리

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

퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치(w) 부여

가중치(w) 는 각 신호가 결과에 주는 영향력을 조절하는 요소로 가중치가 클수록 해당 신호가 그만큼 더 중요함을 의미한다.

기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 하도록 함. 사람은 퍼셉트론의 구조를 고민하고 컴퓨터에 학습할 데이터를 주는 일을 한다.

2.2 단순 논리회로

퍼셉트론을 이용하여 여러 논리회로 구현 가능

( AND, NAND, OR )

 

  • AND 게이트

두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0 출력

 

 

Ex ) (w1, w2, θ) 가 (0.5, 0.5, 0.7) 일 때 만족

x1=0, x2=0 일때 / 0.5*0 + 0.5*0 ≤ 0.7 / y=0

x1=1, x2=0 일때 / 0.5*1 + 0.5*0 ≤ 0.7 / y=0

x1=0, x2=1 일때 / 0.5*0 + 0.5*1 ≤ 0.7 / y=0

x1=1, x2=1 일때 / 0.5*1 + 0.5*1 ≥ 0.7 / y=1

퍼셉트론의 동작 원리

 

  • NAND 게이트

모두 1일 때만 0을 출력, 그 외에는 1 출력

 

 

Ex ) (w1, w2, θ) 가 (-0.5, -0.5, -0.7) 일 때 만족

x1=0, x2=0 일때 / -0.5*0 - 0.5*0 ≥ -0.7 / y=1

x1=1, x2=0 일때 / -0.5*1 - 0.5*0 ≥ -0.7 / y=1

x1=0, x2=1 일때 / -0.5*0 - 0.5*1 ≥ -0.7 / y=1

x1=1, x2=1 일때 / -0.5*1 - 0.5*1 ≤ -0.7 / y=0

 

 

 

  • OR 게이트

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

즉 매개변수(가중치w와 임계값θ)의 값만 적절히 조정하면 세 가지를 만들 수 있다.

 

2.3 퍼셉트론 구현하기

AND게이트 구현하기

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

print(AND(0,0))  #0출력
print(AND(1,0))  #0출력
print(AND(0,1))  #0출력
print(AND(1,1))  #1출력

 

- 편향 도입

앞에서 구현한 AND게이트는 직관적이고 알기 쉬우나 앞으로를 위하여 다른 방식으로 수정

-θ를 b로 치환

즉 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고, 그렇지 않으면 0을 출력

import numpy as np
def AND(x1, x2):
    x=np.array([x1, x2])
    w=np.array([0.5,0.5])
    b=-0.7

    if(np.sum(x*w)+b) <= 0:
        print(0)
    else:
        print(1)
        
AND(0,0)   #0출력
AND(0,1)   #0출력
AND(1,0)   #0출력
AND(1,1)   #1출력

 

2.4 퍼셉트론의 한계

그러나 단층 러셉트론으로는 XOR게이트를 구현할 수 없음.

  •  XOR 게이트

직선으로 나누는 위의 세개의 논리회로와 달리 XOR 게이트는 직선 하나로는 표현이 불가능함.

즉 단일 퍼셉트론으로는 해결이 안돼 -> 다층 퍼셉트론 필요

 

2.5 다층 퍼셉트론이란?

다층퍼셉트론이란

- 단층 퍼셉트론을 쌓아 만든, 여러 층의 퍼셉트론

- 이를 사용 시 XOR 게이트 구현 가능

XOR 게이트는 NAND, OR, AND를 조합하여 구현 가능하다

즉 비선형적 표현은 선형표현을 조합해서 만들 수 있다.

 

import numpy as np
def AND(x1, x2):
    x=np.array([x1, x2])
    w=np.array([0.5,0.5])
    b=-0.8
    if (np.sum(x * w) + b) <= 0:
        return 0
    else:
        return 1

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.3
    if (np.sum(x * w) + b) <= 0:
        return 0
    else:
        return 1

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.8
    if (np.sum(x * w) + b) <= 0:
        return 0
    else:
        return 1

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

XOR(0,0)   #0출력
XOR(0,1)   #1출력
XOR(1,0)   #1출력
XOR(1,1)   #0출력

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

6장  (0) 2023.06.22
5장  (0) 2023.06.02
4장  (0) 2023.06.01
손글씨 숫자 인식  (0) 2023.05.13
3장  (0) 2023.04.07