단원 홈
2단원 · 13차시

직선 하나로 나눌 수 있는가
가중치를 밀면 경계가 움직인다

9차시에서 여러분은 점들을 지나가는 직선을 찾았습니다. 오늘 직선은 다른 일을 합니다 — 평면을 둘로 가릅니다. 가중치 셋을 밀면 그 선이 움직이지요. 그런데 아무리 밀어도 갈라지지 않는 네 점이 있습니다.

성취기준 12인기02-05
인공 뉴런가중치·편향 계단 함수경계선 퍼셉트론 학습 규칙XOR
🎯 학습 목표
  • 인공 뉴런 하나가 출력을 정하는 과정을 입력·가중치·편향·활성화 함수로 나누어 설명하고, 주어진 (w₁, w₂, b)에서 네 점의 출력을 손으로 계산할 수 있다.
  • 가중치와 편향이 특성 공간 위의 직선 하나를 정한다는 것을 알고, 기울기 −w₁/w₂ · 절편 −b/w₂ 로 그 선을 식으로 적을 수 있다.
  • 퍼셉트론 학습 규칙이 언제 가중치를 고치고 언제 두는지 말할 수 있고, XOR을 직선 하나로 나눌 수 없음을 실험과 논증 두 가지로 보일 수 있다.
🤔

여는 장면 — 종이에 점 네 개를 찍는다

공책을 펴고 좌표평면에 점 네 개를 찍어 보세요. (0, 0) · (0, 1) · (1, 0) · (1, 1). 정사각형의 네 꼭짓점입니다. 오늘 이 네 점이 우리의 데이터 전부예요. 행이 넷, 특성이 둘. 이 단원에서 가장 작은 데이터입니다.

이제 각 점에 이름표를 붙입니다. 붙이는 방법을 네 가지로 바꿔 볼 거예요.

문제(0,0)(0,1) (1,0)(1,1)말로 하면
AND0001 둘 다 1일 때만 1
OR0111 하나라도 1이면 1
NAND1110 AND의 반대
XOR0110 둘이 서로 다를 때만 1
네 문제의 입력은 완전히 같습니다. 다른 것은 이름표 넉 줄뿐이에요. 이 표는 오늘 내내 옆에 두고 봅니다.

이제 자를 하나 꺼내세요. 종이 위에 직선을 하나만 그어서, 이름표가 1인 점은 선의 한쪽에, 0인 점은 반대쪽에 모두 몰아 넣어 보는 겁니다. AND는 금방 됩니다. 오른쪽 위 (1,1) 하나만 잘라 내면 되니까요. OR도, NAND도 어렵지 않아요.

그런데 마지막 XOR에서 자가 멈춥니다. 1인 점은 (0,1)과 (1,0), 0인 점은 (0,0)과 (1,1). 두 짝이 서로 엇갈린 대각선에 놓여 있어요. 자를 어떻게 돌려 보아도 한 점이 남습니다.

💭 오늘의 물음

기계가 스스로 그 직선을 찾게 하려면 무엇을 어떻게 고쳐 나가야 하는가? 그리고 XOR처럼 직선으로는 끝내 나눌 수 없는 문제가 정말로 있는가 — 있다면 그것을 어떻게 증명할 것인가?

오늘은 두 가지 방법으로 답합니다. 하나는 손으로예요. 슬라이더 셋을 밀어 선을 직접 움직여 보고, 3분 안에 XOR을 포기하게 될 겁니다. 다른 하나는 전수 조사입니다. 가중치 셋을 −3부터 +3까지 0.25 간격으로 훑어 15,625가지를 컴퓨터에게 전부 시켜 보고, 몇 가지가 성공하는지 셉니다. AND는 286가지, OR은 650가지, NAND는 364가지가 성공합니다. XOR은 0가지예요. 이 숫자가 오늘의 결론입니다.

1

가장 작은 부품 — 인공 뉴런 하나

사람의 뇌에는 신경세포, 곧 뉴런이 약 860억 개 있습니다. 뉴런 하나가 하는 일은 뜻밖에 단순해요. 가지돌기로 여러 신호를 받아 세포체에서 합치고, 그 합이 어떤 문턱을 넘으면 축삭으로 신호를 내보냅니다. 넘지 못하면 잠자코 있고요. 받고 · 더하고 · 문턱을 넘으면 내보낸다 — 이 세 마디가 전부입니다.

신경세포 입체 그림 — 가지돌기, 핵이 든 세포체, 길게 뻗은 축삭, 그리고 오른쪽 위 다음 세포에 닿은 축삭 말단에 영어 이름표가 붙어 있다
생물 뉴런. 가지돌기(Dendrite)가 신호를 받고, 세포체(Cell body)가 그것을 합치고, 축삭(Axon)이 오른쪽 위의 다음 세포로 내보낸다. 신호는 축삭 끝의 시냅스 말단에서 건너간다. 출처: BruceBlaus, Wikimedia Commons (CC BY 3.0)
퍼셉트론 도해 — 입력 i1부터 in까지 각각 가중치 W를 곱해 더하기 상자(+)로 모으고, 함수 상자 f를 거쳐 출력 o를 내며, 아래에 식 o = f(Σ i·W)가 적혀 있다
퍼셉트론(1958년 로젠블랫)의 구조를 그린 도해. 입력 i마다 가중치 W를 곱해 모두 더하고(+), 그 합을 함수 f에 넣어 출력 o를 낸다. 오늘은 f 자리에 계단 함수를 넣는다. 이 그림에는 편향이 따로 없는데, 아래 도해에서 편향을 더한다. 오늘 우리가 손으로 밀어 볼 것이 바로 저 W다. 출처: Mat the w (English Wikipedia), Wikimedia Commons (CC BY-SA 3.0)

1943년 매컬러와 피츠는 이 구조를 수학으로 옮겨 적었습니다. 1958년 로젠블랫은 거기에 스스로 문턱을 조정하는 규칙을 붙여 퍼셉트론(perceptron)이라 이름 붙였고요. 우리가 오늘 만들 것이 그것입니다.

인공 뉴런 하나는 이렇게 씁니다. 입력이 둘일 때예요.

z = w₁·x₁ + w₂·x₂ + b
y = step(z) = 1 (z ≥ 0 일 때)  ·  0 (z < 0 일 때)

이름을 붙여 봅시다. x₁·x₂는 입력이고, 곱해지는 w₁·w₂가 가중치(weight)입니다. 혼자 더해지는 b는 편향(bias)이고, 마지막에 씌우는 step이 활성화 함수(activation function)예요. 오늘 쓰는 활성화 함수는 가장 단순한 계단 함수입니다.

x₁ x₂ 1 w₁ w₂ b Σ 가중합 z z = 0 1 0 y 0 또는 1 계단 함수

입력에 가중치를 곱해 모두 더하고, 편향을 한 번 더 보탠 것이 가중합 z다. z가 0 이상이면 1, 아니면 0. 편향은 늘 1이 입력되는 가상의 입력선에 붙은 가중치라고 보아도 된다(그림의 노란 점선). 그래서 편향도 가중치와 똑같은 규칙으로 학습된다.

