반응형

이전 포스팅에서 논리 회로 AND, NAND 그리고 OR 게이트와 퍼셉트론을 활용하는 방법에 대해 알아봤다.

2024.12.10 - [인공지능(AI)/딥러닝(DeepLearning)] - [딥러닝]인공지능 초보 개발자면 퍼셉트론과 AND 게이트 활용 방법은 알고 가자, 쉬운 설명.

 

[딥러닝]인공지능 초보 개발자면 퍼셉트론과 AND 게이트 활용 방법은 알고 가자, 쉬운 설명.

음식도 맛있고 양도 많은데 가격까지 저렴하다면 우리는 가성비가 좋다고 표현한다.음식과 가격 둘 다 만족해야 가성비라는 표현을 쓴다.이 중 하나라도 맘에 안들면 가성비가 좋다고 하지 않

tiboy.tistory.com

 

2024.12.17 - [인공지능(AI)/딥러닝(DeepLearning)] - [딥러닝]NAND, OR 게이트와 퍼셉트론 활용한 파이썬 코드 작성하는 방법, 인공지능 AI 초보 개발자

 

[딥러닝]NAND, OR 게이트와 퍼셉트론 활용한 파이썬 코드 작성하는 방법, 인공지능 AI 초보 개발자

이전 포스팅에서 논리 회로 중 AND 게이트와 퍼셉트론(Perceptron)을 활용하는 방법에 대해 쉽게 설명했다.아래 포스팅을 참조하면 된다.2024.12.10 - [인공지능(AI)/딥러닝(DeepLearning)] - [딥러닝]인공지

tiboy.tistory.com

 

이제 논리 회로인 XOR에 대해 알아보자.

 

XOR 게이트와 퍼셉트론 활용

XOR는 Exclusive OR로 배타적 논리합으로 부른다.

XOR 게이트는 기존 논리 회로처럼 쉽게 표현할 수 없다.

두 개의 명제 중 딱 하나만 참인 경우 참(1)을  출력한다.

둘 다 참이면 거짓(0)을 출력한다는 말이다.

OR 게이트 진리표 (true/false)를 표로 다시 확인하자.

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

1은 true, 0은 false로 생각하자.

XOR 게이트는 출력값이 OR의 반대로 나오지 않았다.

XOR 출력값은 둘 중 1이 하나인 경우만 1을 출력한다고 했다.

XOR 게이트 진리표 (true/false)를 표로 다시 확인하자.

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

x1과 x2가 하나 이상 1 일 때 OR 게이트는 1이다.

x1과 x2가 하나만 1 일 때 XOR 게이트는 1이다.

(w1, w2, 𝞱)

가중치와 임계값을 정하고 XOR 게이트를 계산하는 식을 만들어보자.

0 : x1w1 + x2w2 <= 𝞱

1 : x1w1 + x2w2 > 𝞱

 

OR 게이트에서 사용했던 가중치와 임계값을 넣어보자.

w1 = 0.7, w2 = 0.3, 𝞱 = 0.9

위 값들은 OR 게이트를 만족한다.

 

0 * 0.7 + 0 * 0.3 = 0 은 0.9 보다 작거나 같은 조건이므로 (<=) 0이다.

1 * 0.7 + 0 * 0.3 = 0.7 은 0.9 보다 크므로 (>) 1이다.

0 * 0.7 + 1 * 0.3 = 0.3 은 0.9 보다 크므로 (>) 1이다.

1 * 0.7 + 1 * 0.3 = 1.0 은 0.9 보다 크므로 (>) 1 이다.

OR 게이트에 딱 맞는 가중치와 임계값이다.

XOR 출력값은 좀 이상하다. w1 = 0.7, w2 = 0.3, 𝞱 = 0.2

 

0 * 0.7 + 0 * 0.3 = 0 은 0. 2 보다 작거나 같은 조건이므로 (<=) 0이다.

1 * 0.7 + 0 * 0.3 = 0.7 은 0. 2 보다 크므로 (>) 1이다.

1 * 0.7 + 0 * 0.3 = 0.3 은 0. 2 보다 크므로 (>) 1이다.

1 * 0.7 + 1 * 0.3 = 1.0 은 0. 2 보다 크므로 (>) 1이다.

마지막 x1 = 1, x2 = 1 은 결과가 0이 나와야 하지만 구조적으로 불가능함을 알 수 있다.

만약 마지막을 0으로 출력하기 위해 임계값을 (1.1~)로 하면 앞의 3가지 조건은 모두 출력값이 0 이 된다.

 

XOR 게이트와 다층 퍼셉트론의 활용

기존 방식대로 XOR를 표현할 수 없다.

방법은 다층 퍼셉트론을 활용하는 것이다.

지금까지 하나의 퍼셉트론을 사용했고 단층 퍼셉트론이라 한다.

다층 퍼셉트론은 퍼셉트론을 2개 이상 연결해서 원하는 값을 만드는 것이다.

XOR 게이트 진리표 (true/false)를 다층 구조표로 정리해 보자.

x1 x2 s1 s2 y
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0

 

x1, x2 뿐만 아니라 z1, z2까지 있다.

무슨 일인가?

1차로 값을 만들고 다시 2차로 XOR에 만족하는 논리 회로를 만든 것이다.

1차 z1은 x1, x2에 대한 NAND 게이트 출력값이다.

2차 z2는 x1, x2에 대한 OR 게이트 출력값이다.

z1과 z2 값을 AND 게이트에 적용하면 y 출력값이 나온다.

기가 막히게 XOR와 일치한다.

이제 우리는 원하는 출력값을 만들 수 있게 되었다.

OR 게이트와 NAND 게이트로 1차 값을 추출한 뒤 두 값을 AND 게이트에 적용하면 XOR 게이트가 된다.

 

XOR 게이트와 퍼셉트론 활용을 파이썬으로 구현하는 방법

이제 파이썬으로 직접 코딩해서 XOR를 표현해 보다.

아나콘다(파이썬)가 설치된 VSCode를 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
 
def AndGate(x1, x2):
    xn = np.array([x1, x2])
    wn = np.array([0.70.3])
    theta = 0.9
 
    sumData = np.sum(wn*xn)
    if sumData <= theta:
        return 0
    else:
        return 1
 
def NAND_GATE(x1, x2):
    w1, w2, theta = -0.7-0.3-0.9
    sumData = w1*x1 + w2*x2
    
    if sumData <= theta:
        return 0
    elif sumData > theta:
        return 1
    
def OrGate(x1, x2):
    xn = np.array([x1, x2])
    wn = np.array([0.70.3])
    theta = 0.2
 
    sumData = np.sum(wn*xn)
    if sumData <= theta:
        return 0
    else:
        return 1
    
 
def XOR_GATE(x1, x2):
    s1 = NAND_GATE(x1, x2)
    s2 = OrGate(x1, x2)
    y = AndGate(s1, s2)
    return y
 
print(XOR_GATE(0,0))
print(XOR_GATE(1,0))
print(XOR_GATE(0,1))
print(XOR_GATE(1,1))
cs

위 코드의 출력값은 0, 1, 1, 0이 나온다.

XOR 게이트와 일치한다.

2025년도는 좀 더 자주 포스팅을 할 예정이다.

AI 인공지능 개발자가 되기 위해 열심히 달리는 프로그래머 티보이였습니다.

 

반응형