Machine Learning

도대체 머신러닝이 도대체 무엇인가?

Frisbeen 2026. 4. 16. 19:35

1. 머신러닝이란 무엇인가

머신러닝을 한 문장으로 정의하면 다음과 같다.

데이터를 보고, 규칙을 스스로 찾게 하는 것.


 전통적인 프로그래밍에서는 사람이 직접 규칙을 정의한다. 예를 들어 "집이 크면 가격이 비싸다", "종양이 크면 악성일 가능성이 높다"와 같은 규칙을 사람이 먼저 가정하고, 그 규칙을 코드로 옮긴다. 이 방식의 한계는 명확하다. 사람이 미리 알고 있는 규칙만 시스템에 반영할 수 있고, 그 규칙이 틀렸을 때 시스템 전체가 함께 틀린다.

 

 머신러닝은 접근 방식이 반대다. 규칙을 직접 작성하는 대신, 데이터를 충분히 많이 제공하고, 그 안에서 규칙을 찾도록 맡긴다. 사람이 해야 할 일은 좋은 데이터를 모으고, 학습이 가능한 형태로 문제를 정의하는 것이다.

 

 이 글에서는 머신러닝의 가장 기초적인 분류 체계부터 시작해서, 지도학습 안의 회귀 문제, 그리고 회귀의 가장 단순한 형태인 선형회귀까지 차례로 정리한다.


2. 지도학습과 비지도학습

머신러닝은 학습 데이터에 정답이 함께 주어지는가에 따라 크게 두 가지로 나뉜다.

2.1 지도학습 (Supervised Learning)

지도학습은 말 그대로 "지도하면서 가르치는" 방식이다. 입력 데이터와 함께 그에 대응하는 정답을 같이 제공한다.

예를 들어 사진을 보고 강아지인지 고양이인지 구분하는 문제를 생각해 보자. 학습 데이터는 다음과 같은 형태가 된다.

  • 사진 1 → 강아지
  • 사진 2 → 고양이
  • 사진 3 → 강아지
  • 사진 4 → 고양이

이때 각 입력에 붙어 있는 "강아지", "고양이"와 같은 정답을 전문 용어로 라벨(label) 이라고 한다. 라벨은 우리가 예측하고 싶은 값이라고 이해하면 쉽다.

라벨의 예는 다음과 같다.

  • 집 사진과 함께 주어지는 가격
  • 메일 내용과 함께 주어지는 스팸 여부
  • 종양 정보와 함께 주어지는 악성/양성
  • 공부 시간과 함께 주어지는 시험 점수

지도학습의 핵심은 다음과 같다. 입력과 라벨이 짝지어진 데이터를 보고, 그 안에서 입력으로부터 라벨을 예측하는 규칙을 학습한다. 그리고 학습이 끝난 뒤에는 새로운 입력이 들어왔을 때 그에 대한 라벨을 예측한다.

2.2 비지도학습 (Unsupervised Learning)

비지도학습은 정답 없이 데이터만 주어지는 경우다. 라벨이 없으므로 "맞히는" 학습은 불가능하다. 대신 데이터 안에 숨어 있는 구조나 패턴을 찾아낸다.

예를 들어 학생들의 키, 몸무게, 성격 데이터가 아주 많이 있다고 하자. 누가 어떤 그룹에 속하는지 미리 정해진 정답은 없다.

이때 컴퓨터는 데이터를 보고 비슷한 특성을 가진 학생들을 자동으로 묶을 수 있다. 이 작업을 군집화(clustering) 라고 한다.

정리하면 두 학습 방식의 의의는 다음과 같이 다르다.

  • 지도학습: 입력과 라벨의 관계를 학습해, 새로운 입력에 대한 정답을 예측한다.
  • 비지도학습: 라벨 없이 데이터 안의 숨은 패턴이나 군집 구조를 찾는다.

이 글의 나머지는 지도학습에 초점을 맞춘다.


3. 분류와 회귀

지도학습은 다시 출력값의 형태에 따라 두 종류로 나뉜다.

3.1 분류 (Classification)

출력이 연속적인 숫자가 아니라, 정해진 종류 중 하나로 떨어지는 문제다. 다음이 분류의 전형적인 예다.

  • 강아지 / 고양이
  • 스팸 메일 / 정상 메일
  • 악성 종양 / 양성 종양
  • 합격 / 불합격

이런 출력의 공통점은, 결과가 "종류"라는 점이다. 이런 형태의 출력값을 범주형(categorical) 이라고 부른다.