두 값의 뜻을 말로 옮기면 이렇습니다.

⚖️

가중치 w — 얼마나 중요하게 볼 것인가

w₁이 크면 x₁이 조금만 커져도 z가 크게 오릅니다. w₁ = 0이면 그 입력은 아예 무시됩니다. 음수면 반대로 작용해요 — 그 입력이 켜질수록 뉴런은 꺼지려 합니다.

🎚️

편향 b — 얼마나 쉽게 켜질 것인가

입력이 모두 0이어도 z = b입니다. b가 크면 아무 입력 없이도 켜지고, b = −1.5면 가중합이 1.5는 넘어야 겨우 켜집니다. 문턱의 높이를 정하는 값이에요.

숫자를 넣어 확인해 봅시다. AND 문제에 (w₁, w₂, b) = (1.0, 1.0, −1.5)를 넣으면 네 점의 가중합이 이렇게 나옵니다.

(x₁, x₂)z = 1·x₁ + 1·x₂ − 1.5 y = step(z)AND 정답 t판정
(0, 0)0 + 0 − 1.5 = −1.500맞음
(0, 1)0 + 1 − 1.5 = −0.500맞음
(1, 0)1 + 0 − 1.5 = −0.500맞음
(1, 1)1 + 1 − 1.5 = +0.511맞음
네 줄 모두 맞았습니다 — 정확도 100.0%. 아래 파이썬 상자를 실행하면 【1】의 첫 줄에 AND w1=+1.0 w2=+1.0 b=-1.5 출력 [0, 0, 0, 1] 정답 [0, 0, 0, 1] 성공이 그대로 찍힙니다.
⚠️ 뇌에서 영감을 받았을 뿐, 뇌가 아니다

인공 뉴런은 생물 뉴런에서 착상을 얻은 것이지 그것을 흉내 낸 모형이 아닙니다. 진짜 뉴런은 시간 축 위에서 짧은 전기 펄스를 쏘고, 시냅스는 하나가 아니라 수천 개이며, 화학물질의 농도에 따라 반응이 달라집니다.

우리가 방금 적은 것은 곱셈 두 번, 덧셈 세 번, 크기 비교 한 번입니다. "인공지능이 뇌처럼 작동한다"는 말은 이 자리에서 이미 지나친 표현이에요. 같은 것은 여러 신호를 무게를 달리해 합쳐서 문턱과 견준다는 발상 하나뿐입니다.

2

가중치와 편향이 정하는 것은 결국 직선 하나다

뉴런 하나가 켜지는 자리와 꺼지는 자리의 경계는 어디일까요? 켜짐과 꺼짐이 갈리는 곳은 z = 0인 자리입니다. 그러니까 이 식이지요.

w₁·x₁ + w₂·x₂ + b = 0

중학교에서 본 적 있는 모양입니다. ax + by + c = 0 — 직선의 방정식이에요. x₂에 대해 풀어 보면 더 익숙해집니다.

x₂ = ( −w₁ / w₂ ) · x₁ + ( −b / w₂ )
기울기 = −w₁/w₂   ·   y절편 = −b/w₂

이것이 오늘 가장 중요한 식입니다. 슬라이더를 미는 일이 곧 이 직선의 기울기와 절편을 바꾸는 일이에요. 그리고 직선은 평면을 두 반쪽으로 가릅니다. z ≥ 0인 반쪽이 켜짐(1), 나머지가 꺼짐(0)입니다.

앞의 AND 예를 넣어 보죠. (1.0, 1.0, −1.5)이면 기울기는 −1/1 = −1.00, 절편은 −(−1.5)/1 = +1.50. 그러니까 x₂ = −1.00·x₁ + 1.50입니다. x₁ = 0일 때 x₂ = 1.50, x₁ = 1일 때 x₂ = 0.50. (1,1)만 이 선의 위쪽에 남고 나머지 셋은 아래에 놓이지요.

⚠️ w₂ = 0 이면 위 식을 쓸 수 없다

−w₁/w₂는 w₂ = 0에서 0으로 나누기가 됩니다. 슬라이더를 밀다가 w₂가 정확히 0을 지나는 순간이 반드시 오는데, 이 경우를 따로 처리하지 않으면 그 자리에서 화면이 깨져요.

w₂ = 0이면 원래 식은 w₁·x₁ + b = 0, 곧 x₁ = −b/w₁인 세로선입니다. w₁도 0이면 z = b로 고정되어 선이 아예 없고 평면 전체가 한 색이 됩니다. 오늘 쓸 시뮬레이터는 이 세 경우를 나누어 처리하도록 짜 두었습니다.

여기서 이 차시 전체를 미리 정하는 사실 하나가 나옵니다. 뉴런 하나가 만들 수 있는 경계는 언제나 직선이라는 것. 휘어진 경계도, 두 조각으로 끊어진 경계도 만들 수 없습니다. 입력이 셋이면 경계는 평면이 되고, 넷 이상이면 초평면이 되지만 "곧다"는 성질은 그대로예요. 그래서 퍼셉트론을 선형 분리기(linear classifier)라고 부릅니다.

ℹ️ 답은 하나가 아니다 — 경계는 점이 아니라 띠다

AND를 성공시키는 (w₁, w₂, b)가 딱 하나일까요? 아닙니다. 오늘 확인할 전수 조사에서, −3부터 +3까지 0.25 간격으로 훑은 15,625가지 가운데 AND는 286가지, OR은 650가지, NAND는 364가지가 네 점을 모두 맞혔습니다. 격자를 더 촘촘하게 하면 그 수는 얼마든지 늘어나요.

그러니 잠시 뒤 여러분이 슬라이더로 찾은 값은 짝과 다를 것이 거의 확실합니다. 그런데 둘 다 맞아요. 왜 그럴까요? 네 점 사이에는 선이 지나갈 수 있는 넉넉한 틈이 있기 때문입니다. 경계가 그 틈 안에만 있으면 어디에 있든 답입니다. 이 '틈'을 최대한 넓게 잡자는 생각에서 나중에 서포트 벡터 머신 같은 방법이 나옵니다.

3

기계가 스스로 미는 법 — 퍼셉트론 학습 규칙

여기까지는 사람이 (1.0, 1.0, −1.5)를 알아내서 적어 준 것입니다. 그건 학습이 아니라 프로그래밍이에요. 1단원에서 규칙을 손으로 적어 넣던 것과 다를 바가 없습니다. 기계가 스스로 찾아야 학습입니다. 로젠블랫이 붙인 규칙은 한 줄로 요약됩니다.

틀렸을 때만  ·  틀린 방향으로  ·  조금씩 민다

e = t − y   (t = 정답 이름표, y = 지금 뉴런이 낸 출력)
w₁ ← w₁ + η·e·x₁   ·   w₂ ← w₂ + η·e·x₂   ·   b ← b + η·e

