레이블이 Perceptron인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Perceptron인 게시물을 표시합니다. 모든 게시물 표시

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도 데이...