예를 들어 종양의 크기로 악성 여부를 예측한다고 하자. 출력을 다음과 같이 정의할 수 있다.

  • 0 = 양성 (Benign)
  • 1 = 악성 (Malignant)
  • 입력 x: 종양 크기
  • 출력 y: 0 또는 1

중요한것은 출력의 종류

여기서 짚어둘 점이 하나 있다. 입력 x가 연속적인 숫자라고 해서 그 문제가 곧 회귀인 것은 아니다. 분류와 회귀를 가르는 기준은 입력이 아니라 출력 y의 형태다. 출력이 종류로 떨어지면 분류, 실수값이면 회귀다.

3.2 회귀 (Numeric Prediction / Regression)

회귀는 출력이 숫자, 즉 연속적인 실수값인 문제다.

  • 집 크기로 집값을 예측
  • 공부 시간으로 시험 점수를 예측
  • 온도로 아이스크림 판매량을 예측
  • 연도로 해빙 면적을 예측

이런 문제의 출력은 "양성/악성"처럼 두세 가지로 떨어지지 않고, 232, 400, 540과 같은 임의의 실수가 된다. 따라서 회귀의 출력 y는 실수값(real-valued) 이다.


4. 회귀

회귀 문제의 학습 데이터는 다음과 같이 표기한다.

$$ (X, Y) = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}$$

표기는 추상적이지만 의미는 단순하다. 입력 x와 정답 y가 한 쌍을 이루는 데이터가 n개 있다는 뜻이다.

집 크기로 집값을 예측하는 문제라면, 한 쌍의 데이터는 다음과 같은 모습이 된다.

  • (2104,400) :2104 평방피트인 집의 가격은 400
  • (1600,330): 1600 평방피트인 집의 가격은 330

각 데이터 하나는 입력과 정답의 한 세트다.

우리가 만들고 싶은 것은 입력 x를 넣으면 출력 y를 예측해 주는 함수 F(x)다. 위와 같은 데이터를 충분히 많이 보고 나면, 컴퓨터는 대략 "집이 클수록 가격이 올라가는 경향이 있다"는 규칙을 학습한다.

그리고 학습이 끝난 뒤, 학습 데이터에 없던 새로운 입력 (예: 2500 평방피트짜리 집)이 들어왔을 때 그에 대한 가격을 예측한다.

이것이 회귀가 하는 일의 전부다.


5. 문제의 형식적 정의 (Problem Formulation)

지금까지의 이야기를 조금 더 형식적으로 정리해 보겠다.

5.1 Target function

입력 변수의 공간을 X, 출력 변수의 공간을 Y라고 하자. 우리가 찾고 싶은 이상적인 규칙은 다음과 같이 표기할 수 있다.

$$f:X→Y $$

이 함수 f를 target function이라고 부른다. 입력 공간의 임의의 값을 받아, 출력 공간의 정확한 값으로 보내주는 "참된 규칙"이다.

집값 예측 문제로 다시 옮기면 다음과 같다.

  • X : 가능한 모든 집 크기의 집합
  • Y : 가능한 모든 집 가격의 집합
  • f: 집 크기로부터 진짜 가격이 결정되는 숨겨진 규칙

Target Function은 정확히 구할 수 없는 이상적인 개념이다.

여기서 강조할 점은 f가 이상적인 개념이라는 것이다. 현실에서는 집 크기로부터 가격이 결정되는 진짜 규칙을 우리가 직접 알아낼 방법이 없다. 가격에는 위치, 연식, 시장 상황 같은 수많은 요인이 얽혀 있고, 그 모든 것을 정확하게 함수 형태로 적어 내릴 수 없다.

따라서 머신러닝이 실제로 하는 일은, 데이터를 통해 f에 가까운 함수를 근사적으로 찾아내는 것이다.

5.2 Training set

이 근사를 위해 사용하는 데이터가 훈련 데이터(training set) 다.

$$ \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}$$

훈련 데이터는 진짜 규칙 f가 만들어 낸 입력-출력 쌍의 표본이라고 생각할 수 있다.

5.3 Hypothesis (가설)

훈련 데이터를 바탕으로 컴퓨터가 찾아낸 함수를 가설(hypothesis) 이라고 한다.

$$ h:X→Y $$

두 함수의 차이를 분명히 정리하면 다음과 같다.

  • f : 세상의 진짜 규칙. 우리가 알 수 없는 이상적인 함수.
  • h : 컴퓨터가 데이터를 보고 찾아낸 규칙. 우리의 모델이자 f의 근사치.

머신러닝의 목표는 이 관점에서 다음과 같이 다시 쓸 수 있다.

훈련 데이터로부터 가설 h를 학습하되, 학습에 사용되지 않은 새로운 입력에 대해서도 h가 좋은 예측을 놓도록 만드는 것.