e는 오차입니다. 맞혔으면 t = y라서 e = 0이고, 그러면 세 줄 모두 아무것도 더하지 않아요. 맞힌 점은 뉴런을 건드리지 않습니다. 틀렸을 때만 e가 +1 아니면 −1이 되어 가중치가 움직입니다. η(에타)는 학습률(learning rate), 한 번에 미는 폭입니다.

왜 하필 이 방향인가

정답이 1인데 뉴런이 0을 냈다고 합시다. e = 1 − 0 = +1이에요. 켜지게 하려면 z를 키워야 합니다. 그런데 어느 가중치를 키워야 할까요?

  • 그 점의 x₁이 1이면, w₁을 키우는 만큼 z가 커집니다 → 키우자.
  • 그 점의 x₁이 0이면, w₁을 아무리 키워도 z는 그대로입니다 (w₁ × 0 = 0) → 건드릴 이유가 없다.

그래서 갱신식에 x가 곱해져 있는 것입니다. 입력이 0인 가중치는 저절로 안 움직여요. 아주 단정한 설계입니다. 반면 편향에는 x가 곱해지지 않지요. 앞 그림에서 보았듯 편향은 늘 1이 입력되는 선에 붙은 가중치라서, 언제나 η·e만큼 통째로 움직입니다.

⚠️ 이것은 9차시의 경사하강법이 아니다

9차시에서 우리는 손실을 정의하고, 그 손실의 기울기를 계산해 내리막으로 내려갔습니다. 오늘 규칙은 손실도 기울기도 계산하지 않습니다. 틀린 점을 보고 그 점 쪽으로 곧장 미는 것뿐이에요. 9차시의 mse·gradient 함수는 오늘 한 줄도 쓰지 않습니다.

쓸 수가 없기 때문이기도 합니다. 계단 함수는 z = 0을 뺀 모든 곳에서 기울기가 0이에요. 0을 따라 내려가면 아무 데도 못 갑니다. 그래서 퍼셉트론은 경사하강법 대신 이 별도의 규칙을 씁니다. 이어지는 것은 코드가 아니라 '예측 → 오차 → 고치기'라는 고리의 모양뿐입니다. 14차시에서 계단 함수를 매끈한 함수로 갈아 끼우고 나서야 경사하강법이 다시 돌아옵니다.

한 걸음씩 따라가 보기 — AND, 처음 열두 걸음

시작 가중치를 무작위로 뽑았습니다. 씨앗을 13으로 고정했으니 여러분이 돌려도 똑같은 값이 나옵니다 — w₁ = −0.4820, w₂ = +0.3705, b = +0.3682. 학습률은 0.1이고, 네 점을 (0,0) → (0,1) → (1,0) → (1,1) 순서로 봅니다.

걸음입력정답 t예측 y 어떻게 했나w₁w₂b
1(0,0)01틀림 → 밀었다−0.4820+0.3705+0.2682
2(0,1)01틀림 → 밀었다−0.4820+0.2705+0.1682
3(1,0)00맞음 → 그대로−0.4820+0.2705+0.1682
4(1,1)10틀림 → 밀었다−0.3820+0.3705+0.2682
5(0,0)01틀림 → 밀었다−0.3820+0.3705+0.1682
6(0,1)01틀림 → 밀었다−0.3820+0.2705+0.0682
7(1,0)00맞음 → 그대로−0.3820+0.2705+0.0682
8(1,1)10틀림 → 밀었다−0.2820+0.3705+0.1682
9(0,0)01틀림 → 밀었다−0.2820+0.3705+0.0682
10(0,1)01틀림 → 밀었다−0.2820+0.2705−0.0318
11(1,0)00맞음 → 그대로−0.2820+0.2705−0.0318
12(1,1)10틀림 → 밀었다−0.1820+0.3705+0.0682
아래 파이썬 상자를 실행하면 【2】에 그대로 찍히는 열두 걸음입니다. 3 · 7 · 11걸음을 보세요 — 맞힌 점에서는 세 값이 소수점 넷째 자리까지 그대로입니다. 그리고 1 · 5 · 9걸음처럼 (0,0)에서 틀리면 b만 0.1씩 내려갑니다. 입력이 둘 다 0이라 가중치는 움직일 수가 없기 때문이에요. 시뮬레이터에서 [⏭ 한 걸음]을 열두 번 눌러 이 표와 대조해 보세요.

네 점을 한 바퀴 다 보는 것을 에폭(epoch)이라고 합니다. 오늘은 데이터가 네 점뿐이라 한 에폭 = 네 걸음이에요. 한 에폭을 도는 동안 한 번도 안 틀렸다면 더 고칠 것이 없으므로 학습을 멈춥니다.

씨앗 13, 학습률 0.1로 AND를 끝까지 돌리면 9에폭 만에 멈춥니다. 그동안 가중치를 실제로 고친 것은 18번이에요. 에폭마다 정확도가 어떻게 올라갔는지 보면 이렇습니다.

에폭w₁w₂b 틀린 점정확도
1−0.38+0.37+0.273개50.0%
2−0.28+0.37+0.173개50.0%
3−0.18+0.37+0.073개50.0%
4−0.08+0.37−0.033개75.0%
5−0.08+0.27−0.131개75.0%
6+0.02+0.27−0.132개75.0%
7+0.12+0.27−0.132개75.0%
8+0.12+0.17−0.231개100.0%
9+0.12+0.17−0.230개100.0%
정확도가 50 → 75 → 100으로만 뜁니다. 점이 넷뿐이라 정확도는 25% 단위로만 움직여요("조금씩 오른다"는 말이 성립하지 않습니다). 5에폭과 6에폭 사이를 보세요 — 틀린 점이 1개에서 2개로 늘었습니다. 이 규칙은 매 걸음 반드시 좋아지는 것을 보장하지 않습니다.

학습이 끝난 가중치 (+0.118, +0.171, −0.232)를 경계선 식에 넣으면 기울기 −0.692, 절편 +1.360이 나옵니다. 사람이 손으로 고른 (1.0, 1.0, −1.5)와는 전혀 다른 값이지요. 그런데 둘 다 네 점을 다 맞힙니다. 개념 2에서 말한 '틈'이 그래서 중요합니다.

ℹ️ 반드시 멈춘다는 것이 증명되어 있다

데이터를 직선 하나로 나눌 수 있기만 하면, 이 규칙은 유한 번 만에 반드시 멈춘다는 것이 1962년 노비코프에 의해 증명되었습니다 (퍼셉트론 수렴 정리). 시작 가중치가 어디였든, 학습률이 얼마였든 상관없습니다. 느릴 수는 있어도 영원히 헤매지는 않는다는 보장이에요.

시작 가중치를 씨앗 0번부터 19번까지 스무 가지로 바꿔 각각 2000에폭까지 돌려 보았습니다. AND는 20개 중 20개, OR도 20개, NAND도 20개가 전부 멈췄습니다. 빠른 것은 AND가 2에폭, OR이 1에폭, NAND가 3에폭이었고 가장 느린 것도 19 · 17 · 19에폭이었어요. 정리가 말한 그대로입니다. 그런데 XOR은 —

