즐거운프로그래밍

[딥러닝] 알고리즘 파이썬 기반 XOR의 AND, NAND, OR 구현하기

수수께끼 고양이 2023. 10. 27. 18:01
728x90
반응형

 

퍼셉트론의 한계 : XOR

단층 신경망은 입력값과 가중치의 곱의 합을 바로 출력값으로 내보내어 XOR 문제를 해결하려고 시도하는 과정에서 한계에 다다릅니다.

단층 신경망으로 구현할 수 없었던 XOR 게이트 문제를 다층 퍼셉트론이 개발되면서 해결되었습니다. 

다층 퍼셉트론은 입력층, 은닉층, 출력층으로 구성된 모델로 XOR 게이트의 경우 두개의 입력값과 하나의 출력값을 가진 단층 퍼셉트론 세개를 조합하여 해결할 수 있습니다.

 

AND 구현

def AND(x1,x2):
    w1,w2=0.4,0.4 # 가지돌기의 굵기
    b=-0.6 # 축삭돌기의 굵기(두께), 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

 


NAND 구현

def NAND(x1,x2):
    w1,w2=-0.5,-0.5 # 가지돌기의 굵기
    b=1 # 축삭돌기의 굵기(두께), 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

 


OR 구현

def OR(x1,x2):
    w1,w2=0.6,0.6 # 가지돌기의 굵기
    b=-0.5 # 축삭돌기의 굵기, 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

 


XOR 구현

def XOR(x1,x2):
    h1=OR(x1,x2)
    h2=NAND(x1,x2)
    return AND(h1,h2)

 

 


# AND 구현
def AND(x1,x2):
    w1,w2=0.4,0.4 # 가지돌기의 굵기
    b=-0.6 # 축삭돌기의 굵기(두께), 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

# NAND 구현
def NAND(x1,x2):
    w1,w2=-0.5,-0.5 # 가지돌기의 굵기
    b=1 # 축삭돌기의 굵기(두께), 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

# OR 구현
def OR(x1,x2):
    w1,w2=0.6,0.6 # 가지돌기의 굵기
    b=-0.5 # 축삭돌기의 굵기, 역치
    s=x1*w1+x2*w2+b
    return 0 if s<=0 else 1 # 활성화 함수

# XOR 구현
def XOR(x1,x2):
    h1=OR(x1,x2)
    h2=NAND(x1,x2)
    return AND(h1,h2) 

print(XOR(0,0),XOR(0,1),XOR(1,0),XOR(1,1))

 

 

 

 

728x90
반응형