머신러닝
기초
규칙을 적는 대신 데이터에서 배우게 한다 — 그 발상의 전환에서 시작해, 모델을 믿기 전에 반드시 통과해야 할 관문(혼동행렬·베이즈), 그리고 최초의 배우는 기계 퍼셉트론까지.
규칙으로 적을 수 없는 문제
갈색 머핀을 위에서 찍은 사진과 치와와의 얼굴 사진은, 섬네일 크기에서는 사람도 순간 헷갈린다. 이제 이 둘을 구별하는 프로그램을 "규칙으로" 짜 본다고 하자. IF 갈색이면? 둘 다 갈색이다. IF 눈이 있으면? 머핀의 초코칩이 눈처럼 보인다.
앞 장의 전문가 시스템이라면 여기서 막힌다. 전문가조차 자기가 어떻게 구별하는지 설명하지 못하기 때문이다 — 지식 획득 병목의 전형이다. 머신러닝의 제안은 발상을 뒤집는다. 구별 규칙을 적지 말고, 정답이 달린 사진 수천 장을 주고 규칙을 스스로 찾게 하자.
이 뒤집기가 이 장의 전부다. 다만 공짜는 아니다 — 규칙을 포기하는 대신 우리는 새 의무를 진다. 배운 것이 정말 맞는지 평가하는 의무다.
프로그램을 짜지 말고, 가르쳐라
머신러닝은 마법이 아니라 역할 교대다 — 규칙이 입력에서 산출물로 자리를 옮긴다.
무엇이 입력이고 무엇이 산출물인가
전통적 프로그래밍은 사람이 적은 규칙과 데이터를 넣어 답을 얻는다. 머신러닝은 데이터와 답(레이블)을 넣어 규칙(모델)을 얻는다.
이 구도가 앞 장(전문가 시스템)의 병목을 정확히 겨냥한다. 전문가 면담으로 규칙을 뽑는 대신, 전문가가 남긴 판단 기록(데이터)에서 규칙을 재구성한다. 다만 병목이 사라진 것이 아니라 옮겨 갔다는 점을 기억하자 — 좋은 규칙은 이제 좋은 데이터에서 나오고, 좋은 데이터를 모으고 정제하는 일이 실무 머신러닝의 대부분을 차지한다.
생각해 볼 질문 — 회사에 10년 치 대출 심사 기록이 있다. 이 데이터로 배운 모델은 무엇을 배우는가 — "올바른 심사"인가, "그동안의 심사 관행"인가?
머신러닝 = 함수 근사
머신러닝은 언제나 입력을 받아 출력을 내는 함수 y = f(x)를 학습한다. 이 한 문장에 필요한 어휘는 셋뿐이다.
학습(train): (x, y) 쌍으로 f를 만드는 것 · 예측(predict): 학습된 f에 새 x를 넣는 것
"근사(approximation)"라는 단어의 무게를 놓치지 말자. 진짜 함수 f는 아무도 모른다 — 우리는 유한한 샘플로 f를 흉내 내는 것뿐이다. 그래서 학습 데이터에 없던 입력에서 틀릴 가능성은 원리적으로 제거되지 않는다. 2장에서 본 "열린계에서는 학습하지 않은 질문에도 답해야 한다"는 문제, 그리고 LLM의 환각이 모두 이 "근사"라는 단어 안에 이미 들어 있다.
생각해 볼 질문 — 스팸 필터의 특징으로 "발신 시각"을 넣는 것이 좋은 생각일까? 어떤 데이터가 있으면 판단할 수 있는가?
언제 머신러닝을 쓰는가
경우의 수가 너무 많아 명시적 알고리즘을 설계하기 어렵거나 불가능할 때 — 교재가 꼽는 세 가지 이점이 모두 이 조건에서 나온다.
- 프로그래밍 시간 단축 — 맞춤법 교정기를 규칙으로 짜면 수년, 예제 학습이면 훨씬 빠르다.
- 맞춤형 확장 — 한국어 교정기를 30개국 언어로 늘릴 때, 규칙은 언어마다 다시 짜야 하지만 학습은 각 언어의 데이터로 확장된다.
- 사람이 알고리즘을 모르는 문제 — 얼굴 인식처럼 사람이 특징을 명시하지 못하는 문제도, 모델이 데이터에서 특징을 스스로 찾아 풀 수 있다.
규칙이 유한하고 명확하며 바뀌지 않는 문제(세금 계산, 학점 산출)에 머신러닝을 쓰는 것은 손해다 — 3장의 규칙 기반이 더 싸고, 더 정확하고, 설명 가능하다. 도구 선택의 기준은 유행이 아니라 그 문제의 규칙을 적을 수 있는가다.
교사가 있는가, 없는가, 늦게 오는가
학습 방식의 분류 기준은 알고리즘이 아니라 "정답이 어떤 형태로 주어지는가"다.
회귀와 분류 — 출력의 모양이 가른다
지도학습은 정답을 알려주는 교사가 있는 학습이다. 출력 y가 연속 실수면 회귀, 이산적인 클래스면 분류다.
경계는 생각보다 부드럽다. "클릭 확률 예측"은 확률(실수)을 내므로 회귀처럼 보이지만, 0.5를 기준으로 자르면 분류가 된다. 실무 분류 모델 대부분이 내부적으로는 각 클래스의 점수(실수)를 계산한 뒤 가장 큰 것을 고른다 — 10주차의 소프트맥스가 정확히 그 장치다. "회귀인가 분류인가"는 모델의 속사정이 아니라 최종 출력을 무엇으로 쓰는가의 문제로 이해하는 것이 안전하다.
생각해 볼 질문 — "학점(A+~F) 예측"은 회귀인가 분류인가? 두 방식 각각의 장단점은?
교사가 없을 때, 그리고 늦게 올 때
레이블 없이 데이터의 구조를 스스로 찾으면 비지도학습, 행동의 결과로 보상·처벌이 (때로 한참 뒤에) 돌아오면 강화학습이다.
세 방식은 배타적 분류라기보다 데이터 상황에 따른 대응이다. 레이블을 만드는 비용이 클 때(의료 영상 판독은 전문의 시간이 든다) 비지도·자기지도 학습으로 레이블 없이 배울 수 있는 만큼 배우고, 소량의 레이블로 마무리하는 전략이 흔하다. M2에서 본 LLM 사전학습("다음 단어 맞히기")도 사람이 레이블을 달지 않았다는 점에서 자기지도 학습의 대표 사례다.
생각해 볼 질문 — 배달 앱의 "주문 후 재주문까지의 행동 로그"만 있다면, 세 방식 중 무엇으로 무엇을 배울 수 있을까?
파이프라인 — 콜라와 주스
머신러닝 프로젝트는 여섯 단계의 절차다 — 그리고 그중 가장 중요한 결정은 "시험 문제를 미리 떼어 두는 것"이다.
음료 판별기를 만드는 순서
콜라인지 주스인지 판별하는 모델을 만들어 달라는 요청을 받았다고 하자. 데이터 수집부터 평가까지, 순서가 정해져 있다.
- 데이터 수집 — 콜라·주스 샘플을 모은다.
- 특징 선택 — 색상(파장)과 산성도 두 가지로 구별되기를 기대한다.
- 데이터 분할 — 훈련:테스트 = 80:20 (또는 70:30).
- 모델 선택 — 특징이 둘뿐이니 단순한 선형 모델 y = Wx + b.
- 학습 — W, b를 임의값으로 시작해, 예측과 정답의 차이만큼 조정을 반복한다.
- 평가·예측 — 떼어 둔 테스트 데이터로 평가하고, 통과하면 새 질문("색상 600nm, 산성도 1.5는?")에 답하게 한다.
왜 굳이 데이터를 떼어 두는가 — 학습 데이터에서 낸 성적은 "본 문제를 다시 푼 성적"이라 실력을 말해 주지 않기 때문이다. 족보를 통째로 외운 학생이 족보 문제는 만점을 받아도 새 문제 앞에서 무너지는 것과 같다. 모델이 새 데이터에서도 통하는 성질을 일반화(generalization)라 부르고, 테스트 세트는 일반화를 재는 유일하게 정직한 자다. 9주차에서 이 문제를 과대적합이라는 이름으로 다시 만난다.
생각해 볼 질문 — 테스트 성적을 보고 모델을 다시 고치는 일을 반복하면, 테스트 세트는 어떤 의미에서 "오염"되는가?
정확도만으로는 아무것도 모른다
모델의 성적표는 숫자 하나가 아니라 표 하나다 — 혼동행렬의 네 칸이 네 가지 다른 이야기를 한다.
네 칸의 성적표
이진 분류의 결과는 "맞았다/틀렸다"가 아니라 네 가지다. 무엇을 무엇으로 예측했는지에 따라 오류의 의미가 완전히 다르기 때문이다.
표기 실수를 막는 요령: 항상 예측을 먼저 읽는다. "Positive로 예측했다 → 그 예측이 False였다 → FP → 실제로는 음성인데 양성 판정". 시험에서도 실무에서도 FN과 FP를 뒤바꾸는 실수가 가장 흔하다. 민감도(sensitivity)는 실제 양성 중 잡아낸 비율(=재현율), 특이도(specificity)는 실제 음성 중 음성으로 판정한 비율 — 의학 통계의 용어이며 다음 파트 베이즈 계산의 입력이 된다.
생각해 볼 질문 — 공항 보안 검색대에서 FN과 FP는 각각 무엇인가? 어느 쪽 비용이 큰가?
정확도 · 정밀도 · 재현율 · F1
네 칸을 조합하면 지표가 나온다. 각 지표는 "무엇을 중시하는가"가 다르므로, 하나만 보고 모델을 고르면 반드시 함정에 빠진다.
정밀도 = TP / (TP+FP) — 양성이라 한 것 중 진짜 양성
재현율 = TP / (TP+FN) — 실제 양성 중 잡아낸 비율 (=민감도)
F1 = 2·정밀도·재현율 / (정밀도+재현율) — 둘의 조화평균
혼동행렬 → 4대 지표
한 줄 목표: 네 칸의 숫자에서 지표 4개를 직접 산출하는 손을 만든다. 시험에서는 이 계산을 손으로 해야 한다 — 계산기로 먼저 감을 잡자.
조작: FN을 0으로 두고 FP를 크게 키워 보자(양성 남발 모델). 이어서 반대로 FP를 0으로 두고 FN을 크게 키워 보자(신중한 모델). 관찰 포인트: 첫째 경우 재현율은 100%인데 정밀도가 무너지고, 둘째 경우 그 반대가 되는 것 — 두 지표가 시소 관계임이 보이면 성공이다.
"정확도 99%면 좋은 모델이다" — 1,000명 중 환자가 10명인 데이터에서 "모두 정상"이라고만 답하는 모델의 정확도는 99%다. 환자를 한 명도 찾지 못했는데도 그렇다(재현율 0%). 클래스가 불균형할수록 정확도는 공허해진다 — 그래서 혼동행렬을 통째로 보고하는 것이 원칙이다.
어느 지표를 고를지는 오류의 비용표에서 나온다. 암 선별 검사는 놓침(FN)이 치명적이므로 재현율을, 스팸 필터는 정상 메일 오분류(FP)가 치명적이므로 정밀도를 우선한다. F1은 둘을 하나로 요약하지만 비용의 비대칭은 반영하지 못한다 — 요약 지표는 보고용이고, 설계 결정은 언제나 FN·FP 각각의 비용으로 돌아가서 내린다.
생각해 볼 질문 — 자율주행차의 보행자 감지에서 재현율 100%를 만들려면 어떻게 해야 하는가? 그 대가는 무엇인가?
검사가 양성이면 병에 걸린 것인가
민감도 90% 검사에서 양성이 나와도, 병일 확률은 10%가 안 될 수 있다 — 사전 확률을 빼먹으면 반드시 틀린다.
증거로 믿음을 갱신하는 공식
베이즈 정리는 "주장에 대한 신뢰도를, 새 증거를 본 뒤 얼마로 고쳐야 하는가"를 계산한다. H는 가설(병에 걸렸다), E는 증거(검사 양성)다.
사후 확률 = 우도 × 사전 확률 / 증거의 확률
P(H): 증거를 보기 전 신뢰도 (유병률) · P(H|E): 증거를 본 뒤 갱신된 신뢰도
이 공식이 획기적인 이유는 통계를 고정된 빈도가 아니라 갱신되는 믿음으로 다루기 때문이다. 새 정보가 올 때마다 사후 확률이 다음 계산의 사전 확률이 된다 — 스팸 필터가 메일 단어 하나하나를 증거로 믿음을 갱신해 가는 방식이 정확히 이것이다.
3장에서 본 규칙 기반 확신도(매칭 비율)와의 차이가 여기서 분명해진다. 확신도는 사전 확률(그 병이 얼마나 흔한가)을 반영하지 않지만 베이즈는 이를 강제로 반영한다. 희귀병과 감기가 같은 증상 매칭률을 보일 때, 베이즈는 "그래도 감기일 확률이 압도적"이라고 올바르게 답한다.
생각해 볼 질문 — "어제도 해가 떴으니 내일도 뜬다"는 추론을 베이즈의 언어(사전 확률, 증거, 갱신)로 다시 써 보자.
양성인데 병일 확률 9% — 유병률의 힘
인구 1%가 걸리는 병. 검사는 환자의 90%를 잡아내고(민감도), 건강한 사람의 91%를 음성으로 판정한다(특이도). 당신이 양성 판정을 받았다면, 병일 확률은?
- 10,000명을 상상하자. 병에 걸린 사람은 1% = 100명.
- 환자 100명 중 양성 = 90명 (TP). 놓친 10명 (FN).
- 건강한 9,900명 중 9%가 잘못 양성 = 891명 (FP).
- 양성은 총 90 + 891 = 981명. 그중 진짜 환자는 90명 → P(병|양성) = 90/981 ≈ 9.2%.
유병률·민감도·특이도 → 양성일 때 병일 확률
한 줄 목표: 사전 확률(유병률)이 결과를 지배한다는 것을 숫자로 확인한다.
조작: 유병률을 0.1%로 내려 보자 — 같은 검사인데 양성의 의미가 1% 수준으로 추락한다. 반대로 유병률 20%(유행기)로 올리면? 관찰 포인트: 검사 성능(민감도·특이도)을 그대로 두고 유병률만 바꿔도 P(병|양성)이 열 배 넘게 출렁이는 것이 보이면 성공이다. 의사가 "위험군인지"부터 묻는 이유가 이것이다.
이 역설은 사람의 직관이 우도 P(양성|병)와 사후 확률 P(병|양성)을 뒤바꾸는 데서 온다 — "환자의 90%가 양성"과 "양성의 90%가 환자"는 완전히 다른 문장이다. 법정에서도 같은 혼동이 "검사의 오류율은 1%이므로 피고인이 무죄일 확률은 1%"라는 형태로 나타나며, 여기에는 검사의 오류(prosecutor's fallacy)라는 이름이 붙어 있다.
생각해 볼 질문 — 양성이 나온 사람에게 같은 검사를 독립적으로 한 번 더 해서 또 양성이면, 확률은 어떻게 갱신되는가? (힌트: 1차 사후 확률이 2차 사전 확률)
퍼셉트론 — 최초의 배우는 기계
오차가 있으면 오차의 방향으로 가중치를 옮긴다 — 이 한 줄의 규칙이 학습의 시작이고, 직선 하나라는 한계가 그 끝이었다.
가중합, 임계값, 계단 함수
1957년 로젠블랫이 고안한 퍼셉트론은 생물학적 뉴런을 느슨하게 본뜬 계산 소자다. 입력의 가중합이 임계값을 넘으면 1, 아니면 0을 출력한다.
신경망 계열의 두 가지 근본 장점이 퍼셉트론에서 이미 보인다. 첫째, 데이터만 주면 예제로부터 배운다 — 프로그램을 짤 필요가 없다. 둘째, 소자 몇 개가 오동작해도 전체는 크게 무너지지 않는다(분산 표현의 강건함). 1장에서 본 1958년의 과열 보도("스스로 걷고 말하게 될 기계")도 이 장점이 실제로 놀라웠기 때문에 나왔다.
생각해 볼 질문 — 계단 함수 대신 "부드러운 계단"(시그모이드)을 쓰면 무엇이 가능해지는가? (9주차 역전파의 복선이다)
출처 Rosenblatt, "The Perceptron: A Probabilistic Model", Psychological Review 65(6), 1958: doi.org
틀린 만큼, 틀린 방향으로
학습이라 부르려면 가중치를 스스로 정하는 알고리즘이 있어야 한다. 퍼셉트론의 규칙은 놀랄 만큼 단순하다 — 샘플 하나를 예측해 보고, 틀렸으면 고친다.
W ← W + η · e · x — η(학습률)만큼, 오차 방향으로, 입력에 비례해 조정
AND 데이터(정답: 둘 다 1일 때만 1)에 이 규칙을 적용하면, W=[0,0,0]에서 시작해 몇 에폭 만에 W=[0.4, 0.2, −0.4]로 수렴하고 4개 입력을 전부 맞힌다. 아래 실습이 그 전 과정을 한 샘플씩 보여 준다.
이 규칙이 시험에 나오는 형태: "η=0.2, 초기 가중치 0으로 AND를 1 에폭 학습시켜라. 각 샘플 처리 후의 W를 쓰라." 손계산 요령은 두 가지다 — ① 예측이 맞으면(e=0) 아무것도 바뀌지 않는다. ② 틀렸을 때만 W에 η·e·x를 더하는데, x의 성분이 0인 자리는 바뀌지 않는다. 바이어스 자리는 x가 항상 1이므로 틀릴 때마다 반드시 η·e만큼 움직인다.
생각해 볼 질문 — 학습률 η를 10배 키우면 학습은 빨라지는가? 무엇이 위험해지는가?
학습을 한 샘플씩 따라가기
교재의 numpy 코드가 출력하는 epoch 로그를 브라우저에서 재현한다. 샘플이 하나씩 처리될 때마다 결정 경계선이 움직이는 것을 본다.
퍼셉트론 학습 시뮬레이터 (η=0.2, W 초기값 0)
한 줄 목표: 학습 규칙 W += η·e·x 가 실제로 경계선을 옮기는 과정을 관찰하고, XOR에서는 그 규칙이 영원히 헤매는 것을 확인한다.
조작: AND에서 [1 에폭 실행]을 수렴할 때까지 누르고(가중치 변화가 멈춘다), XOR로 바꿔 같은 조작을 반복해 보자. 관찰 포인트: AND는 W=[0.4, 0.2, −0.4]에서 멈추고 경계선이 4점을 정확히 가르는 반면, XOR은 에폭을 아무리 돌려도 가중치가 순환하며 3개까지만 맞힌다 — "더 정밀한 조정의 문제가 아니라 해가 없는 문제"임이 보이면 성공이다.
같은 것을 numpy로 — 교재 코드 정리판
실습 시간에 직접 돌린다. sklearn 한 줄 버전과 결과가 같은지 비교하는 것까지가 과제다.
XOR의 벽 — 직선 하나의 한계
퍼셉트론이 그을 수 있는 것은 직선 하나다. AND와 OR는 직선으로 갈라지지만, XOR의 네 점은 어떤 직선으로도 갈라지지 않는다.
"XOR 문제가 신경망 연구를 죽였다" — 1장에서 바로잡았듯, 민스키·페퍼트의 증명(1969)은 단층의 한계를 밝힌 것이었고 다층의 가능성 자체를 부정하지 않았다. 침체는 증명 하나 때문이 아니라 다층을 학습시킬 방법의 부재, 그리고 자금과 기대의 붕괴가 겹친 결과였다.
출처 Minsky & Papert, Perceptrons, MIT Press, 1969: mitpress.mit.edu
이 자료가 바로잡은 세 가지
머신러닝 입문에서 가장 비싸게 치르는 오해들.
기억해 둘 세 문장
- 머신러닝은 함수 근사이고, 근사는 반드시 틀릴 수 있다. 그래서 테스트 데이터를 미리 떼어 두는 절차가 알고리즘 선택보다 중요하다.
- 정확도는 성적표가 아니라 성적표의 한 칸이다. 클래스가 불균형하면 정확도 99%도 공허하다 — 혼동행렬 전체와 FN·FP의 비용으로 판단한다.
- 양성 판정과 병일 확률은 다르다. 사전 확률(유병률)을 곱하지 않은 확률 판단은 반드시 틀린다 — P(E|H)와 P(H|E)를 뒤바꾸지 말 것.
퍼셉트론이 멈춘 자리 — 층을 쌓으면 XOR이 풀리지만, 쌓은 층을 학습시킬 방법이 없었다. 다음 장 신경망과 역전파는 그 방법(체인룰의 조립)을 손으로 계산할 수 있을 때까지 분해한다. 기말고사의 계산그래프 문제가 그 종착지다.
참고문헌
공개 원문 우선. 링크는 2026년 8월 확인 기준.
1차 문헌
- Rosenblatt, F. (1958). The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain. Psychological Review, 65(6), 386–408. doi.org/10.1037/h0042519
- Minsky, M., & Papert, S. (1969). Perceptrons: An Introduction to Computational Geometry. MIT Press. mitpress.mit.edu
- Bayes, T. (1763). An Essay towards Solving a Problem in the Doctrine of Chances. Philosophical Transactions, 53, 370–418. doi.org/10.1098/rstl.1763.0053
교재 · 도구 문서
- 천인국 (2023). 인공지능: 파이썬으로 배우는 머신러닝과 딥러닝 (2판). 인피니티북스. — 5·7주차 강의 교재. 파이프라인·퍼셉트론 코드의 원전.
- scikit-learn. Perceptron — API Reference. scikit-learn.org
퍼셉트론 학습 결과(W=[0.4, 0.2, −0.4])는 교재 코드와 동일한 처리 순서·초기값·학습률을 브라우저 시뮬레이터로 재현해 확인한 값이다. 베이즈 카드의 수치(유병률 1%, 민감도 90%, 특이도 91%)는 교육용 가상 설정이다.