4

XOR의 벽 — 없다는 것을 어떻게 보이는가

같은 코드에 이름표만 [0, 1, 1, 0]으로 바꿔 넣었습니다. 씨앗 20개 × 2000에폭. 결과는 0개였어요. 스무 번 중 한 번도 멈추지 않았습니다.

더 자세히 들여다보면 이상한 일이 벌어집니다. 씨앗 13으로 2000에폭을 돌리는 동안 가중치를 7,989번이나 고쳤습니다. 쉬지 않고 일한 셈이에요. 그런데 8에폭째의 값 (w₁, w₂, b) = (−0.18, −0.03, +0.07)이 9에폭에서 글자 그대로 다시 나옵니다. 그리고 10에폭에서도, 11에폭에서도. 2000에폭째의 값도 같습니다.

⚠️ '왔다 갔다' 가 아니라 '제자리걸음' 이다

흔히 "XOR에서는 선이 왔다 갔다 한다"고 말하지만, 실제로 재 보면 다릅니다. 네 점을 한 바퀴 도는 동안 밀린 만큼 정확히 되밀려 원래 자리로 돌아옵니다. 주기가 1에폭인 완전한 제자리걸음이에요. 무작위로 흔들리는 것이 아니라, 같은 자리를 영원히 돕니다. 2000에폭 가운데 정확도가 50%였던 에폭이 1,999번, 25%였던 에폭이 딱 1번이었습니다 — 첫 에폭을 뺀 전부입니다.

그러면 학습 규칙이 서툴러서 못 찾는 걸까요, 아니면 애초에 답이 없는 걸까요? 이 둘은 완전히 다른 이야기입니다. 확인해 봅시다.

방법 ① — 다 해 본다

w₁·w₂·b를 각각 −3.00부터 +3.00까지 0.25 간격으로 25개씩 잡으면 조합이 25 × 25 × 25 = 15,625가지입니다. 전부 넣어 보고 네 점을 몇 개 맞히는지 셌어요. 컴퓨터로 0.1초도 걸리지 않습니다.

문제네 점을 다 맞히는 조합가장 잘 맞힌 개수예시
AND286가지4 / 4(+0.25, +0.25, −0.50)
OR650가지4 / 4(+0.25, +0.25, −0.25)
NAND364가지4 / 4(−3.00, −3.00, +3.00)
XOR0가지3 / 4—
격자를 훑은 결과라 "격자 사이에 답이 숨어 있을 수도 있지 않나?"라고 물을 수 있습니다. 그래서 방법 ②가 필요합니다.
⚠️ 가장 잘해야 넷 중 셋이다

XOR에서 슬라이더를 밀다 보면 세 점까지는 맞습니다. 예를 들어 (1.0, 1.0, −0.5)는 출력 [0, 1, 1, 1]을 내서 마지막 (1,1) 하나만 틀립니다 — 정확도 75%예요. "세 개는 맞잖아요"라고 말하고 싶어질 겁니다. 그러니 미리 못박아 둡시다. XOR에서 직선 하나가 낼 수 있는 최고 성적은 4개 중 3개입니다. 그리고 재미있게도, 앞에서 본 학습 규칙은 그 75% 자리에도 앉지 못하고 50%에서 돕니다.

방법 ② — 없다는 것을 증명한다

실험은 "찾지 못했다"까지만 말해 줍니다. "없다"는 논증으로만 보일 수 있어요. 네 점이 모두 맞았다고 가정하고, 그 가정에서 모순이 나오는지 봅니다. step은 z ≥ 0일 때 1을 내므로 조건이 넷 나옵니다.

① (0,0) → 0 :   b < 0
② (0,1) → 1 :   w₂ + b ≥ 0
③ (1,0) → 1 :   w₁ + b ≥ 0
④ (1,1) → 0 :   w₁ + w₂ + b < 0

②와 ③을 더하면 w₁ + w₂ + 2b ≥ 0, 곧 w₁ + w₂ ≥ −2b입니다. 한편 ④에서 w₁ + w₂ < −b이고요. 둘을 이으면

−2b ≤ w₁ + w₂ < −b   →   −2b < −b   →   −b < 0   →   b > 0

그런데 ①은 b < 0이라고 했습니다. 모순입니다. 따라서 네 조건을 동시에 만족하는 (w₁, w₂, b)는 존재하지 않습니다. 격자를 아무리 촘촘하게 해도, 소수점을 아무리 늘려도 없어요. 못 찾은 것이 아니라 없는 것입니다.

AND OR NAND XOR — 안 된다 ↖ 왼쪽 아래가 (0,0), 오른쪽 위가 (1,1) ● 노랑 = 이름표 1    ● 파랑 = 이름표 0    보라 점선 = 뉴런 하나가 만든 경계 XOR은 같은 색 둘이 서로 엇갈린 대각선에 앉아 있다

앞의 셋은 보라 점선 하나로 색이 갈립니다. XOR은 회색 점선 두 개가 서로를 가로지르지요. 직선 하나는 평면을 두 조각으로만 가르는데, 엇갈린 두 짝을 갈라 놓으려면 조각이 셋 이상 필요합니다.

1969년 — 이 지적이 실제로 한 일

마크 I 퍼셉트론 흑백 사진 — 왼쪽 검은 판의 흰 글자 C를 전등 두 개가 비추고, 한 남자가 그 앞의 카메라 장치를 손보고 있으며, 뒤로 배선판과 계기판이 달린 캐비닛들이 서 있다
로젠블랫의 마크 I 퍼셉트론(1960). 전등이 비춘 왼쪽의 글자 C를 가운데 카메라 장치가 들여다본다. 카메라가 받은 400개 광센서의 신호를 가중치로 더해 알파벳을 맞혔다. 가중치는 사람이 적어 넣은 것이 아니라 전동 손잡이가 돌아가며 기계 스스로 조정했다. 오늘 여러분이 슬라이더로 하는 일을 저 기계는 1960년에 하고 있었다. 출처: National Museum of the U.S. Navy, Wikimedia Commons (Public domain)

1958년 로젠블랫의 발표 뒤 기대가 크게 부풀었습니다. "기계가 걷고 말하고 스스로를 의식하게 될 것"이라는 기사가 신문에 실렸어요. 1969년 마빈 민스키와 시모어 페퍼트는 『퍼셉트론즈』라는 책에서 방금 우리가 따라간 것과 같은 논증을 제시했습니다. 뉴런 하나로는 XOR을 풀 수 없다.

그들이 틀린 말을 한 것이 아닙니다. 우리가 방금 증명했듯 정확한 지적이에요. 문제는 그 뒤에 일어난 일이었습니다. 연구비가 끊기고 사람들이 떠났습니다. 1970년대를 통틀어 신경망 연구는 거의 멈추다시피 했고, 이 시기를 첫 번째 AI 겨울이라고 부릅니다.

