courses
여러분이 학습하는 모든 머신 러닝 모델은 하나의 최적화 문제를 풉니다. 그리고 실제로 풀고자 하는 대상이 바로 목적 함수입니다.
간단히 말해, 목적 함수는 한 해법이 얼마나 “좋은지”를 측정하는 수학적 함수입니다. 일련의 입력을 받아 단 하나의 점수를 출력합니다. 목표는 항상 그 점수를 최대화하거나 최소화하는 값을 찾는 것입니다. 선형 계획법부터 딥러닝까지, 목적 함수는 모든 것의 핵심에 있습니다. 한 번 원리를 이해하고 나면 어디에서나 보이게 되는 개념입니다.
이 글에서는 목적 함수가 무엇인지, 손실 함수와 비용 함수와 어떤 차이가 있는지, 그리고 머신 러닝과 최적화에서 어떻게 사용되는지 설명합니다.
2026년에도 통하는 딥러닝 심화 학습을 찾고 계신가요? PyTorch 포트폴리오를 구축할 수 있는 Deep Learning in Python 코스에 등록해 보세요.
목적 함수란?
목적 함수는 해법이 얼마나 좋은지를 평가하는 수학적 함수입니다.
모델 파라미터나 의사결정 변수 같은 입력 값을 넣으면 하나의 숫자를 반환합니다. 이 숫자가 현재 해법의 성능을 알려 줍니다. 그 숫자가 높을수록(또는 낮을수록) 해법이 더 좋거나(혹은 더 나쁘거나) 합니다.
이 김에 최적화 전반도 간단히 짚어보겠습니다.
최적화는 그 숫자를 올바른 방향으로 밀어주는 입력을 찾는 과정입니다. 최소화라면 가능한 한 가장 작은 값을, 최대화라면 가능한 한 가장 큰 값을 원합니다. 어느 쪽이든, 목적 함수는 비교 기준입니다.
쉽게 말해, 점수 매기기 시스템이라고 생각하시면 됩니다. 모든 후보 해법은 점수를 받고, 우리는 최고의 점수를 가진 해법을 찾는 것이 목표입니다.
목적 함수 vs 손실 함수 vs 비용 함수
이 세 용어는 자주 혼용되지만, 정확히 같은 의미는 아닙니다.
가장 포괄적인 용어가 목적 함수입니다. 최대화하거나 최소화하려는 모든 함수를 의미합니다. 반드시 오차나 예측이 개입될 필요는 없습니다. 단지 여러분의 문제에서 “더 나음”이 무엇인지 정의합니다.
손실 함수는 단일 학습 예시에 대한 오차를 측정합니다. 즉, 모델의 예측이 실제 값과 얼마나 차이 나는지를 잽니다. 예를 들어, 하나의 데이터 포인트에 대한 평균제곱오차(MSE)는 손실 함수입니다.
비용 함수는 전체 데이터셋에 걸친 손실을 집계(보통 평균)합니다. 따라서 학습 과정에서 실제로 최소화하는 대상은 비용 함수입니다. 하나의 예시가 아닌 모든 예시에 걸친 모델 성능을 요약합니다.
실무에서는 ML 프레임워크나 논문에서 이 용어들을 느슨하게 쓰는 경우가 많습니다. “cost”가 더 정확한 상황에서도 “loss”라고 하거나, 세 가지 모두를 “objective”로 부르기도 합니다.
연구 논문을 읽을 때는 구분이 중요합니다. 문맥이 저자가 실제로 어느 개념을 뜻하는지 알려 줍니다.
좀 더 구체적인 비교는 아래 표를 참고하세요:

목적/손실/비용 함수 비교 표
최적화에서의 목적 함수
모든 최적화 문제에는 목표와 제한이 있습니다.
목적 함수는 목표를 정의합니다. 즉, 무엇을 최대화 또는 최소화할지 결정합니다. 제약조건은 한계를 정의합니다. 해법이 머물러야 하는 경계를 나타냅니다. 둘이 함께 문제를 구성합니다.
간단한 자원 배분 예시를 보겠습니다.
두 제품을 생산하는 공장을 운영하며 이익을 최대화하고 싶다고 합시다. 목적 함수는 각 제품을 몇 개 생산하느냐에 따른 총이익을 나타냅니다. 제약조건은 사용 가능한 원자재, 기계 시간, 인력 용량 등의 한계를 담습니다. 목적 함수는 무엇을 최적화할지, 제약조건은 어떤 자원 안에서 일할지를 알려 줍니다.
이는 선형 계획법에서 흔히 적용됩니다. 선형 목적 함수와 선형 제약조건 하에서 최적화를 수행하는 방법으로, 물류, 스케줄링, 공급망, 금융 등 광범위하게 쓰입니다. 수학적 이론이 잘 정립되어 있고, 솔버는 수천 개 변수의 문제도 처리할 수 있습니다.
중요한 점은 목적 함수가 제약조건을 바꾸지는 않는다는 것입니다. 단지 솔버가 무엇을 추구할지를 지시합니다. 목적 함수를 바꾸면, 같은 제약조건이라도 전혀 다른 해를 얻게 됩니다.
머신 러닝에서의 목적 함수
머신 러닝에서 목적 함수는 모델이 실제로 무엇을 학습하는지 정의합니다.
모델을 학습할 때마다, 모델 파라미터를 조정해 목적 함수를 최소화 또는 최대화하는 최적화 알고리즘(예: 경사 하강법, Adam, RMSProp)을 실행합니다. 모델은 여러분의 문제를 알지 못합니다. 오직 목적 함수가 주는 점수만 알고, 매 업데이트마다 그 점수를 개선하려 합니다.
따라서 목적 함수의 선택이 결과를 좌우합니다. 사례에 가장 잘 맞는 것을 찾기 위해 몇 가지를 시도해 보는 것이 좋습니다.
평균제곱오차(MSE, 회귀)
평균제곱오차(MSE)는 회귀 문제의 기본 목적 함수입니다. 모델 예측과 실제 타깃 값 간 평균 제곱 차이를 측정합니다.

MSE 공식
차이를 제곱하면 모든 오차가 양수가 되며, 작은 오차보다 큰 오차를 더 강하게 벌합니다. 예측이 10만큼 빗나가면 합계에 10이 아니라 100이 더해집니다. 그래서 MSE는 이상치에 민감하며, 이는 실제 데이터에서 주의해야 할 점입니다.
import numpy as np
y_true = np.array([3.0, 5.0, 2.5, 7.0])
y_pred = np.array([2.8, 5.2, 2.0, 6.5])
mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE: {mse:.4f}")

MSE 출력
교차 엔트로피 손실(분류)
교차 엔트로피 손실은 분류 문제의 표준 목적 함수입니다. 모델이 예측한 확률분포가 실제 정답 분포와 얼마나 다른지를 측정합니다.

교차 엔트로피 손실 함수
모델이 정답 클래스에 높은 확률을 부여하면 손실은 낮습니다. 반대로 확신은 높은데 틀리면 손실이 커져 강하게 벌점을 줍니다. 이는 모델이 올바른 클래스를 자신 있게 예측하도록 유도합니다.
import numpy as np
# True labels (one-hot encoded)
y_true = np.array([1, 0, 0])
# Model's predicted probabilities
y_pred = np.array([0.7, 0.2, 0.1])
cross_entropy = -np.sum(y_true * np.log(y_pred))
print(f"Cross-Entropy Loss: {cross_entropy:.4f}")

교차 엔트로피 출력
로그 우도(Log-likelihood)
로그 우도는 확률적·통계적 모델에서 흔합니다. 모델의 파라미터가 관측 데이터를 생성했을 확률을 최대화합니다.

