손실 함수: 딥러닝 기초 시리즈 3

이 글은 손실 함수에 대한 기본적인 개념을 소개하고, 딥 러닝 모델에서 손실 함수의 역할과 활용 예제를 다루고 있습니다.

손실 함수는 모델의 성능을 평가하고 향상시키는 데 중요한 역할을 하는 핵심 개념입니다.

이 글을 통해 손실 함수의 중요성과 다양한 종류에 대한 이해를 높일 수 있습니다.


목차

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

참고 문헌 및 참고자료: 밑바닥부터 시작하는 딥러닝


손실 함수란?

손실 함수란?

손실 함수는 우리가 학교에서 시험을 볼 때 와 비슷합니다. 우선 목표점수를 설정하고, 실제 점수와 목표점수를 비교하여 그 차이를 수치로 나타낸 것입니다.

즉 기계 학습을 공부하는 컴퓨터 프로그램(모델)에게 얼마나 잘 일을 하고 있는지를 알려줍니다. 모델은 목표로 하는 결과와 실제 결과가 얼마나 다른지를 계산합니다.

차이값이 적으면 손실값이 적고, 이 차이값이 크면 손실값이 큽니다.

그래서 모델은 손실을 줄이는 방향으로 학습합니다. 모델은 손실을 줄이기 위해 스스로 공부하면서 예측을 개선해나가요. 여기서 개선을 하는 방법은 주로 가중치 w 를 수정하는 방향으로 합니다.

손실 함수의 종류는 문제에 따라 다양합니다. 예를 들어, 회귀 문제에서는 평균 제곱 오차(Mean Squared Error)를 사용하고, 분류 문제에서는 교차 엔트로피 손실(Cross-Entropy Loss)을 주로 씁니다. 각각의 다른 종류의 문제에 사용됩니다.

요약하면, 손실 함수는 모델이 얼마나 잘 일을 하는지를 평가하고, 모델이 더 나은 성적을 받을 수 있도록 도와주는 중요한 도구라고 할 수 있습니다.

회귀 문제(Regression Problem):
회귀 문제는 머신 러닝과 통계학에서 사용되는 문제 유형 중 하나로, 연속적인 값을 예측하는 과제를 다룹니다. 즉, 입력 데이터와 출력 데이터 간의 관계를 모델링하고, 입력 데이터가 주어졌을 때 연속적인 출력 값을 예측하는 것이 목표입니다. 예를 들어, 집의 크기, 위치, 건축 연도 등의 특성을 사용하여 주택 가격을 예측하는 것이 회귀 문제의 한 예입니다. 회귀 모델은 주로 평균 제곱 오차(Mean Squared Error)와 같은 손실 함수를 사용하여 예측 값과 실제 값 사이의 차이를 최소화하도록 학습됩니다.

분류 문제(Classification Problem):
분류 문제는 머신 러닝과 패턴 인식에서 매우 일반적인 문제 유형 중 하나로, 입력 데이터를 미리 정의된 클래스 또는 범주 중 하나로 분류하는 과제를 다룹니다. 즉, 주어진 입력 데이터가 어떤 범주에 속하는지 예측하는 것이 목표입니다. 예를 들어, 이메일 메시지가 "스팸" 또는 "스팸 아님" 중 어느 범주에 속하는지 분류하는 것이 분류 문제의 한 예입니다. 분류 모델은 주로 교차 엔트로피 손실(Cross-Entropy Loss)와 같은 손실 함수를 사용하여 예측 결과와 실제 레이블 간의 차이를 최소화하도록 학습됩니다.

요약하면, 회귀 문제는 연속적인 값을 예측하는 문제이며, 분류 문제는 입력 데이터를 범주 또는 클래스로 분류하는 문제입니다.

오차제곱합(Sum of squares for error, SSE)

오차 제곱합(Sum of Squared Errors, SSE)은 회귀 분석에서 사용되는 중요한 개념 중 하나입니다. 오차 제곱합은 다음과 같이 정의됩니다:

  1. 주어진 데이터 셋에서 각 데이터 포인트(데이터 샘플)의 실제 값과 모델의 예측 값 사이의 차이를 계산합니다.
  2. 이 차이를 제곱한 후, 모든 데이터 포인트에 대한 제곱 오차를 합산합니다.
  3. 이렇게 계산된 제곱 오차 합을 오차 제곱합이라고 합니다.

수식으로 나타내면 다음과 같습니다:

SSE = \frac{1}{2} \ (실제 값 - 모델 예측 값)^2 \ 들의 합 = \frac{1}{2} Σ(실제 값 - 모델 예측 값)^2 = \frac{1}{2} \sum_{k=1} (y_k - t_k)^2

오차 제곱합은 회귀 모델의 성능을 평가하고 모델이 얼마나 잘 데이터를 설명하고 있는지를 나타내는 지표 중 하나입니다. 오차 제곱합이 작을수록 모델이 데이터를 더 잘 설명하고 있으며, 오차 제곱합을 최소화하는 것이 회귀 분석에서의 목표입니다. 최소화된 오차 제곱합을 가지는 모델은 데이터에 가장 잘 맞는 모델로 간주됩니다.

오차 제곱합은 평균 제곱 오차(Mean Squared Error, MSE)와도 관련이 있으며, MSE는 SSE를 데이터 포인트의 개수로 나눈 값입니다. 따라서 MSE = SSE / 데이터 포인트 개수가 됩니다. 평균 제곱 오차는 오차 제곱합을 데이터 포인트의 수로 정규화한 것으로, 모델의 성능을 더 쉽게 비교할 수 있도록 합니다.

우선 활성화 함수중 하나인 소프트맥스에 이전 글에서 알아보았습니다. y_t를 소프트 맥스를 이용해 나온 결과값이라고 가정을 하고

y_t = (0.1,0.1,0.4,0.2,0.2) 라고 생각해 보겠습니다.

t_k = (0,0,1,0,0)

그리고 t_k 는 원 핫 인코딩입니다. 즉 정답인 레이블만 1이고 나머지는 요소는 0입니다. 인덱스 2가 정답인 레이블입니다. (인덱스는 0부터 시작)

이제 오차 제곱합을 계산해 보면 아래와 같습니다.

SSE = \frac{1}{2} \left\{0.1-0)^2+(0.1-0)^2+(0.4-1)^2+(0.2-0)^2+(0.2-0)^2 \right\} SSE = 0.23

이제 코드로 구현하면 아래와 같습니다.

Python
import numpy as np

def SSE(t_k, y_k):
    if t_k.shape != y_k.shape:
        raise ValueError("행렬 모양이 다름.")
    
    sse = 0.5 * np.sum((t_k - y_k) ** 2)
    
    return sse

# 예시 데이터
t_k = np.array([0, 0, 1, 0, 0])
y_k = np.array([0.1, 0.1, 0.4, 0.2, 0.2])

sse = SSE(t_k, y_k)
print(f"SSE: {sse}")

#결괏값
#SSE: 0.23000000000000004

엔트로피 (Entropy)

엔트로피는 열역학에서 온 개념으로 무질서도를 이야기 합니다.

  • 확률 p로 사건이 발생하는 경우의 정보량은 -log(p) 로 나타낼 수 있습니다. 이것은 사건이 더 낮은 확률로 발생할수록 정보량이 증가합니다. 즉 높은 확률의 사건에 정보량을 줄여 효율적이게 만드는 것입니다.
  • 엔트로피는 확률 분포의 기대값(평균)으로 정의되며, 주어진 확률 분포에서의 정보량의 평균입니다.
    엔트로피 H(X)의 정의:H_1(X) = -\sum p(x) \times \log p(x) 여기서 p(x)는 확률 변수 X가 특정 값을 가질 확률을 나타내며, Σ는 모든 가능한 값에 대한 합계입니다.
  • 엔트로피가 낮을수록 확률 분포는 더 예측 가능하며 정보의 양이 적습니다. 엔트로피가 높을수록 확률 분포는 더 무질서하며 정보의 양이 큽니다. 여기서 왼쪽그림은 질서가 있는 가우시안 분포(정규 분포: Normal Distribution)를 나타내므로 엔트로피가 낮습니다.

모든 확률이 동일하게 발생하는 경우(오른쪽 그림) 엔트로피의 최대가 됩니다.

코드로 구현하면 아래와 같습니다.

Python
import numpy as np

def entropy(p):
    epsilon = 1e-7  # 로그의 분모에 0이 들어가는 것을 방지하기 위한 작은 값
    
    # 엔트로피 계산
    ent = -np.sum(p * np.log(p + epsilon))
    
    return ent

# 예시 데이터
p = np.array([0.1, 0.1, 0.4, 0.2, 0.2])