📖 벽을 넘는 법은 이미 알려져 있었다

사실 XOR을 푸는 방법 자체는 그때도 알고 있었습니다. 뉴런을 여러 개 겹쳐 쌓으면 됩니다. 힌트를 하나 드리자면, XOR은 OR과 NAND를 각각 구한 다음 그 둘을 AND하면 나옵니다. 오늘 여러분이 성공시킬 세 문제가 전부 재료였던 셈이에요.

막힌 것은 다른 데였습니다. 층을 쌓으면 가운데 층의 정답 이름표가 없습니다. 오늘 규칙은 e = t − y로 움직이는데, 가운데 뉴런에는 t가 주어지지 않아요. 무엇을 향해 밀어야 할지 알 수 없습니다. 그 물음에 답한 것이 역전파이고, 널리 알려진 것은 1986년입니다. 다음 14차시에서 바로 그 일을 합니다 — 오늘 실패한 이 네 점을, 같은 데이터를 그대로 써서 풀 거예요.

💻

손으로 ① — 퍼셉트론 저울을 직접 민다

아래 저울은 진짜로 계산합니다. 슬라이더 셋을 밀면 경계선이 그 자리에서 움직이고, 네 점의 가중합 z가 다시 계산되어 표에 찍힙니다. 틀린 점에는 빨간 X가 붙어요.

[⏭ 한 걸음]은 점 하나를 보고 규칙대로 한 번 미는 것, [⏩ 한 에폭]은 네 점을 한 바퀴 도는 것, [🚀 끝까지]는 멈출 때까지(최대 100에폭) 돌리는 것입니다. 자동 학습이 미는 값은 슬라이더에도 그대로 반영됩니다 — 사람이 미는 것과 기계가 미는 것이 같은 손잡이를 잡고 있다는 뜻이에요.

공책을 펴 두세요. 아래 세 과제의 답을 확인 문제에서 다시 묻습니다.

⚖️ 퍼셉트론 저울 — 밀어 보고, 재고, 맡긴다 INTERACTIVE

문제를 고르고 슬라이더 셋을 밀어 네 점을 옳게 갈라 보세요. 노란 반쪽이 켜짐(1), 파란 반쪽이 꺼짐(0)으로 판정되는 자리입니다. 점의 색은 정답이고, 지금 판정과 어긋나면 빨간 X가 붙습니다. 자동 학습은 아래 파이썬 상자의 코드와 같은 규칙 · 같은 씨앗 · 같은 순서로 돕니다 — 그래서 두 곳의 숫자가 정확히 같아야 합니다.

경계선: x₂ = 1.301·x₁ − 0.994  (기울기 1.301 · 절편 -0.994)
(x₁, x₂)z = w₁x₁ + w₂x₂ + b출력 y정답 t판정
에폭0
걸음0
가중치를 고친 횟수0
맞힌 점2 / 4
정확도50.0%
여태 최고50.0%
점 빼기 :
[안내] AND · 씨앗 13 의 무작위 시작 w1 -0.4820 w2 +0.3705 b +0.3682 — 지금 2개를 맞혔습니다.

※ [🚀 끝까지]는 100에폭에서 반드시 끊습니다. XOR은 스스로 멈추지 않기 때문이에요(2000에폭까지 돌려 봐도 안 멈춥니다). 상한에 닿으면 그 사실을 로그에 그대로 적습니다. ※ 씨앗을 0~20 사이로 바꾸면 파이썬 random.seed()와 완전히 같은 시작 가중치가 나옵니다. 아래 파이썬 상자의 출력과 나란히 놓고 대조해 보세요.

💡 과제 — 이 넷을 공책에 적는다
  1. 손으로 AND를 성공시켜라. 정확도가 100.0%가 되는 (w₁, w₂, b)를 슬라이더로 찾아 적는다. 찾았으면 짝의 값과 견주어 보라 — 거의 확실히 다를 것이다. 둘 다 맞는 까닭을 한 문장으로 적어라.
  2. 네 문제를 기계에게 맡겨라. 씨앗 13 · 학습률 0.1에서 AND · OR · NAND · XOR을 각각 [🔄 초기화] 뒤 [🚀 끝까지]로 돌리고, 몇 에폭에 멈췄는지와 가중치를 고친 횟수를 적는다.
  3. XOR을 3분만 붙들어라. 손으로 4/4를 만들어 보고, 가장 잘 나온 정확도를 적는다. 그다음 점 하나를 빼고 [🚀 끝까지]를 눌러 보라. 네 경우 모두 어떻게 되는가?
  4. 학습률을 5.0으로 올려 XOR을 돌려라. 정확도가 어떻게 달라지는가? AND에서는 어떤가?

기록지입니다. 칸을 눌러 직접 적어 보세요(이 표는 저장되지 않으니 공책에도 옮겨 두세요).

문제내가 손으로 찾은 (w₁, w₂, b) 자동 학습이 멈춘 에폭가중치를 고친 횟수최종 정확도
AND
OR
NAND
XOR
ℹ️ 점 하나를 빼면 왜 갑자기 되는가

과제 ③에서 XOR의 점 하나를 빼고 돌리면 네 경우 모두 100%로 학습됩니다(씨앗 13 · 학습률 0.1 기준 (0,0)을 빼면 7에폭, (0,1) 14에폭, (1,0) 4에폭, (1,1) 11에폭).

평면 위의 점 셋은 (한 직선 위에 나란히 놓이지 않는 한) 어떻게 색칠해도 직선 하나로 갈라집니다. XOR이 막히는 것은 네 점이 다 있을 때뿐이에요. "이 알고리즘이 지는 상황"을 여러분이 직접 만들었다가 한 점을 빼서 다시 이기게 한 겁니다. 한계는 알고리즘에만 있는 것이 아니라 데이터의 생김새와의 관계에 있습니다.

💻

손으로 ② — 같은 규칙을 파이썬으로 적어 본다

방금 슬라이더로 민 그 규칙을 코드로 옮깁니다. 아래 상자의 코드에는 ?????로 비워 둔 자리가 열두 곳 있습니다. 종류로 세면 다섯 가지인데, 같은 식이 두 군데에 나오는 것이 있어 열둘이 되었어요. (맨 위 설명글에 보이는 ????? 하나는 안내 문장이니 그냥 두면 됩니다.)

빈칸무엇을 채우나힌트틀리면 어떻게 되나
①step()의 반환값 0 이상이면 1, 아니면 0부등호를 뒤집으면 켜짐과 꺼짐이 통째로 바뀌어 AND가 NAND처럼 보인다
②가중합 입력마다 제 가중치를 곱해 더하고 마지막에 b b를 빼먹으면 경계선이 늘 원점을 지나 AND가 영영 안 배워진다
③오차 e 정답에서 예측을 뺀다 y − t로 쓰면 틀린 반대쪽으로 밀어 영원히 안 멈춘다
④가중치·편향 갱신 w는 오차 × 그 입력, b는 오차만 b에도 * x를 붙이면 (0,0)에서 b가 안 움직여 AND가 안 배워진다
⑤경계선의 기울기와 절편 w₁x₁ + w₂x₂ + b = 0을 x₂에 대해 푼다 부호를 빠뜨리면 선이 거울에 비친 자리로 간다
③과 ④는 train_perceptron() 안에 한 번, 【2】의 한 걸음씩 추적 코드에 한 번, 모두 두 곳에 나옵니다. 두 곳을 똑같이 채워야 출력이 맞습니다.

