Skip to main content

모델은 어떻게 배우는가

Views 9약 9분생성형 AI 활용

머신러닝을 처음 배울 때 가장 헷갈리는 순간은 바로 여기입니다. "그래서 모델은 도대체 어떻게 배우는 건데?" 라이브러리 한 줄로 학습은 시작되지만, 그 한 줄 뒤에서 무슨 일이 일어나는지 감이 없으면 모델을 다루는 사람이 아니라 버튼을 누르는 사람이 되기 쉽습니다.

이 장에서는 수식을 앞세우지 않고, 모델 학습의 핵심 장면을 머릿속에 그릴 수 있도록 설명해 보겠습니다. 입력이 들어오고, 모델이 예측을 만들고, 틀린 정도를 계산하고, 조금씩 수정해 가는 과정입니다. 이 흐름이 보이기 시작하면 알고리즘 이름보다 더 중요한 감각이 생깁니다. 바로 모델을 설계하는 감각입니다.

모델은 어떻게 배우는가

모델 학습은 정답을 외우는 일이 아니다

많은 입문자가 모델을 사람처럼 상상합니다. 데이터를 많이 보여 주면 정답을 똑똑하게 기억해 두었다가 나중에 꺼내는 존재처럼 생각하는 것입니다. 하지만 모델은 정답을 통째로 저장하는 기계가 아닙니다. 모델이 하는 일은 훨씬 단순하면서도 강력합니다. 입력과 출력 사이의 관계를 가장 잘 설명하는 패턴을 찾는 것입니다.

예를 들어 집값 예측 모델을 만든다고 해 봅시다. 모델은 "강남 30평 아파트는 얼마다" 같은 문장을 외우는 것이 아닙니다. 대신 위치, 면적, 방 개수, 연식 같은 정보가 집값과 어떤 관계를 가지는지 조금씩 조정하며 배웁니다. 스팸 메일 분류 모델도 마찬가지입니다. 특정 메일 한 통을 기억하는 것이 아니라, 어떤 단어와 표현, 발신 패턴, 링크 구조가 스팸일 가능성을 높이는지 익힙니다.

이 차이가 중요합니다. 정답을 외우는 모델은 처음 본 데이터 앞에서 약합니다. 반대로 패턴을 배운 모델은 한 번도 본 적 없는 입력에도 꽤 그럴듯한 판단을 할 수 있습니다. 이것이 바로 학습의 핵심입니다.

데이터셋 안에서 입력, 출력, 특성, 레이블은 어떤 역할을 할까

모델이 배우려면 먼저 데이터가 어떤 역할로 구성되는지 알아야 합니다. 머신러닝 책에서 자주 나오는 단어들이 바로 입력값, 출력값, 특성, 레이블입니다. 이름이 많아서 복잡해 보이지만, 실제로는 역할만 구분하면 어렵지 않습니다.

입력값은 모델이 보고 판단하는 재료입니다. 출력값은 모델이 예측하려는 결과입니다. 특성은 입력을 구성하는 각각의 정보 조각이고, 레이블은 학습할 때 사용하는 정답입니다.

고객 이탈 예측을 예로 들어 보겠습니다. 어떤 고객의 최근 접속 횟수, 결제 금액, 문의 기록, 가입 기간이 있다면 이것들이 입력이 됩니다. 이 입력을 이루는 각각의 요소, 즉 접속 횟수나 결제 금액 같은 칸들이 특성입니다. 그리고 이 고객이 실제로 다음 달에 떠났는지 남아 있었는지가 레이블입니다. 모델의 출력은 "이 고객이 이탈할 확률" 같은 예측값이 됩니다.

조금 더 단순하게 말하면 이렇습니다.

  • 입력은 모델이 보는 정보다.

  • 특성은 입력을 이루는 세부 항목이다.

  • 레이블은 과거 데이터에 붙어 있는 정답이다.

  • 출력은 모델이 새로 만들어 내는 예측이다.

여기서 중요한 포인트가 하나 있습니다. 좋은 모델은 좋은 특성 위에서 자란다는 점입니다. 모델은 없는 신호를 마법처럼 만들어 내지 못합니다. 고객 이탈을 예측하고 싶은데 고객 행동 데이터가 거의 없다면, 모델은 애초에 배울 재료가 부족합니다. 반대로 아주 복잡한 알고리즘이 아니어도 입력 정보가 잘 정리되어 있으면 의외로 성능이 잘 나올 수 있습니다.

즉, 모델 학습은 모델만의 일이 아닙니다. 데이터의 표현 방식이 학습 가능성을 결정합니다.

모델은 학습 데이터로 배우고, 테스트 데이터로 실력을 확인한다