6. 선형회귀와 파라미터

가설 h를 어떻게 구체적인 함수 형태로 표현할 것인가? 가장 단순한 선택이 바로 선형회귀(linear regression) 다.

6.1 가설의 형태

입력이 하나일 때, 선형회귀의 가설은 다음과 같이 쓴다.

$$ h_\theta(x) = \theta_0 + \theta_1 x$$

여기서 θ0,θ1을 파라미터(parameter) 라고 한다. 학습이란, 훈련 데이터에 가장 잘 들어맞는 θ0,θ1의 값을 찾는 과정이다.

6.2 입력이 여러 개일 때

현실 문제에서 입력은 보통 하나가 아니다. 집값을 예측할 때 단순히 집 크기뿐 아니라 침실 수도 함께 고려한다고 하자.

그러면 입력은 두 개의 정보로 이루어진 묶음이 된다.

 

$$ x = (x_1, x_2) $$

예를 들어 x=(2104,3)은 "2104 평방피트짜리, 침실 3개인 집"을 의미한다. 이때 가설은 다음과 같이 확장된다.

 

$$ h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 $$

각 파라미터의 의미는 다음과 같이 해석할 수 있다.

  • θ0 : 모든 입력이 0일 때의 기준값 (절편)
  • θ1 : 입력 x1 (집 크기)이 한 단위 늘어날 때 출력이 얼마나 변하는지를 나타내는 가중치
  • θ2 : 입력 x2 (침실 수)가 한 단위 늘어날 때 출력이 얼마나 변하는지를 나타내는 가중치

즉 파라미터는 각 입력이 출력에 얼마나 중요하게 작용하는가를 결정하는 숫자다. 학습이 끝났다는 말은, 데이터에 가장 잘 맞는 이 가중치들의 값이 정해졌다는 뜻이다.


7. 근본적으로 무엇을 하는가?

 지도학습에서는 데이터가 다음처럼 주어진다고 하였다.

$$ S = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\} $$

여기서 각 x는 입력이고, y는 그 입력에 대한 정답이다. 우리가 하고 싶은 일은 단순하다.

입력 x가 들어왔을 때, 그에 맞는 출력 y를 잘 예측하는 함수 h를 찾는 것

즉 지도학습은 결국, 입력을 정답으로 잘 연결해 주는 규칙 하나를 데이터로부터 찾아내는 과정이라고 볼 수 있다.

 

 예를 들어 집 크기 x가 주어졌을 때 집값 y를 예측하고 싶다면,

우리는 다음과 같은 함수 하나를 만들고 싶은 것이다.

$$ h(x) \approx y $$

여기서 h는 우리가 데이터로부터 학습하려는 예측 함수이다.

어떤 함수가 좋은 함수인가?

하지만 여기서 곧바로 질문이 하나 생긴다.

“어떤 함수가 좋은 함수인가?”

단순히 함수 h를 하나 정했다고 해서 끝나는 것이 아니다.

세상에는 가능한 함수가 너무 많다.

심지어 같은 데이터를 어느 정도 설명하는 함수도 여러 개가 있을 수 있다.

따라서 지도학습의 핵심은 사실 다음 질문으로 바뀐다.

수많은 후보 함수들 중에서, 어떤 함수가 가장 좋은가?

이 질문에 답하려면, 먼저 “좋다”는 말을 수학적으로 정의해야 한다.


8. 좋은 함수?

좋은 예측 함수라는 말은 일상적으로는 쉽다.

정답을 잘 맞히면 좋은 함수이고, 많이 틀리면 나쁜 함수이다.

그런데 컴퓨터에게는 이렇게 말하면 안 된다.

  • “대충 잘 맞는 함수”
  • “꽤 괜찮은 모델”
  • “이게 더 자연스러워 보인다”

이런 표현은 사람은 이해할 수 있어도, 컴퓨터는 이해할 수 없다.

컴퓨터는 평가의 기준이 필요하다.

컴퓨터가 학습하려면, 반드시 숫자로 평가할 수 있는 기준이 있어야 한다.

즉 컴퓨터에게는 다음과 같은 기준이 필요하다.

이 함수가 얼마나 틀렸는지 숫자로 말해주는 기준

예를 들어 어떤 데이터 한 개가 있다고 하자.

  • 입력: x=5
  • 실제 정답: y=10

그런데 모델이 예측한 값이 h(x)=8이라면, 이 모델은 정답 10을 맞혀야 하는데 8을 예측했으므로 오차가 있다.

반대로 어떤 다른 모델이h(x)=9.8를 예측했다면, 앞의 모델보다 훨씬 더 잘 맞춘 것이다.