맨 위 【1】의 HAND 표는 비워 두지 않았습니다. 대신 여러분이 시뮬레이터에서 찾은 값을 그 자리에 적어 넣고 검산해 보세요. 네 줄 중 셋에 '성공'이 뜨면 맞는 값입니다. XOR 줄만은 무엇을 넣어도 '실패'가 뜹니다.

💡 맞게 채웠는지 확인하는 법

【2】의 시작 값이 w1 -0.4820 w2 +0.3705 b +0.3682로 찍히고, 【3】에서 AND 9에폭 · OR 11에폭 · NAND 7에폭 · XOR 못 멈춤이 나오면 정답입니다. 그리고 【8】의 마지막 줄이 XOR 네 점을 다 맞히는 조합 0가지 최고 3/4여야 해요. 시뮬레이터에서 씨앗 13으로 [🚀 끝까지]를 눌렀을 때 나온 숫자와 완전히 같은지 견주어 보세요.

부수어 보기 — 두 가지 실험

코드가 돌아가면 이제 망가뜨릴 차례입니다. 아래 상자는 빈칸이 없어요. 그냥 실행해서 결과를 보고, 그 뒤에 숫자를 바꿔 보세요.

  • [가] XOR에서 점을 하나만 뺀다 — 시뮬레이터의 '점 빼기'와 같은 실험입니다. 네 경우 모두 100%가 나오는 것을 코드로 확인합니다.
  • [나] 시작 가중치를 전부 0으로 둔다 — 무작위 시작보다 오히려 빨라집니다 (AND 9 → 4에폭). 그래도 XOR은 여전히 안 됩니다. 시작 위치가 문제가 아니라는 것을 보여 주는 가장 짧은 실험이에요.
💡 더 바꿔 볼 것

① step의 >=를 >로 바꾸면? 놀랍게도 아무것도 안 바뀝니다(AND 9 · OR 11 · NAND 7에폭 그대로). 이 씨앗에서는 가중합이 정확히 0이 되는 일이 한 번도 없기 때문이에요. 그런데 zero_start=True와 함께 바꾸면 이야기가 달라집니다 — 첫 걸음에서 z = 0이거든요. 직접 확인해 보세요.

② INPUTS의 순서를 뒤집으면? AND가 9에폭에서 11에폭으로 바뀝니다. 그런데 도착한 가중치는 (0.12, 0.17, −0.23)으로 완전히 같아요. 길은 달라도 도착지는 같습니다.

📖

정리 — 오늘 얻은 것

⚖️

뉴런 하나 = 가중합 + 편향 + 활성화

z = w₁x₁ + w₂x₂ + b를 계단 함수에 넣으면 0 아니면 1. w는 그 입력을 얼마나 중요하게 볼 것인가, b는 얼마나 쉽게 켜질 것인가.

📏

가중치가 정하는 것은 직선 하나

경계는 x₂ = (−w₁/w₂)x₁ + (−b/w₂). w₂ = 0이면 세로선 x₁ = −b/w₁. 곧은 경계만 만들 수 있어서 선형 분리기다.

🔁

학습 규칙 — 틀렸을 때만 민다

e = t − y가 0이면 아무것도 안 한다. w ← w + η·e·x, b ← b + η·e. 직선으로 나뉘는 데이터라면 반드시 유한 번에 멈춘다.

🚧

XOR — 없다는 것을 보였다

15,625가지 전수 조사에서 0가지, 최고 3/4. 그리고 네 부등식의 모순으로 존재하지 않음을 증명했다. 학습 규칙은 그 75% 자리에도 못 앉고 50%에서 돈다.

⚠️ 오늘의 결론을 과장하지 말 것

오늘 보인 것은 "뉴런 하나로는 XOR을 못 푼다"입니다. "신경망으로는 못 푼다"가 아닙니다. 실제로 뉴런을 몇 개만 겹쳐도 풀립니다. 1969년의 지적이 연구를 멈춰 세운 것은 지적이 틀려서가 아니라 그 다음 걸음을 아무도 몰랐기 때문이었어요.

그리고 오늘 만든 것은 입력 둘 · 노드 하나짜리 모형입니다. 오늘날의 언어모델은 매개변수가 수천억 개예요. 규모가 아니라 원리를 본 것입니다. 다만 그 원리는 정말로 같습니다 — 지금부터 우리가 하는 일은 이 부품을 겹쳐 쌓고, 미는 방법을 더 똑똑하게 만드는 것뿐입니다.

🔁 되돌아보기

오늘 가중치 셋을 손으로 밀어 경계선을 움직였고, 같은 일을 학습 규칙에게 맡겨 AND를 9에폭 만에 배우게 했다. 그리고 XOR 앞에서는 사람도 기계도 함께 실패했다 — 전수 조사 0가지와 네 부등식의 모순으로 그것이 '없음'임을 확인했다. 다음 14차시에는 이 네 점을 그대로 들고 가서, 층을 하나 더 쌓아 넘는다.

✅

확인 문제

✍️ 문제마다 답을 쓰고 제출하기를 누르세요. 제출하면 모범 답안이 열리고, 제출한 답은 선생님께 전달됩니다.

1. 인공 뉴런 하나가 출력을 정하는 과정을 입력 · 가중치 · 편향 · 활성화 함수라는 말을 모두 써서 순서대로 설명하시오. 그리고 (w₁, w₂, b) = (−1.0, −1.0, +1.5)일 때 입력 (1, 1)에 대한 출력을 계산하시오.
📖 모범 답안

과정 — ① 입력 x₁·x₂가 들어온다. ② 입력마다 제 가중치 w₁·w₂를 곱해 모두 더한다(가중합). ③ 거기에 편향 b를 한 번 더한다 → z = w₁x₁ + w₂x₂ + b. ④ z를 활성화 함수(오늘은 계단 함수)에 넣어 z ≥ 0이면 1, 아니면 0을 내보낸다.

계산 — z = (−1.0)(1) + (−1.0)(1) + 1.5 = −0.5. −0.5 < 0이므로 출력은 0이다. 이 값은 NAND의 (1,1) → 0과 맞다. 실제로 (−1.0, −1.0, +1.5)는 NAND를 네 점 모두 맞히는 값이다.

가중치가 음수라는 것에 주목하자. 입력이 켜질수록 z가 내려간다 — "이 입력이 켜지면 나는 꺼지겠다"는 뜻이다.

2. 가중치 w₁을 키우면 경계선이 어떻게 움직이는가? 편향 b를 키우면? "오른쪽으로 간다" 같은 말이 아니라 식으로 답하시오. 그리고 b만 바꾸었을 때 선의 기울기가 변하지 않는 까닭을 설명하시오.
📖 모범 답안