학생이 시험 문제를 미리 다 외워 버리면 성적은 높게 나올 수 있습니다. 하지만 그 점수는 실력을 보여 주지 못합니다. 머신러닝도 똑같습니다. 모델이 이미 본 데이터만 잘 맞힌다고 해서 실제로 잘 작동한다고 말할 수는 없습니다.

그래서 데이터를 나눕니다. 가장 기본적인 구분이 학습 데이터와 테스트 데이터입니다.

학습 데이터는 모델이 실제로 배우는 데 쓰는 데이터입니다. 모델은 이 데이터를 보면서 예측을 만들고, 틀린 정도를 계산하고, 내부 설정을 조금씩 바꿉니다. 반면 테스트 데이터는 학습이 끝난 뒤에 꺼내 보는 데이터입니다. 모델이 처음 보는 문제지라고 생각하면 됩니다.

왜 굳이 나눠야 할까요? 이유는 간단합니다. 우리가 알고 싶은 것은 "과거 데이터를 얼마나 잘 외웠는가"가 아니라, "새로운 데이터에도 잘 통하는가"이기 때문입니다.

집값 예측 모델이 학습 데이터에서만 놀라운 성능을 보여도, 실제 출시 후 새로운 지역의 집값을 계속 틀린다면 아무 소용이 없습니다. 스팸 분류 모델도 과거 메일만 잘 맞히고 오늘 들어온 메일에는 약하다면 서비스에서 곧 문제가 됩니다. 머신러닝은 본질적으로 미래를 다루는 기술입니다. 그래서 반드시 안 본 데이터를 남겨 두어야 합니다.

여기서 초보자가 자주 빠지는 함정이 있습니다. 데이터를 나누긴 했는데, 전처리나 기준 계산을 전체 데이터에 한꺼번에 해 버리는 경우입니다. 그러면 테스트 데이터의 정보가 학습 단계에 슬쩍 새어 들어갑니다. 이것을 보통 데이터 누수라고 부릅니다. 아직 시험도 안 봤는데 답안지 구석을 힐끔 본 셈입니다. 당장은 점수가 좋아 보여도, 실제 성능은 그보다 낮을 가능성이 큽니다.

이 장에서는 기본적으로 학습 데이터와 테스트 데이터의 구분만 잡아 두면 충분합니다. 뒤에서 검증 데이터와 교차 검증은 더 자세히 다룰 것입니다. 지금 중요한 것은 단 하나입니다. 모델은 배우는 데이터와 평가받는 데이터를 분리해야 진짜 실력을 확인할 수 있다는 점입니다.

손실 함수는 틀림을 숫자로 바꾸는 장치다

모델이 배우려면 "틀렸다"는 사실을 알아야 합니다. 그런데 컴퓨터에게 틀렸다고 말하는 가장 좋은 방법은 감탄사가 아니라 숫자입니다. 여기서 등장하는 것이 손실 함수입니다.

손실 함수는 모델의 예측이 얼마나 틀렸는지를 숫자로 계산하는 규칙입니다. 예측이 정답에 가까우면 작은 값이 나오고, 많이 벗어나면 큰 값이 나옵니다. 이 숫자가 있어야 모델은 어느 방향으로 수정해야 할지 알 수 있습니다.

예를 들어 집값을 5억 원이라고 예측했는데 실제는 6억 원이라면 오차가 생깁니다. 이 오차를 숫자로 계산해 "지금 꽤 틀렸구나"라고 알려 주는 것이 손실 함수입니다. 스팸 분류처럼 정답이 둘 중 하나인 문제에서는 조금 다르게 계산합니다. 단순히 맞았다, 틀렸다만 보는 것이 아니라, 모델이 얼마나 자신 있게 잘못 말했는지까지 반영하는 경우가 많습니다.

왜 이런 장치가 중요할까요? 모델은 한 번에 똑똑해지지 않기 때문입니다. 처음에는 엉뚱한 예측을 내놓습니다. 하지만 손실 함수가 매번 "지금은 이 정도로 틀렸다"라고 알려 주면, 모델은 그 값을 줄이는 방향으로 조금씩 조정될 수 있습니다.

손실 함수를 체온계에 비유해도 좋습니다. 몸 상태가 좋은지 나쁜지 감으로만 말하면 애매하지만, 체온이 숫자로 나오면 상태를 판단할 수 있습니다. 모델도 마찬가지입니다. 손실이 높으면 상태가 좋지 않은 것이고, 손실이 낮아지면 학습이 진행되고 있는 것입니다.

