[DL] AND / NAND / OR 가중치 편향 구현

작성계기

밑바닥부터 시작하는 딥러닝1 책을 공부하면서 (개인 책이 아니기 때문에) 메모할 내용들을 여기에 적기위해서 작성
내용은 퍼셉트론(2장) 부분을 공부 중에 있음

가중치와 편향

가중치 (weight)

w1, w2라고 하는 가중치는 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수

편향(bias)

뉴런이 얼마나 쉽게 활성화하느냐를 조정하는 매개변수

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

NAND 게이트

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

OR 게이트

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

퍼셉트론 한계

XOR 게이트


XOR은 위 그래프처럼 x1과 x2 중 하나가 1일 때만 1을 출력하는데 이것을 퍼센트론으로 나타내는 것은 불가능하다.


위 그림은 OR 게이트를 시각화 해낸 그림이다.
초록색으로 색칠된 삼각형은 출력이 1일 때, 노란색 원형은 0을 출력할 때인데 이것을 빨간색 선과 같이 선형적으로 영역을 나눌 수 있다.

반면 XOR은,

똑같이 초록색으로 색칠된 삼각형은 출력 1을 의미하고, 노란색 원형은 0을 출력할 때인데 직선으로 나누는 것은 불가능하고 빨간색 점선으로 비선형 형태로 나눌 수가 있다.

좋은 웹페이지 즐겨찾기