경계선은 x₂ = (−w₁/w₂)·x₁ + (−b/w₂)이다. 기울기는 −w₁/w₂, y절편은 −b/w₂.

w₁을 키우면 기울기 −w₁/w₂만 변하고 절편은 그대로다. 즉 선이 y절편 점 (0, −b/w₂)를 중심으로 회전한다. b를 키우면 절편 −b/w₂만 변하고 기울기는 그대로다. 즉 선이 기울기를 유지한 채 평행이동한다. b는 x₁·x₂와 곱해지지 않으므로 x₁의 계수에 아무 영향을 주지 못한다 — 그래서 기울기가 안 변한다.

⚠️ "오른쪽으로 간다"는 답이 왜 안 되는가. w₂가 음수이면 −b/w₂의 부호가 뒤집혀 반대쪽으로 움직인다. 방향은 w₂의 부호에 달려 있으므로, 식으로만 정확히 말할 수 있다. 그리고 w₂ = 0이면 위 식 자체를 쓸 수 없고 세로선 x₁ = −b/w₁이 된다.

3. [오늘 한 것] 시뮬레이터에서 AND를 성공시킨 (w₁, w₂, b)를 하나 적고, 네 점 각각의 z를 손으로 계산해 정말 [0, 0, 0, 1]이 나오는지 검산하시오. 짝이 적은 값과 다를 텐데, 둘 다 맞는 까닭을 쓰시오.
📖 모범 답안

검산 예 — (1.0, 1.0, −1.5)로 하면 z(0,0) = −1.5 → 0, z(0,1) = −0.5 → 0, z(1,0) = −0.5 → 0, z(1,1) = +0.5 → 1. 출력 [0, 0, 0, 1]로 AND의 이름표와 같다.

다른 값도 맞는 까닭 — AND를 맞히는 조건은 "(1,1)만 선의 켜짐 쪽에 있고 나머지 셋은 꺼짐 쪽에 있다"이다. 그 조건을 만족하는 직선은 무수히 많다. (1,1)과 나머지 셋 사이에 선이 지나갈 넉넉한 틈이 있기 때문이다. 전수 조사에서도 0.25 간격 격자만으로 286가지가 나왔다.

참고로 씨앗 13으로 자동 학습을 돌리면 (+0.12, +0.17, −0.23)에 도착한다. 사람이 고른 값과 전혀 다르지만 역시 4/4다. 정답은 점이 아니라 띠다.

4. [오늘 한 것] 퍼셉트론 학습 규칙은 언제 가중치를 바꾸고 언제 그대로 두는가? 그리고 시뮬레이터에서 씨앗 13 · 학습률 0.1로 네 문제를 [🚀 끝까지] 돌렸을 때 나온 에폭 수와 가중치를 고친 횟수를 표로 적으시오. XOR은 왜 다른가?
📖 모범 답안

언제 바꾸나 — 그 점의 예측 y가 정답 t와 다를 때만. 그때 e = t − y가 +1 또는 −1이 되어 w ← w + η·e·x, b ← b + η·e로 민다. 맞혔으면 e = 0이라 세 값 모두 그대로 둔다. 또 하나 — 틀렸더라도 그 점의 x₁ = 0이면 η·e·x₁ = 0이라 w₁은 움직이지 않는다.

문제멈춘 에폭고친 횟수최종 정확도
AND918100.0%
OR1116100.0%
NAND711100.0%
XOR100에폭에서 끊김38950.0%

XOR이 다른 까닭 — 멈춤 조건은 "한 에폭 동안 한 번도 안 틀림"이다. XOR에는 네 점을 다 맞히는 (w₁, w₂, b)가 존재하지 않으므로 그 조건이 영영 성립하지 않는다. 389번이나 고쳤지만 8에폭째의 값이 9에폭에서 그대로 다시 나오는 주기 1에폭짜리 제자리걸음이었다. 그래서 상한 100에폭에서 사람이 끊어 준 것이다.

5. XOR의 네 점을 좌표평면에 찍고, 직선 하나로 나눌 수 없음을 그림과 부등식 논증 두 가지로 보이시오. 또 "그래도 세 개는 맞잖아요"라는 반문에 어떻게 답할지 쓰시오.
📖 모범 답안

그림 — 이름표 1인 (0,1)·(1,0)을 한 색으로, 0인 (0,0)·(1,1)을 다른 색으로 칠하면 같은 색끼리 서로 엇갈린 대각선에 놓인다. 두 대각선은 서로를 가로지르므로, 직선 하나가 만드는 두 반쪽 중 어느 쪽에 한 대각선을 넣어도 다른 대각선이 반드시 갈라진다.

논증 — 네 점이 다 맞았다고 가정하면 ① b < 0 ② w₂ + b ≥ 0 ③ w₁ + b ≥ 0 ④ w₁ + w₂ + b < 0. ②+③에서 w₁ + w₂ ≥ −2b, ④에서 w₁ + w₂ < −b이므로 −2b < −b, 곧 b > 0. ①과 모순이다. 그러므로 그런 (w₁, w₂, b)는 존재하지 않는다.

반문에 대한 답 — 맞다. 세 개까지는 맞힐 수 있다. 예를 들어 (1.0, 1.0, −0.5)는 출력 [0, 1, 1, 1]로 3/4, 즉 75%다. 전수 조사 15,625가지에서도 최고 성적이 3/4였다. 문제는 그 3/4가 천장이라는 것이다. 넷 중 하나는 원리적으로 반드시 틀린다. 게다가 학습 규칙은 그 75% 자리에도 앉지 못하고 50%에서 돈다.

6. XOR을 풀려면 무엇이 더 있어야 할지 자기 말로 예상해 보시오. 힌트 둘을 준다 — ⑴ XOR은 OR과 NAND를 각각 구한 뒤 그 둘을 AND하면 나온다. ⑵ 오늘 우리는 특성을 둘만 썼다.
📖 모범 답안

길 ① 뉴런을 겹쳐 쌓는다. 힌트 ⑴대로 뉴런 두 개가 각각 OR과 NAND를 맡고, 그 두 출력을 받는 세 번째 뉴런이 AND를 하면 XOR이 나온다. 오늘 세 문제를 성공시킨 것이 그대로 재료가 된다. 가운데에 들어가는 층을 은닉층이라고 부른다. 다만 문제가 하나 생긴다 — 가운데 뉴런에는 정답 이름표 t가 없다. 무엇을 향해 밀지 모르니 오늘 규칙을 그대로 쓸 수 없다. 이 물음에 답하는 것이 역전파이고, 다음 14차시의 주제다.