중요한 점은 손실 함수가 단순한 계산 도구가 아니라는 사실입니다. 무엇을 틀림으로 볼 것인가를 정의하는 기준이기도 합니다. 집값 예측과 의료 진단은 같은 방식으로 틀림을 다루면 안 됩니다. 어떤 문제에서는 작은 오차 여러 번보다 큰 오차 한 번이 훨씬 치명적일 수 있습니다. 실무에서 손실 함수를 이해해야 하는 이유가 여기에 있습니다. 모델은 손실이 말해 주는 방향으로 배우기 때문입니다.

최적화는 손실을 조금씩 줄여 가는 반복이다

손실 함수가 틀림의 크기를 알려 준다면, 최적화는 그 틀림을 줄여 가는 과정입니다. 말이 어렵지만 원리는 꽤 직관적입니다. 모델은 처음에 임의의 상태에서 출발합니다. 예측을 해 보고, 얼마나 틀렸는지 계산하고, 그 결과를 바탕으로 내부 설정을 조금 바꿉니다. 그리고 다시 예측하고, 다시 계산하고, 다시 바꿉니다. 이 반복이 학습입니다.

이 과정을 언덕을 내려가는 장면으로 떠올리면 이해가 쉽습니다. 안개가 자욱해서 멀리 보이지 않는 산 위에 서 있다고 해 봅시다. 가장 낮은 지점까지 가고 싶지만 한 번에 정답 경로를 알 수는 없습니다. 대신 지금 서 있는 자리에서 어느 방향이 조금 더 아래로 내려가는지 살펴보고, 한 걸음 움직입니다. 그리고 다시 확인하고 또 움직입니다. 최적화는 이런 식으로 손실이 더 낮아지는 방향을 찾아가는 과정입니다.

여기서 모델이 조정하는 내부 설정값을 흔히 파라미터라고 부릅니다. 선형 회귀에서는 기울기와 절편 같은 값이 여기에 해당하고, 신경망에서는 훨씬 더 많은 가중치가 여기에 들어갑니다. 중요한 것은 이름이 아니라 역할입니다. 모델은 이 값들을 조금씩 바꾸며 더 나은 예측 규칙을 만들어 갑니다.

하지만 최적화는 무조건 오래 한다고 좋은 것이 아닙니다. 너무 크게 움직이면 좋은 지점을 지나쳐 버릴 수 있고, 너무 조금만 움직이면 학습이 지나치게 느려집니다. 또 학습 데이터에만 지나치게 맞추는 방향으로 계속 내려가다 보면, 오히려 처음 보는 데이터에는 약해질 수도 있습니다. 즉, 최적화는 단순히 손실을 낮추는 기술이면서 동시에 어디서 멈출지도 고민해야 하는 기술입니다.

일반화는 처음 보는 데이터에서도 성능을 유지하는 능력이다

머신러닝에서 진짜 실력은 일반화에서 드러납니다. 일반화란 학습한 패턴이 새로운 데이터에도 통하는 능력입니다. 이 개념이 중요한 이유는 아주 분명합니다. 현실 세계는 늘 처음 보는 데이터로 가득하기 때문입니다.

예를 들어 시험 문제집에 있는 문제만 완벽히 푸는 학생이 있다고 해 봅시다. 그런데 시험장에서 숫자만 조금 바뀌어도 손을 못 댄다면, 그 학생은 개념을 이해한 것이 아니라 문제를 외운 것입니다. 모델도 마찬가지입니다. 학습 데이터에는 거의 완벽한 성능을 보이는데 테스트 데이터에서 성능이 뚝 떨어진다면, 패턴을 이해한 것이 아니라 사례를 너무 세세하게 따라간 것에 가깝습니다.

이 상태를 보통 과적합이라고 부릅니다. 반대로 너무 단순해서 학습 데이터에서도 패턴을 제대로 못 잡는 상태는 과소적합이라고 합니다. 좋은 모델은 이 둘 사이 어딘가에서 균형을 잡습니다. 학습 데이터에서 충분히 배우되, 새로운 데이터에 대해서도 지나치게 흔들리지 않아야 합니다.

일반화가 중요한 이유를 제품 관점에서 보면 더 선명해집니다. 오늘 만든 추천 모델은 내일의 사용자에게 써야 하고, 지난달 로그로 학습한 이상 탐지 모델은 다음 달 장애를 잡아내야 합니다. 서비스에 배포된 모델은 늘 미래를 상대합니다. 그래서 머신러닝은 훈련이 아니라 실전이 본게임입니다.

결국 우리가 원하는 모델은 이런 모델입니다.

  • 학습 데이터에서 패턴을 충분히 배운다.

  • 테스트 데이터에서도 성능이 크게 무너지지 않는다.

  • 데이터가 조금 달라져도 판단이 지나치게 흔들리지 않는다.

이 세 가지를 만족해야 비로소 "잘 배운 모델"이라고 부를 수 있습니다.

