2020년 1월 7일 화요일

Artificial Intelligence - Perceptron

퍼셉트론은 신경망의 기본이 되는 알고리즘(이론)이다.

가령 아래의 +- 오브젝트들을 분류해본다.

직감적으로 선을 하나 그려 분리할 수 있을 것이다. linearly separable 하기 때문이다.

이는 퍼셉트론을 활용하여 분류할 수 있는데 퍼셉트론은 N개의 인풋을 받아서 1개의 아웃풋을 내놓는데 이를 도식화해보면 다음과 같다.


인풋 x1~xn에 가중치 w를 주어 P(x)라는 아웃풋을 내놓는 뉴런이다.

그리고 그림처럼 input Layer, output Layer가 존재한다.


퍼셉트론을 활용하여 Linearly separable한 문제를 푸는 방법은 아래처럼 구현할 수 있다.


아주 기본적인 코드이지만 문제가 linear하다면 느릴지라도 결국 선분 하나를 찾아낼 수 있을 것이다.


이를 활용하여 AND, OR, XOR 문제를 생각해보자.

if w1x1 + w2x2 + b >0 then 1 else 0 

먼저 AND GATE의 생김새이다.


위의 AND GATE는 적절한 선분을 그어 1과 0의 값을 구현할 수 있다.

다음 OR GATE도 마찬가지이다.



w1, w2, b는 적절한 값으로 주고.. 파이썬 코드로 보면 다음과 같다.

def AND_GATE(x1, x2):
    w1=0.5
    w2=0.5
    b=-0.7
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1

def OR_GATE(x1, x2):
    w1=0.6
    w2=0.6
    b=-0.5
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1

def NAND_GATE(x1, x2):
    w1=-0.5
    w2=-0.5
    b=0.7
    result = x1*w1 + x2*w2 + b
    if result <= 0:
        return 0
    else:
        return 1

이런식으로 단층 퍼셉트론으로 AND, OR, NAND 정도는 구할 수 있다. 하지만 XOR GATE는 단층 퍼셉트론으로 구현할 수 없다. 우리는 디지털 회로 시간에 배운 GATE를 엮어서 XOR GATE를 만들어낸 경험을 되살려야 한다.

XOR GATE의 경우 서로 다른 값을 가지고 있을 때에만 1을 return 한다. 즉 x1, x2가 같으면 0을 return 한다.

XOR GATE는 다음처럼 표현될 수 있다.


XOR GATE는 1개의 직선으로 구분이 불가능하다. 하지만 AND, OR, NAND GATE를 조합해서 만들 수 있다.



XOR_GATE의 코드는 다음처럼 볼 수 있겠다.

def XOR_GATE(x1, x2):
    s1 = NAND_GATE(x1, x2)
    s2 = OR_GATE(x1, x2)
    return AND_GATE(s1, s2)


이런 다층 퍼셉트론을 MLP(Multilayer Perceptron)라고 하며 입력층과 출력층 사이에 hidden layer가 존재한다는 것이 특징이다. 이러한 hidden layer를 n개를 쌓은 개념이 DNN(Deep Neural Network)이고 최근 인공 신경망의 기초가 되었다.

댓글 없음:

댓글 쓰기

2022년 회고

 올해는 블로그 포스팅을 열심히 못했다. 개인적으로 지금까지 경험했던 내용들을 리마인드하자는 마인드로 한해를 보낸 것 같다.  대부분의 시간을 MLOps pipeline 구축하고 대부분을 최적화 하는데 시간을 많이 할애했다. 결국에는 MLops도 데이...