이제 우리는 직관적으로는 안다.

  • 8을 예측한 모델보다
  • 9.8을 예측한 모델이 더 좋다

그런데 이걸 머신러닝에서는 반드시 수치화해야 한다.

즉,

예측과 정답이 얼마나 차이 나는지를 숫자로 재는 장치

가 필요하고, 그것이 바로 손실함수(loss function) 이다.

여기서 중요한 건, 손실함수는 갑자기 튀어나온 것이 아니라는 점이다.

손실함수는 사실 다음 문제를 해결하기 위해 등장한다.

 

“좋은 함수와 나쁜 함수를 구분할 수 있는 수학적 기준이 필요하다.”


9. 손실함수에 대하여

이제 상황을 조금 더 명확하게 보자.

우리는 데이터 S를 가지고 함수 h를 찾고 싶다.

가능한 함수가 과연 한가지일까?

그런데 가능한 함수는 매우 많다.

예를 들어 똑같이 집값 예측 문제를 한다고 해도, 다음과 같은 여러 모델이 가능하다.

$h_1(x)=2x+1$

$h_2(x)=1.5x+10$

$h_3(x)=0.8x+40$

그렇다면 이 셋 중 무엇이 더 좋은 모델일까?

이 질문에 답하려면, 각 모델이 실제 정답과 얼마나 가까운 예측을 했는지를 비교해야 한다.

즉 우리는 각 모델에 대해 다음을 알고 싶다.

  • 정답과 거의 비슷한 값을 내는가?
  • 정답에서 많이 벗어나는가?
  • 전체 데이터에서 평균적으로 덜 틀리는가?

이때 “틀린 정도”를 수치화한 것이 손실이다.

손실(loss)이 작을수록 예측이 정답에 가깝고, 손실이 클수록 예측이 정답에서 멀다.

그래서 머신러닝에서는 “좋은 모델을 찾는다”는 말을 결국 다음처럼 바꿔서 표현한다.

손실이 작은 모델을 찾는다.

즉 좋은 모델 찾기 문제는, 곧 손실을 최소화하는 문제로 바뀐다. 이 지점에서 비로소 손실함수가 등장할 준비가 된다.


 

10. 손실함수(Loss Function)

손실함수는 한 개의 데이터에 대해, 예측값과 실제 정답 사이의 차이를 측정하는 함수이다.

수학적으로는 다음처럼 쓴다.

 

여기서

  • h(x): 모델이 예측한 값
  • y: 실제 정답
  • ℓ\ellℓ: 둘 사이의 차이를 계산하는 함수

즉 손실함수는

“이 예측이 얼마나 틀렸는가?”

를 숫자로 알려주는 함수다.


10-1. 회귀에서 가장 대표적인 손실: 제곱오차

회귀 문제에서는 가장 자주 쓰이는 손실함수가 제곱오차(squared error) 다.

$l(h(x), y) = (h(x) - y)^2$

이 식은 매우 단순하다.

  1. 예측값 h(x)와 실제값 y의 차이를 구하고
  2. 그 차이를 제곱한다

예를 들어 실제 정답이 10인데 모델이 8을 예측했다면

$(8-10)^2 = (-2)^2 = 4$

실제 정답이 10인데 모델이 9.5를 예측했다면

$(9.5-10)^2 = (-0.5)^2 = 0.25$

즉 두 번째 모델이 훨씬 더 손실이 작다.

그래서 두 번째 모델이 더 좋은 예측이라고 말할 수 있다.


10-2. 왜 하필 제곱을 하는가?

“그냥 차이만 보면 안 되나?”

“왜 굳이 제곱을 하지?”

 

이유는 여러 가지가 있다.

1) 음수와 양수가 상쇄되는 문제를 막기 위해

오차를 그냥 $h(x)−y$ 로 두면, 어떤 데이터에서는 +3, 어떤 데이터에서는 −3이 나올 수 있다.

이걸 그냥 더하면 0이 되어 버린다. 하지만 실제로는 두 예측 모두 틀린 것이다.

틀렸는데도 합치면 0이 되어 버리면, 오차를 제대로 측정할 수 없다.

그래서 제곱을 하면

$(+3)^2 = 9,\quad (-3)^2 = 9$ 처럼 둘 다 양수가 된다. 즉, 틀린 것은 틀린 것으로 제대로 반영된다.


2) 큰 오차를 더 강하게 벌주기 위해 (오차가 강조)

제곱은 작은 오차보다 큰 오차를 훨씬 더 크게 만든다.

