학습 자료 글/딥러닝과 llm

[밑바닥부터 시작하는 딥러닝 1] 01. 퍼셉트론은 진리표를 외우는 문제가 아니라, 매개변수를 찾는 첫 모델이었다

cedis 2026. 5. 25. 10:39

밑바닥부터 시작하는 딥러닝 1 - 퍼셉트론 정리

처음 퍼셉트론을 보면 AND, NAND, OR, XOR 같은 논리 게이트 이름이 먼저 나와서 디지털 논리 회로를 외워야 하는 것처럼 보인다. 하지만 이 장에서 더 중요한 것은 게이트 이름이 아니다. 핵심은 입력과 정답의 관계를 만족시키는 가중치와 편향을 고르는 과정이다.

이번 글에서는 퍼셉트론 하나로 AND, NAND, OR 게이트를 만들고, 왜 XOR는 퍼셉트론 하나로 안 되는지, 그리고 여러 게이트를 조합하면 어떻게 XOR까지 만들 수 있는지 직접 따라간다.

이번 글에서 잡을 것

  • 진리표를 암기 대상이 아니라, 퍼셉트론이 맞춰야 할 입력-정답 데이터로 본다.
  • 가중치와 편향이 입력 신호를 어떻게 판단 기준으로 바꾸는지 본다.
  • AND, NAND, OR 게이트를 같은 코드 구조에서 매개변수만 바꿔 만든다.
  • XOR가 왜 단층 퍼셉트론의 한계인지, 왜 층을 쌓아야 하는지 확인한다.

1. 퍼셉트론은 무엇을 하는가

퍼셉트론은 여러 입력을 받아서 하나의 출력을 내는 아주 단순한 모델이다. 입력은 0 또는 1이고, 출력도 0 또는 1이다. 이때 입력값을 그냥 더하지 않고, 각 입력에 가중치(weight)를 곱한 뒤 편향(bias)을 더한다.

퍼셉트론의 판단 흐름

입력
x1, x2
가중합
w1*x1 + w2*x2 + b
출력
0 또는 1

쉽게 말하면, 퍼셉트론은 입력 신호의 중요도를 조절한 뒤, 기준선을 넘는지 보는 장치다. 가중치는 어떤 입력을 더 중요하게 볼지 정하고, 편향은 얼마나 쉽게 1을 출력할지 정한다.

2. 진리표는 외우는 표가 아니라 정답 데이터다

논리 게이트를 배울 때 진리표가 나온다. 여기서 중요한 태도는 표를 외우는 것이 아니다. 진리표는 이 입력이 들어왔을 때 어떤 출력이 나와야 하는지 알려주는 정답지다.

x1 x2 AND NAND OR XOR
0 0 0 1 0 0
1 0 0 1 1 1
0 1 0 1 1 1
1 1 1 0 1 0

기억할 관점: 머신러닝에서는 사람이 직접 매개변수를 찾지 않고, 데이터로부터 매개변수를 자동으로 찾게 만든다. 퍼셉트론의 진리표는 그 생각으로 넘어가기 전의 가장 작은 정답 데이터라고 볼 수 있다.

3. 같은 구조에서 매개변수만 바꾸면 게이트가 달라진다

AND, NAND, OR는 구조가 다르지 않다. 모두 같은 퍼셉트론 구조를 쓰고, 가중치와 편향만 다르게 둔다. 그래서 먼저 공통 함수를 하나 만든다.

import numpy as np

def perceptron(x1, x2, w1, w2, b):
    x = np.array([x1, x2])
    w = np.array([w1, w2])
    result = np.sum(x * w) + b

    if result <= 0:
        return 0
    else:
        return 1

이 함수는 입력 두 개를 받고, 가중치 두 개와 편향 하나를 이용해 0 또는 1을 출력한다. 이제 논리 게이트는 이 함수에 어떤 매개변수를 넣느냐의 문제가 된다.

AND

둘 다 1일 때만 1

w=(0.5,0.5), b=-0.7

NAND

AND의 결과를 뒤집음

w=(-0.5,-0.5), b=0.7

OR

하나라도 1이면 1

w=(0.5,0.5), b=-0.2

def AND(x1, x2):
    return perceptron(x1, x2, 0.5, 0.5, -0.7)

def NAND(x1, x2):
    return perceptron(x1, x2, -0.5, -0.5, 0.7)

def OR(x1, x2):
    return perceptron(x1, x2, 0.5, 0.5, -0.2)

여기서 중요한 점: AND, NAND, OR는 서로 다른 코드 구조가 아니다. 같은 계산 구조에서 가중치와 편향이 바뀌면 판단 기준이 바뀌고, 판단 기준이 바뀌면 게이트의 성격이 바뀐다.

