Deep Learning

NAND NOR

falt ๐Ÿ’Œ o 2021. 8. 9. 12:26

NAND ๊ฒŒ์ดํŠธ์˜ ์กฐํ•ฉ๋งŒ์œผ๋กœ ๋ชจ๋“  ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜๋Š” NAND ๊ฒŒ์ดํŠธ์˜ ํผ์…‰ํŠธ๋ก ๋งŒ์œผ๋กœ ๋ชจ๋“  ๊ฒŒ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ python ์ฝ”๋“œ์ด๋‹ค.

def NAND(x1, x2):
    a0 = -0.5 * (x1 + x2) + 0.7
    if a0 > 0:
        return 1
    else:
        return 0

def NOT(x):
    return NAND(x, x)

def AND(x1, x2):
    return NOT(NAND(x1, x2))

def OR(x1, x2):
    return NAND(NOT(x1), NOT(x2))

def NOR(x1, x2):
    return NOT(OR(x1, x2))

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

def XNOR(x1, x2):
    return NOT(XOR(x1, x2))

for func in [NAND, AND, OR, NOR, XOR, XNOR]:
    print(func.__name__, end=' ')
    for x1, x2 in [[0, 0], [0, 1], [1, 0], [1, 1]]:
        print(func(x1, x2), end=' ')
    print('')

# ์ถœ๋ ฅ
NAND 1 1 1 0 
AND 0 0 0 1 
OR 0 1 1 1
NOR 1 0 0 0
XOR 0 1 1 0
XNOR 1 0 0 1

NOR ๊ฒŒ์ดํŠธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

def NOR(x1, x2):
    a0 = -0.5 * (x1 + x2) + 0.2
    if a0 > 0:
        return 1
    else:
        return 0

def NOT(x):
    return NOR(x, x)

def OR(x1, x2):
    return NOT(NOR(x1, x2))

def AND(x1, x2):
    return NOR(NOT(x1), NOT(x2))

def NAND(x1, x2):
    return NOT(AND(x1, x2))

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

def XNOR(x1, x2):
    return NOT(XOR(x1, x2))

for func in [NOR, OR, AND, NAND, XOR, XNOR]:
    print(func.__name__, end=' ')
    for x1, x2 in [[0, 0], [0, 1], [1, 0], [1, 1]]:
        print(func(x1, x2), end=' ')
    print('')

# ์ถœ๋ ฅ
NOR 1 0 0 0 
OR 0 1 1 1 
AND 0 0 0 1
NAND 1 1 1 0
XOR 0 1 1 0
XNOR 1 0 0 1

NAND ๊ฒŒ์ดํŠธ์™€ NOR ๊ฒŒ์ดํŠธ์˜ ๊ณตํ†ต์ ์€ ๋ฌด์—‡์ผ๊นŒ? ๋‘˜๋‹ค ์ž…๋ ฅ์ด ๋ชจ๋‘ 0์ผ ๋•Œ 1์„ ์ถœ๋ ฅํ•˜๋ฉด์„œ ์ž…๋ ฅ์ด ๋ชจ๋‘ 1์ผ ๋•Œ 0์„ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋ž˜์„œ NAND(x, x) = NOR(x, x) = NOT(x) ์ด ์„ฑ๋ฆฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค. NOT ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— NAND ๊ฒŒ์ดํŠธ๋Š” ์ž๊ธฐ ์ž์‹ ์˜ ๋ถ€์ •์ธ AND ๊ฒŒ์ดํŠธ, NOR ๊ฒŒ์ดํŠธ๋Š” ์ž๊ธฐ ์ž์‹ ์˜ ๋ถ€์ •์ธ OR ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.