길 ② 특성을 하나 더 만든다. 힌트 ⑵대로 x₃ = x₁ × x₂라는 새 특성을 덧붙여 보자. (w₁, w₂, w₃, b) = (1, 1, −2, −0.5)로 두면 z가 차례로 −0.5 · +0.5 · +0.5 · −0.5가 되어 출력이 [0, 1, 1, 0] — 네 점 모두 맞는다. 직선은 여전히 하나인데, 공간을 3차원으로 늘리자 평면 하나로 갈라진 것이다. 6차시에서 좋은 특성을 고르는 일을 다룬 까닭이 여기 있다. 나중에 서포트 벡터 머신의 '커널'이 이 발상을 밀고 나간다.

두 길은 사실 같은 이야기다. 은닉층이 하는 일이 바로 데이터를 직선으로 나뉘는 모양으로 옮겨 놓는 것이기 때문이다.

🔎

더 알아보기

오늘의 뉴런 하나를 조금 다르게 보는 법, 그리고 1958년과 1969년에 실제로 있었던 일

편향 b = 늘 1이 들어오는 입력선의 가중치 1 x₀ (늘 1) x₁ x₂ w₀ = b w₁ w₂ Σ 계단 → y z = w₀·1 + w₁·x₁ + w₂·x₂ = Σ wᵢ·xᵢ 갱신식도 한 줄로 — wᵢ ← wᵢ + η·e·xᵢ
원리 더 깊이

편향은 특별하지 않다 — '늘 1인 입력' 하나를 더하면

오늘 코드에서는 b만 따로 떼어 다루었습니다. 가중치 갱신은 w += lr * e * x인데 편향만 b += lr * e로 모양이 달랐지요. 그런데 입력 목록 맨 앞에 언제나 1인 가짜 입력 x₀ = 1을 끼워 넣고, 거기 붙는 가중치를 w₀라고 부르면 사정이 달라집니다.

그림처럼 가중합은 z = w₀·1 + w₁x₁ + w₂x₂, 곧 모든 항이 '가중치 × 입력'인 한 가지 모양이 됩니다. 갱신식도 wᵢ ← wᵢ + η·e·xᵢ 한 줄로 끝나요. i = 0일 때는 x₀ = 1이라 w₀ ← w₀ + η·e가 되는데, 이것이 정확히 오늘의 b ← b + η·e입니다. 개념 1의 도해에서 편향을 노란 점선의 입력선으로 그린 까닭이 이것이에요.

이 요령은 실제 라이브러리에서도 흔히 씁니다. 입력을 벡터로, 가중치를 벡터로 두면 가중합이 두 벡터의 내적 한 번으로 계산되기 때문입니다. 뉴런이 수백만 개가 되어도 "입력 벡터 · 가중치 벡터 → 활성화"라는 모양은 그대로이고, 컴퓨터는 이 곱셈과 덧셈을 한꺼번에 처리하도록 만들어져 있습니다.

로젠블랫의 1958년 그림 두 장 — 위는 망막에서 운동 피질까지 이어지는 뇌의 조직, 아래는 감각점 판에서 무작위 연결을 거쳐 연합 단위 판, 그리고 반응 단위 R1·R2·Rn으로 이어지는 퍼셉트론의 조직이며, 글자 X에 반응한 칸이 빨갛게 칠해져 있다
오해 바로잡기

로젠블랫의 퍼셉트론은 뉴런 하나가 아니었다 — 배우는 층이 하나였을 뿐

그림은 로젠블랫이 1958년에 발표한 자료에 실은 것입니다. 위(FIG. 1)는 뇌, 아래(FIG. 2)는 퍼셉트론이에요. 빨간 점은 글자 X를 보았을 때 반응한 칸입니다. 퍼셉트론 쪽을 보면 감각점 판 → 연합 단위(A-units) → 반응 단위(R)로 층이 여럿이고, 감각점에서 연합 단위로 가는 선에는 Random Connections(무작위 연결)라고 적혀 있습니다.

본문의 마크 I도 이 설계를 따랐습니다. 400개 광센서가 500개가 넘는 연합 단위에 무작위로, 고정된 채 배선되었고, 학습으로 움직인 것은 연합 단위에서 반응 단위로 가는 가중치뿐이었어요. 그러니 반응 단위 하나하나는 오늘 우리가 만든 뉴런과 똑같은 일 — 입력마다 가중치를 곱해 더하고 문턱과 견주기 — 을 한 셈입니다. 입력이 둘이 아니라 수백 개였다는 점만 다릅니다.

여기서 확인 문제 6의 '길 ②'가 보입니다. 무작위 연합 단위는 새 특성을 만들어 주는 장치예요. 운 좋게 x₁ × x₂와 비슷한 일을 하는 단위가 생기면 XOR도 갈라집니다. 하지만 필요한 특성이 생긴다는 보장이 없고, 그 층은 배워서 고칠 수도 없었습니다. 1969년의 비판이 겨냥한 것도 바로 이 점, 학습하는 층이 하나뿐이라는 한계였습니다.

그림: 뇌와 퍼셉트론의 조직(Rosenblatt, 1958) · 출처: Rosenblatt, F., Wikimedia Commons (Public domain)

안경을 쓴 노년의 마빈 민스키가 고개를 숙여 아래를 내려다보는 옆모습
역사

겨울은 왜 그렇게 길었나 — 옳은 지적과 모자랐던 세 가지

사진은 노년의 마빈 민스키(1927~2016)입니다. MIT에서 인공지능 연구의 터를 닦은 사람 가운데 하나로, 1969년 시모어 페퍼트와 함께 『퍼셉트론즈』를 썼습니다. 이 책은 XOR 하나만 다룬 것이 아니라, 퍼셉트론이 어떤 성질은 판정할 수 있고 어떤 성질은 판정하기 어려운지를 수학으로 따졌어요. 예를 들어 그림 속 도형이 한 덩어리로 이어져 있는지처럼 그림 전체를 함께 봐야 알 수 있는 성질이 그렇습니다.

"층을 쌓으면 될 것 같다"는 생각은 그때도 있었습니다. 그런데 세 가지가 함께 막혀 있었어요. ① 학습 방법 — 가운데 층에는 정답 이름표가 없어 오늘의 규칙을 쓸 수 없었고, 역전파가 널리 알려진 것은 1986년입니다. ② 계산 — 마크 I은 가중치를 전동 손잡이로 돌렸습니다. 층을 쌓아 늘어나는 곱셈을 감당할 기계는 2010년대에 그래픽카드(GPU)가 신경망 학습에 쓰이면서야 갖춰집니다. ③ 데이터 — 가중치가 많을수록 데이터도 많이 필요한데(11차시의 과적합), 인터넷 이전에는 모을 길이 없었습니다.

그러니 겨울이 길었던 것은 아이디어가 틀려서가 아니라 아이디어를 받쳐 줄 나머지가 갖춰지지 않아서였습니다. 로젠블랫은 1971년 사고로 세상을 떠나 반론을 이어 가지 못했어요. 기술의 역사에서는 이처럼 옳은 비판과 모자란 도구가 겹칠 때 한 분야가 오래 멈추곤 합니다.

사진: 마빈 민스키 · 출처: Joi, Wikimedia Commons (CC BY 2.0)