예를 들어

  • 오차가 1이면 제곱오차는 1
  • 오차가 2이면 제곱오차는 4
  • 오차가 5이면 제곱오차는 25

즉 오차가 커질수록 손실이 훨씬 빠르게 증가한다.

이 말은 곧,

모델이 크게 틀린 예측을 매우 싫어하게 만든다

는 뜻이다.


3) 수학적으로 다루기 편하다

제곱함수는 미분이 가능하고 형태도 매끄럽다.

그래서 나중에 최적화, 경사하강법, 정규방정식 같은 계산을 할 때 매우 편하다.

즉 제곱오차는 단순히 직관적일 뿐 아니라,

수학적으로도 다루기 좋은 손실함수다.


 

11. 한 개 데이터의 손실에서 전체 데이터의 손실로의 확장

그런데 지금까지는 데이터 한 개만 봤다.

실제 학습에서는 데이터가 하나가 아니라 n개 있다.

$S = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}$

그렇다면 모델이 좋은지 나쁜지는 한 개 데이터만 보고 판단하면 안 되고,

전체 데이터에서 평균적으로 얼마나 잘 맞는지를 봐야 한다.

그래서 한 개 데이터의 손실을 전체 데이터로 확장한 것이

비용함수(cost function) 또는 경험적 손실(empirical loss) 이다.

전체 데이터의 손실 판단 (Cost Function & Empirical Loss)

$L_S(h)=\frac{1}{n}\sum_{i=1}^{n}\ell(h(x_i), y_i)$으로 표기한다.

다시말하면 이는 모델 자체의 점수라고 할 수 있겠다.

$L_S(h)=\frac{1}{n}\sum_{i=1}^{n}(h(x_i)-y_i)^2$

이 식의 의미는 아주 단순하다.

훈련 데이터 전체에 대해, 모델이 평균적으로 얼마나 틀렸는가

이제야 비로소 우리는 어떤 모델이 더 좋은지 전체 데이터 기준으로 비교할 수 있다.


손실함수 (loss function)

한 개 데이터에 대한 오차

$\ell(h(x), y)$

즉 한 문제를 얼마나 틀렸는가를 본다.

비용함수 (cost function)

전체 데이터에 대한 평균 오차

$L_S(h)=\frac{1}{n}\sum_{i=1}^{n}\ell(h(x_i), y_i)$

즉 문제집 전체를 평균적으로 얼마나 틀렸는가를 본다.

쉽게 말하면

  • loss = 한 문제 채점
  • cost = 전체 시험 채점 결과

라고 생각하면 된다.


12. 결국은 실제 데이터의 손실을 판단해야한다.

우리는 함수 h를 찾고 싶다. 그런데 함수가 좋은지 나쁜지 알려면 손실이 필요하다.

그리고 전체 데이터 기준으로 평가하려면 비용함수가 필요하다.

그럼 학습의 목표는 무엇이 되느냐?

비용함수를 가장 작게 만드는 함수 h를 찾는 것

 

 머신러닝의 학습은 본질적으로 다음과 같은 최적화 문제가 된다.

($\min_h L_S(h)$

만약 함수 h가 파라미터 w로 표현된다면,

$\min_w L_S(h_w)$

가중치와 함께 묶는 Loss Function의 최소를 구하는 것이다.

즉 결국 학습이란

좋은 파라미터를 찾는 과정

 

여기서 “좋은”의 정확한 뜻은 이제 분명하다.

전체 훈련 데이터에서 손실을 작게 만드는 파라미터


훈련 데이터가 새로운 데이터에도 비용 함수를 최소화한다는 보장이 있는가?

하지만 아직 끝난 것은 아니다.

지금까지는 전부 훈련 데이터 기준으로 이야기했다.

즉 우리는 현재 $L_S(h)$ 를 최소화하고 있다.

훈련 데이터에서 손실이 작은 모델이, 새로운 데이터에서도 정말 잘 맞는가?

 

  • 훈련 데이터에서 성능이 좋은 모델은 왜 새로운 데이터에서는 성능이 떨어질 수 있는가?
  • 학습이 너무 잘 된 것처럼 보이는데도 왜 실제 성능은 나쁠 수 있는가?
  • 우리는 어떻게 해야 “훈련 데이터를 잘 맞추는 것”과 “새 데이터에도 잘 맞추는 것” 사이의 균형을 잡을 수 있는가?

일반화(generalization), 과적합(overfitting), 검증(validation) 같은 개념들을 바로 이 질문에 답하기 위해 다음 포스팅으로 써보겠다.

'Machine Learning' 카테고리의 다른 글

머신러닝의 수학적 기반에 대하여  (0) 2026.04.22