하나의 예제로 학습 과정을 끝까지 연결해 보기

이제 스팸 메일 분류 문제를 가지고 전체 흐름을 한 번 이어 봅시다. 입력은 메일 제목, 본문, 링크 수, 발신 도메인 같은 정보입니다. 이런 각각의 정보 조각이 특성입니다. 레이블은 스팸 또는 정상입니다.

모델은 먼저 학습 데이터에 있는 메일들을 봅니다. 처음에는 예측이 형편없을 수 있습니다. 어떤 메일은 정상인데 스팸이라 하고, 어떤 메일은 스팸인데 정상이라 할 것입니다. 손실 함수는 이 틀림을 숫자로 계산합니다. 특히 스팸 메일을 정상이라고 아주 자신 있게 예측했다면 더 큰 손실을 줄 수도 있습니다.

그러면 최적화 과정이 시작됩니다. 모델은 손실이 줄어드는 방향으로 내부 값을 조금씩 조정합니다. 예를 들어 특정 표현이나 링크 패턴이 스팸과 자주 연결된다는 신호를 더 크게 반영하게 될 수도 있습니다. 이런 과정을 여러 번 반복하면 학습 데이터에서 점점 덜 틀리게 됩니다.

하지만 여기서 멈추면 안 됩니다. 이제 테스트 데이터로 넘어가야 합니다. 모델이 한 번도 보지 못한 메일들에서도 잘 맞히는지 확인해야 합니다. 만약 학습 데이터에서는 거의 완벽한데 테스트 데이터에서는 성능이 떨어진다면, 모델은 스팸의 본질적 패턴을 배운 것이 아니라 학습 데이터의 세부 사항에 너무 익숙해진 것일 수 있습니다.

이 짧은 예제 안에 머신러닝 학습의 핵심이 거의 다 들어 있습니다. 입력과 특성이 있고, 정답인 레이블이 있고, 손실이 있고, 최적화가 있고, 마지막으로 일반화 검사가 있습니다. 알고리즘이 무엇이든, 큰 구조는 대부분 이 틀 안에서 이해할 수 있습니다.

내부 원리를 아는 사람이 더 잘 설계한다

입문 단계에서는 종종 이런 생각을 합니다. "어차피 라이브러리가 다 해 주는데, 굳이 내부 원리를 알아야 할까?" 하지만 실제 프로젝트에서는 이 차이가 크게 벌어집니다.

학습 원리를 이해한 사람은 문제가 생겼을 때 질문을 다르게 던집니다. 데이터가 부족한가, 특성이 약한가, 손실이 문제와 맞지 않는가, 학습 데이터와 테스트 데이터가 비슷하지 않은가, 모델이 지나치게 복잡한가를 따져 볼 수 있습니다. 반면 원리를 모르면 모델만 바꿔 가며 운에 기대게 됩니다.

머신러닝은 결국 설계의 기술입니다. 어떤 입력을 넣을지, 무엇을 정답으로 삼을지, 틀림을 어떻게 계산할지, 무엇을 진짜 성능으로 볼지 정하는 일이 핵심입니다. 모델 학습의 내부 원리를 이해한다는 것은 단지 이론을 아는 것이 아닙니다. 더 나은 판단을 내릴 수 있는 사람이 되는 것입니다.

이 장에서 가져가야 할 감각

이 장의 내용을 한 문장으로 줄이면 이렇습니다. 모델은 데이터를 보고, 틀림을 계산하고, 조금씩 수정하면서, 처음 보는 데이터에도 통하는 패턴을 배우는 시스템이다.

입력과 특성은 모델이 보는 재료이고, 레이블은 과거의 정답입니다. 손실 함수는 틀림을 숫자로 바꾸고, 최적화는 그 숫자를 줄이는 반복입니다. 그리고 일반화는 그 모든 학습이 진짜 실력인지 확인하는 기준입니다.

이 감각을 잡으면 이제 모델을 단순한 블랙박스로 보지 않게 됩니다. 학습은 마법이 아니라 구조를 가진 과정이고, 그 구조를 이해하는 순간 머신러닝은 훨씬 덜 막막해집니다.

다음 장에서는 한 걸음 더 나아가 보겠습니다. 모델이 배울 수 있는 구조를 만드는 것만큼 중요한 일이 있습니다. 바로 무엇을 머신러닝 문제로 정의할 것인가입니다. 잘못 정의된 문제 위에서는 좋은 학습도 힘을 쓰지 못합니다. 이제부터는 모델 이전에, 문제 자체를 제대로 설계하는 법을 살펴볼 차례입니다.

책 목록

머신러닝 설계 수업: 데이터를 모델로, 모델을 제품으로 바꾸는 실전 감각

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기