# 엔트로피 계산
ent = entropy(p)
print(f"ent: {ent}")

#결괏값
#ent: 1.470807976322274

크로스 엔트로피 에러(Cross Entropy Error)

일반 엔트로피의 식을 보면 H_1(X) = -\sum p(x) \times \log p(x) 입니다. 여기서 p(x)는 실제 확율 분포라고 생각하고, q(x) 를 내가 예상한 확률 분포라고 생각해 볼때

Cross Entropy 는 아래와 같습니다:H_2(X) = -\sum p(x) \times \log q(x)

이제 코드로 구현하면 아래와 같습니다. 여기서 epsilon은 분모가0이 되어 오류가 뜨는것을 방지하기위한 값입니다.

Python
import numpy as np

def cross_entropy_loss(p, q):
    epsilon = 1e-7  # 로그의 분모에 0이 들어가는 것을 방지하기 위한 작은 값
    
    # CCE 계산
    cce = -np.sum(p * np.log(q + epsilon))
    
    return cce

# 예시 데이터
p = np.array([0.1, 0.1, 0.4, 0.2, 0.2])
q = np.array([0, 0, 1, 0, 0])

# CCE 계산
cce = cross_entropy_loss(p, q)
print(f"CCE: {cce}")

#결괏값
#CCE: 0.9162907318741526

쿨백-라이블러 발산(Kullback–Leibler divergence, KLD)

KL 다이버전스또한 두 확률분포의 유사성을 알아내는 공식이고 엔트로피와 크로스 엔트로피의 차이입니다.

쿨백-라이블러 발산은 주로 VAE 의 손실함수로 크로스 엔트로피나,  오차제곱합과 함께 이용합니다.

즉 KLD:KLD(p || q) = H_2(x) - H_1(X) = -\sum p(x) \times \log q(x) - (-\sum p(x) \times \log p(x))

= -\sum p(x) \times \log q(x) + \sum p(x) \times \log p(x) = \sum p(x) \times ( \log p(x) - \log q(x)) = \sum p(x) \times \log \frac{p(x)}{q(x)}
Python
import numpy as np

def KLD(p, q):
    epsilon = 1e-7  # 로그의 분모에 0이 들어가는 것을 방지하기 위한 작은 값

    # KL Divergence 계산
    kld = np.sum(p * np.log(p + epsilon) - p * np.log(q + epsilon))
    
    return kld  # 결과값을 KL Divergence로 반환

# 예시 데이터
p = np.array([0.1, 0.1, 0.4, 0.2, 0.2])
q = np.array([0, 0, 1, 0, 0])

# KL Divergence 계산
kld = KLD(p, q)
print(f"KL Divergence: {kld}")

# 결과값
# KL Divergence: 8.200049374252721

결론

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

지금까지 손실 함수에 대한 기본적인 개념을 소개하고, 딥 러닝 모델에서 손실 함수의 역할과 활용 예제를 다루었습니다. 손실 함수는 모델의 성능을 평가하고 향상시키는 데 중요한 역할을 하는 핵심 개념입니다.

손실 함수는 모델의 출력과 실제 값 간의 차이를 측정하며, 모델이 학습하는 과정에서 이 차이를 최소화하는 방향으로 모델 파라미터(주로 가중치)를 조정합니다. 이를 통해 모델은 더 나은 예측을 할 수 있도록 학습됩니다.

손실 함수의 종류는 문제 유형에 따라 다양하며, 회귀 문제와 분류 문제에 따라 다른 손실 함수를 사용합니다. 회귀 문제에서는 주로 평균 제곱 오차(Mean Squared Error)와 같은 손실 함수를 사용하고, 분류 문제에서는 교차 엔트로피 손실(Cross-Entropy Loss)과 같은 손실 함수를 주로 적용합니다.

손실 함수는 모델의 학습과 평가에서 핵심적인 역할을 하며, 모델의 성능을 평가하고 개선하기 위해 다양한 손실 함수를 사용하는 것이 중요합니다. 이를 통해 모델이 목표로 하는 작업을 수행하는 데 더 효과적으로 학습할 수 있습니다.

마지막으로, 손실 함수와 모델 학습은 머신 러닝과 딥 러닝에서 핵심적인 주제 중 하나이며, 손실 함수의 이해는 모델 개발 및 조정 과정에서 필수적입니다.

4 thoughts on “손실 함수: 딥러닝 기초 시리즈 3”

Leave a Comment