4. XOR는 왜 퍼셉트론 하나로 안 될까

XOR는 둘 중 하나만 1일 때 1을 출력한다. 문제는 이 패턴이 대각선으로 갈라진다는 데 있다. 단층 퍼셉트론은 직선 하나로 0 영역과 1 영역을 나누는 모델인데, XOR는 직선 하나로 나눌 수 없다.

AND는 직선 하나로 구분 가능

(0,1)
0
(1,1)
1
(0,0)
0
(1,0)
0

1인 점이 한쪽에 몰려 있어 경계선을 상상하기 쉽다.

XOR는 직선 하나로 구분 불가

(0,1)
1
(1,1)
0
(0,0)
0
(1,0)
1

1인 점이 대각선으로 떨어져 있어 직선 하나로는 분리할 수 없다.

이 한계가 중요하다. 여기서 딥러닝의 큰 아이디어인 층을 쌓는다는 발상이 나온다. 퍼셉트론 하나로 안 되면, 퍼셉트론 여러 개를 조합해서 해결한다.

5. XOR는 게이트를 조합하면 만들 수 있다

XOR는 단층 퍼셉트론 하나로는 만들 수 없지만, 이미 만든 NAND, OR, AND를 조합하면 만들 수 있다. 구조는 다음과 같다.

입력
x1, x2
NAND
OR
AND
XOR
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    return AND(s1, s2)
x1 x2 NAND OR AND(NAND, OR) XOR 결과
0 0 1 0 0 0
1 0 1 1 1 1
0 1 1 1 1 1
1 1 0 1 0 0

이 조합이 바로 다층 퍼셉트론의 출발점이다. 하나의 퍼셉트론은 직선 하나의 판단밖에 못 하지만, 여러 퍼셉트론을 조합하면 한 번 중간 판단을 만들고, 그 결과를 다시 판단할 수 있다.

6. 직접 실행해볼 코드

아래 코드는 지금까지 만든 게이트를 한 번에 확인하는 가장 작은 실행 코드다.

inputs = [(0, 0), (1, 0), (0, 1), (1, 1)]

for x1, x2 in inputs:
    print(x1, x2, "AND:", AND(x1, x2),
          "NAND:", NAND(x1, x2),
          "OR:", OR(x1, x2),
          "XOR:", XOR(x1, x2))

예상 출력 흐름

0 0 AND: 0 NAND: 1 OR: 0 XOR: 0
1 0 AND: 0 NAND: 1 OR: 1 XOR: 1
0 1 AND: 0 NAND: 1 OR: 1 XOR: 1
1 1 AND: 1 NAND: 0 OR: 1 XOR: 0

헷갈리기 쉬운 부분

진리표를 외워야 하나?

암기보다 역할 이해가 먼저다. 진리표는 퍼셉트론이 맞춰야 할 정답 데이터다.

가중치와 편향은 뭐가 다른가?

가중치는 입력의 영향력을 조절하고, 편향은 1이 되기 쉬운 정도를 조절한다.

XOR는 왜 갑자기 어렵나?

출력 1인 점이 대각선에 있어서 직선 하나로 0과 1을 나눌 수 없기 때문이다.

스스로 점검

  1. AND와 OR는 같은 가중치라도 편향이 다르면 결과가 달라진다. 왜 그럴까?
  2. NAND는 AND의 어떤 부분을 뒤집은 게이트인가?
  3. XOR를 만들 때 NAND와 OR의 결과를 다시 AND에 넣는 이유를 말로 설명할 수 있는가?
  4. 단층 퍼셉트론의 한계를 “직선 하나”라는 말로 설명할 수 있는가?

이번 글에서 기억할 것

  • 퍼셉트론은 입력에 가중치를 곱하고 편향을 더해 0 또는 1을 판단한다.
  • AND, NAND, OR는 같은 구조에서 매개변수만 바꿔 만들 수 있다.
  • XOR는 직선 하나로 나눌 수 없어 단층 퍼셉트론 하나로는 만들 수 없다.
  • 여러 퍼셉트론을 조합하면 XOR처럼 단층으로 불가능했던 문제도 해결할 수 있다.

다음 글로 이어지는 질문

퍼셉트론을 여러 개 쌓으면 XOR를 만들 수 있었다. 그렇다면 신경망에서는 이 “층을 쌓는 구조”를 어떻게 일반화할까? 다음 글에서는 퍼셉트론에서 신경망으로 넘어가는 핵심인 활성화 함수를 다룬다.

한 줄 정리: 퍼셉트론의 논리 게이트는 진리표 암기가 아니라, 입력과 정답의 관계를 만족시키는 가중치와 편향을 찾아가는 첫 연습이다.