많은 실생활 데이터는 선형분류기로 분류가 되지 않는 문제점이 있었고,
비선형 데이터를 처리하기 위한 분류기의 필요성으로 XORgate가 논의되었다.
당시에는 XORgate같은 비선형 데이터를 처리할 수 없었고, 이는 인공지능의 1차 빙하기를 야기한다.
비선형적 문제의 해결을 위해 '단층 퍼셉트론'이 아닌,
단층 퍼셉트론을 쌓은 '다층 퍼셉트론'을 사용하게 되었다.
(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 |