💻
손으로 ② — 같은 규칙을 파이썬으로 적어 본다
방금 슬라이더로 민 그 규칙을 코드로 옮깁니다.
아래 상자의 코드에는 ?????로 비워 둔 자리가 열두 곳 있습니다.
종류로 세면 다섯 가지인데, 같은 식이 두 군데에 나오는 것이 있어 열둘이 되었어요.
(맨 위 설명글에 보이는 ????? 하나는 안내 문장이니 그냥 두면 됩니다.)
| 빈칸 | 무엇을 채우나 | 힌트 | 틀리면 어떻게 되나 |
| ① | 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)으로 완전히 같아요.
길은 달라도 도착지는 같습니다.