딥러닝

비선형 데이터 분류(XORgate)

temporubato108 2024. 11. 20. 16:19

많은 실생활 데이터는 선형분류기로 분류가 되지 않는 문제점이 있었고,

비선형 데이터를 처리하기 위한 분류기의 필요성으로 XORgate가 논의되었다.

당시에는 XORgate같은 비선형 데이터를 처리할 수 없었고, 이는 인공지능의 1차 빙하기를 야기한다.

 

선형 분류기 하나로는 XORgate모델을 구현할 수 없다.(그림 왼쪽)

 

 

비선형적 문제의 해결을 위해 '단층 퍼셉트론'이 아닌,

단층 퍼셉트론을 쌓은 '다층 퍼셉트론'을 사용하게 되었다.

(NANDgate와 ORgate의 선형분류기를 사용. 위 그림 오른쪽)

 

간단한 퍼셉트론 여러개를 연결하면 복잡한 퍼셉트론을 만들 수 있다.

여기서 입력층과 출력층 사이에 숨겨진 레이어를 HiddenLayer라고 하고,

일반적으로 히든층이 많아질 수록 모델의 복잡도가 올라간다.

 

 

아래는 파이썬으로 구현한 XORgate이다.

import numpy as np

def AND_gate(x1,x2):
    x = np.array([x1, x2])
    weight = np.array([0.5, 0.5])
    bias = -0.7
    y = np.sum(weight*x) + bias
    
    return Step_Function(y)

def OR_gate(x1,x2):
    x = np.array([x1, x2])
    weight = np.array([0.5, 0.5])
    bias = -0.2
    y = np.sum(weight*x) + bias
    
    return Step_Function(y)

def NAND_gate(x1,x2):
    x = np.array([x1, x2])
    weight = np.array([-0.5, -0.5])
    bias = 0.7
    y = np.sum(weight*x) + bias
    
    return Step_Function(y)

def Step_Function(y):
    if y<=0:
        return 0
    else:
        return 1

def XOR_gate(x1, x2):
    NAND_out = NAND_gate(x1,x2)
    OR_out = OR_gate(x1,x2)
    XOR_out = AND_gate(NAND_out,OR_out)
    return XOR_out

def main():
    # XOR gate에 넣어줄 Input
    array = np.array([[0,0], [0,1], [1,0], [1,1]])
    
    # XOR gate를 만족하는지 출력하여 확인
    print('XOR Gate 출력')
    
    for x1, x2 in array:
        print('Input: ',x1, x2, ', Output: ', XOR_gate(x1, x2))

if __name__ == "__main__":
    main()

'딥러닝' 카테고리의 다른 글

퍼셉트론 선형분류기  (0) 2024.11.19
인공신경망과 퍼셉트론  (0) 2024.11.18