개발새발

Perceptron (퍼셉트론) 본문

AI

Perceptron (퍼셉트론)

비숑주인 2024. 9. 12. 12:49

뉴런과 퍼셉트론

퍼셉트론: 인공신경망의 기원이 되는 알고리즘

 

 

 

입력 차원이 2차원인 퍼셉트론

Sum 한 값(여기서는 x1*w1+x2*w2) 이 임계치를 넘어서면 1, 아니면 0을 output으로 전달

 

 

 

θ=-b로 넘겨서 더 정돈된 형태로 만든 식

 

 

논리 연산자를 퍼셉트론으로 구현하기

1. AND 연산

 

결정 경계

(b, w1, w2) = (-1.5, 1, 1)

x2 = -x1 + 1.5

 

Output 데이터를 구분할 수 있는 직선 = 결정 경계

결정 경계는 하나가 아니라 무수히 많이 존재한다

 

 

2. NAND 연산

 

결정 경계

(b, w1, w2) = (1.5, -1, -1)

(b, w1, w2) = (0.7, -0.5, -0.5) -> x1 + x2 = 1.4

 

두 결정 경계 모두 가능하다

 

 

2. OR 연산

결정 경계

(b, w1, w2) = (-0.5, 1, 1) -> x1 + x2 = 0.5

 

퍼셉트론의 한계

XOR 연산은 선형 분류가 불가능하다! 아래와 같은 연산은 선 하나를 사용해서 파란색과 빨간색 점을 분리할 수 없다

퍼셉트론의 한계점 극복

 

다층 퍼셉트론 도입( -> 비선형 결정 경계)

연속 activation 함수 이용 => 인공 신경망

 

 

다층 퍼셉트론(MLP) : XOR 연산

 

import numpy as np

## 1. AND 연산

def AND(x1, x2):
    b, w1, w2 = -1.5, 1, 1
    y = x1 * w1 + x2 * w2 + b
    if y <= 0:
        return 0
    else:
        return 1

def AND(x1, x2):
    X = np.array([1, x1, x2])
    W = np.array([-1.5, 1, 1])

    if np.dot(X, W) <= 0:   # np.dot(X, W.T) = np.sum(X*W)
        return 0
    else:
        return 1

for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = AND(x[0], x[1])
    print("AND", x, " = ", y)

## 2. Not AND 연산

def NAND(x1, x2):
    X = np.array([1, x1, x2])
    W = np.array([2, -1.5, -1])

    if np.dot(X, W) <= 0:   # np.dot(X, W.T) = np.sum(X*W)
        return 0
    else:
        return 1

for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = NAND(x[0], x[1])
    print("NAND", x, " = ", y)

## 3. OR 연산

def OR(x1, x2):
    X = np.array([1, x1, x2])
    W = np.array([-0.5, 1, 1])

    if np.dot(X, W) <= 0:   # np.dot(X, W.T) = np.sum(X*W)
        return 0
    else:
        return 1

for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
    y = OR(x[0], x[1])
    print("OR", x, " = ", y)

## 4. XOR 연산

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

    return AND(s1, s2)