로그 우도 공식
우도 자체 대신 로그 우도를 쓰는 이유는 확률의 곱을 합으로 바꿔 계산과 최적화를 훨씬 쉽게 만들기 때문입니다.
실제로는 로그 우도를 최대화하는 대신 음의 로그 우도(NLL)를 최소화합니다. 본질적으로 같은 일이며, 경사 하강법이 사용할 수 있도록 부호만 바꾼 것입니다.
import numpy as np
from scipy.stats import norm
# Observed data
data = np.array([1.2, 2.3, 1.8, 2.1, 1.9])
# Assumed model parameters
mu, sigma = 2.0, 0.5
# Compute negative log-likelihood
nll = -np.sum(norm.logpdf(data, loc=mu, scale=sigma))
print(f"Negative Log-Likelihood: {nll:.4f}")

로그 우도 출력
학습은 본질적으로 최적화입니다. 순전파는 목적 함수 값을 계산하고, 역전파는 그래디언트를 계산합니다. 그리고 파라미터 업데이트는 그 점수를 개선하는 방향으로 모델을 이동시킵니다.
볼록 vs 비볼록 목적 함수
모든 목적 함수가 똑같이 만들어지지는 않습니다. 함수 형태에 따라 최적화 난이도와 해의 신뢰성이 결정됩니다.
선형 목적 함수
선형 목적 함수는 입력과 출력 사이에 직선적인 관계가 있습니다. 어떤 입력을 일정량 변경하면 출력도 일정량 변합니다.
선형 함수는 목적과 제약이 모두 선형인 선형 계획법에서 사용됩니다. 솔버가 큰 규모 문제에서도 전역 최적해를 안정적으로 찾을 수 있어, 최적화가 가장 쉬운 부류에 속합니다.
비선형 목적 함수
비선형 목적 함수는 입력과 출력 간의 관계가 더 복잡합니다. 대부분의 현실 문제와 거의 모든 머신 러닝 모델이 여기에 해당합니다.
MSE는 비선형입니다. 교차 엔트로피도 비선형입니다. 신경망의 손실 지형은 비선형입니다. 이러한 복잡성 덕분에 데이터의 복잡한 관계를 포착하지만, 최적화는 더 어려워집니다.
볼록 함수와 비볼록 함수
이 지점부터가 흥미롭습니다.
볼록 함수는 그릇 모양입니다. 곡선 위의 두 점을 잇는 선분은 항상 곡선 위나 위쪽에 놓입니다. 이 경우 어떤 국소 최소점도 전역 최소점이 됩니다. 즉, 옵티마이저가 바닥을 찾으면 진짜 바닥입니다.
비볼록 함수는 더 불규칙한 형태를 가집니다. 여러 개의 계곡, 평탄한 구간, 안장점이 있을 수 있습니다. 옵티마이저는 국소 최소점에 갇힐 수 있습니다. 바닥처럼 보이지만 실제 바닥이 아닌 지점입니다. 딥 신경망의 손실 표면은 매우 비볼록이기 때문에, 학습에는 학습률, 옵티마이저, 초기화의 신중한 튜닝이 필요합니다.
볼록 문제는 정확히 풀 수 있고, 비볼록 문제는 근사적으로 풉니다. 해의 품질은 최적화 전략에 달려 있습니다.
시각적인 비교를 원하신다면, 선형/비선형, 볼록/비볼록 목적 함수의 차이는 아래 이미지를 참고하세요:

목적 함수 유형 비교
목적 함수 최적화 방법
목적 함수를 정했다면, 이제 그것을 최소화하거나 최대화할 방법이 필요합니다. 여기서 최적화 알고리즘이 등장합니다.
가장 일반적인 접근은 경사 하강법입니다. 목적 함수의 모델 파라미터에 대한 그래디언트를 계산하고, 값을 줄이는 방향으로 작은 걸음을 뗍니다. 그다음 값이 더 이상 개선되지 않을 때까지 반복합니다.
그래디언트는 목적 함수의 미분입니다.
현재 위치에서의 기울기와 “오르막” 방향을 알려 줍니다. 함수를 최소화하려면 반대 방향으로, 최대화하려면 같은 방향으로 이동합니다.
이 과정은 반복적입니다. 즉, 해에 도달할 때까지 작은 업데이트를 연속으로 수행해 파라미터를 최적해에 가깝게 이동합니다. 각 걸음의 크기는 학습률이 제어합니다. 값이 너무 크면 최적해를 넘어설 수 있고, 너무 작으면 학습이 오래 걸립니다.
실제로 대부분의 ML 프레임워크는 기본 버전보다 빠르고 안정적인 경사 하강법 변형을 사용합니다:
- 확률적 경사 하강법(SGD)은 전체 데이터셋 대신 무작위 하나의 예시로 그래디언트를 계산합니다.
- 미니배치 경사 하강법은 작은 배치 단위로 그래디언트를 계산하여 SGD와 전체 배치의 중간 지점을 취합니다.
- Adam은 파라미터별로 학습률을 적응시키므로 튜닝이 더 수월합니다.
경사 기반 방법이 작동하려면 목적 함수가(대부분) 미분 가능해야 합니다. 미분이 없으면 그래디언트가 없고, 그러면 옵티마이저가 따라갈 방향이 사라집니다. 이 점을 꼭 기억하세요.
목적 함수 예시
간단한 선형 회귀 문제로 구체화해 보겠습니다.
평수(면적)로 주택 가격을 예측한다고 합시다. 가격이 알려진 주택 데이터셋이 있고, 예측 오차를 최소화하는 직선을 데이터에 맞추고자 합니다. 목적 함수는 이미 공식을 알고 있는 평균제곱오차(MSE)입니다.
입력은 모델 파라미터, 즉 직선의 기울기와 절편입니다. 출력은 단 하나의 숫자, 모든 예측에 대한 평균 제곱 오차입니다. 이 경우 숫자가 작을수록 더 좋습니다.
가능한 Python 구현은 다음과 같을 수 있습니다:
import numpy as np
np.random.seed(42)
# Generate some fake housing data
square_footage = np.random.uniform(500, 3000, 100)
true_price = 150 * square_footage + 50000 + np.random.normal(0, 15000, 100)
def predict(x, slope, intercept):
return slope * x + intercept
def mse(y_true, y_pred):
return np.mean((y_true - y_pred) ** 2)
# Try two different parameter sets
slope_a, intercept_a = 150, 50000 # good fit
slope_b, intercept_b = 80, 100000 # bad fit
pred_a = predict(square_footage, slope_a, intercept_a)
pred_b = predict(square_footage, slope_b, intercept_b)
print(f"MSE (good fit): {mse(true_price, pred_a):,.2f}")
print(f"MSE (poor fit): {mse(true_price, pred_b):,.2f}")

MSE 좋은 적합 vs 나쁜 적합
첫 번째 파라미터 조합이 훨씬 낮은 MSE를 냅니다. 즉, 데이터를 더 잘 맞춥니다. 옵티마이저는 바로 이런 정보를 바탕으로 어느 방향으로 이동할지 결정합니다.
시각적인 이해를 돕기 위해 아래 이미지를 참고하세요:

MSE 예시
두 적합 결과를 데이터에 겹쳐 본 모습과, 기울기 값 범위에서의 MSE 표면(즉, 목적 함수)을 함께 볼 수 있습니다.
왼쪽 그래프는 두 파라미터 조합의 적합도를, 오른쪽 그래프는 기울기 값에 따른 MSE 표면—즉 곡선 형태의 목적 함수와 옵티마이저가 찾으려는 뚜렷한 최소점을 보여 줍니다. 경사 하강법의 매 스텝은 이 곡선을 따라 최소점으로 이동합니다.
제약조건과 목적 함수
목적 함수는 무엇을 최적화할지 알려 줍니다. 제약조건은 무엇이 허용되는지를 알려 줍니다.
대부분의 실제 문제에서 마음껏 최대화나 최소화를 할 수는 없습니다. 예산, 시간, 물리적 용량과 같은 한계 안에서 작업합니다. 이러한 한계를 제약조건이라 하며, 옵티마이저가 선택할 수 있는 유효 해의 집합을 정의합니다.
제조 예시를 들어보겠습니다.
두 제품 라인에서 이익을 최대화하고 싶다고 합시다. 제약이 없다면 가능한 한 많이 생산하면 됩니다. 하지만 기계 시간 500시간과 원자재 1,000단위만 사용할 수 있습니다. 이것이 제약조건입니다. 목적 함수(이익 최대화)는 같지만, 옵티마이저는 제약조건이 허용하는 영역 안에서만 탐색할 수 있습니다.
제약조건을 바꾸면 목적 함수가 같아도 최적 해는 달라집니다.
이처럼 목적 함수와 제약조건의 조합 구조가 제약 최적화의 토대입니다. 선형 계획법, 포트폴리오 최적화, 다양한 현실의 계획 문제가 이 방식으로 정식화됩니다.
결론
신경망 학습, 자원 배분, 회귀 모델 적합 등 모든 최적화 문제는 결국 하나의 함수—최소화하거나 최대화하려는 대상—로 귀결됩니다.
그 함수가 바로 목적 함수입니다. “더 나음”의 정의를 내리고, 모든 파라미터 업데이트를 이끌며, 모델이 실제로 무엇을 학습할지 결정합니다. 목적 함수를 올바르게 설정하면 모델은 여러분의 문제를 해결할 수 있습니다. 반대로 잘못 설정하면 전혀 다른 문제를 훌륭히 풀어버릴 수도 있습니다—경고 신호 없이요.
적절한 목적 함수 선택은 데이터 과학에서의 설계 결정입니다. 이후의 모든 것을 좌우하니까요. 실무자라면 주저 말고 실험해 보세요—선택지는 다양합니다.
어디서 시작해야 할지 모르겠다면, Model Validation in Python 및 Hyperparameter Tuning in Python 코스가 초급~중급 데이터 과학자에게 좋은 출발점입니다.
FAQs
목적 함수란 무엇인가요?
목적 함수는 해법이 얼마나 좋은지를 측정하는 수학적 함수입니다. 모델 파라미터나 의사결정 변수 같은 입력을 넣으면 단 하나의 숫자를 반환합니다. 목표는 항상 그 숫자를 가능한 한 높이거나 낮추는 입력을 찾는 것입니다.
목적 함수와 손실 함수의 차이는 무엇인가요?
손실 함수는 머신 러닝에서 단일 학습 예시에 대한 예측 오차를 측정하는 특정 유형의 목적 함수입니다. 목적 함수는 더 넓은 용어로, 예측 오차에 국한되지 않고 여러분이 최소화 또는 최대화하려는 어떤 함수를 가리킵니다. 실무에서는 두 용어가 혼용되기도 하지만, 연구 논문을 읽을 때는 구분이 중요합니다.
목적 함수는 어디에 사용되나요?
목적 함수는 최적화가 관련된 모든 문제에 등장합니다. 머신 러닝, 선형 계획법, 자원 배분, 금융, 물류 등입니다. 머신 러닝에서는 학습 중 모델이 무엇을 배우는지 목적 함수가 정의합니다. ML 밖에서는 제약이 있든 없든 최적화 문제에서 목표를 정의합니다.
머신 러닝에서 목적 함수 선택이 중요한 이유는 무엇인가요?
목적 함수는 학습 중 모델이 실제로 무엇을 최적화하는지를 결정합니다. 잘못된 목적 함수를 선택하면 모델은 엉뚱한 대상을 최소화할 것이며, 그것도 매우 잘 수행해 문제를 알아채기 더 어렵습니다. 예를 들어, 분류 문제에 MSE를 사용하면 단지 성능이 나쁜 것에 그치지 않고, 자신 있게 나쁜 결과를 냅니다. 그게 더 위험합니다.
목적 함수에 최소점이 여러 개 있을 수 있나요?
그렇습니다. 이는 딥러닝 모델 학습의 핵심 과제 중 하나입니다. 비볼록 목적 함수에는 여러 개의 국소 최소점이 있어, 옵티마이저가 전역 최적해가 아닌 계곡에 갇힐 수 있습니다. 가중치 초기화, 학습률 스케줄링, 옵티마이저 선택이 중요한 이유가 여기에 있습니다. 최종적으로 좋은 해를 찾는 데 영향을 주기 때문입니다.