[DL] 2. Loss Function (MSE, CEE)

2024. 2. 8. 17:02ML/DL

저번 글에서, (인공) 신경망이 무엇인지 알아보았다.

 

그럼 지금부터, 어떻게 (인공) 신경망으로 문제를 풀 수 있는지 예시를 통해 알아보겠다.

예시: 칼바람 1대1 승패 예상

A와 B의 롤 티어와 플레이할 챔피언의 숙련도가 주어졌을 때, 칼바람 1대1 승패를 예측하는 문제를 (인공) 신경망으로 풀어보자!

다시 말해, 2명의 롤 티어와 챔피언 숙련도가 입력값으로 주어졌을 때, 칼바람 1대1 승패를 출력값으로 반환하는 (인공) 신경망을 만들어보자!

 

신경망 설계

우선, 신경망을 설계해야 한다.

어떤 특징을 추출해야 문제풀이에 도움이 될지 모르겠지만,

아래 방식으로 특징을 추출하면 문제풀이에 도움이 되는 특징을 얻을 수 있다고 추정했다.

$h$ = $a\times$(A 티어) + $b\times$(A의 챔피언 숙련도) + $c\times$(B 티어) + $d\times$(B의 챔피언 숙련도) + $e$

 

그리고, 위 방식으로 추출한 5개 특징($h_i$)과 결과값($o$)은 아래와 같은 선형 관계를 갖을거라 추정했다.

$o = w_1h_1 + w_2h_2 + \cdots + w_5h_5$

 

이를 (인공) 신경망으로 설계하면 다음과 같이 나타낼 수 있다.

손실 함수(Loss Function)

이제부터 해야할 일은 수 많은 매개변수 조합 중 어느 매개변수 조합이 승패 예측을 가장 잘하는지 찾는 것이다.

다시 말해, 최적의 매개변수 조합을 찾아야 한다.

그럼, 어느 매개변수 조합이 좋은지 판단할 수 있어야 하며, 이를 위해선 판단 기준( or 지표)가 있어야 한다.

머신러닝에서는 일반적으로 값이 낮을수록 좋은 "손실 함수"를 판단 기준으로 사용한다.

 

좋은 손실 함수를 얻기 위해서는, 풀고자 하는 문제를 잘 이해해야 한다.

다시 말해, 문제를 더 잘 해결하는 (인공) 신경망이 되기 위해서는 무엇을 줄어야 하는지 잘 파악한 후,

그에 맞게 손실 함수를 정의해야 한다.

참고로, 딥러닝 기법은 ML의 한 기법이기 때문에, 데이터를 기반으로 손실 함수를 정의해야 한다.  

 

손실 함수를 임의로 정하여 사용해도 되지만, 일반적으로 "평균 제곱 오차"와 "교차 엔트로피 오차"를 사용한다.

 

1. 평균 제곱 오차(Mean Squared Error, MSE)

 

MSE의 수식은 다음과 같다.

$$\text{MSE(Mean Square Error)}=e_1^2 + e_2^2 + \cdots + e_n^2 = \sum_{i=1}^n e_i^2$$

회귀 문제인 경우 $e_i = (t_i - y_i)$이지만, 분류 문제일 때는 $e_i = \sqrt{\sum_k (t_{i,k} - y_{i,k})^2}$이다. 

(왜냐하면, 분류 문제 데이터가 one-hot encoding 표기법을 사용하기 때문이다.)

 

물론, 제곱의 합($\sum_{i=1}^n e_i^2$)말고 절댓값의 합($\sum_{i=1}^n |e_i|$)으로 손실 함수를 정의할 수 있다.

차이점은, 제곱은 error에 더 민감하고, 절댓값은 error에 덜 민감하다. 그렇기 때문에, 데이터에 outlier가 존재할 경우 제곱보다는 절댓값을 사용하는게 적절하다.

(참고로, $n$으로 나눠주는 것이 정확한 것이지만, 나누지 않아도 손실 함수의 최소 지점은 같기에 생략했다.)

 

2. 교차 엔트로피 오차(Cross Entropy Error, CEE)

 

CEE의 수식은 다음과 같다.

$$\text{CEE(Cross Entropy Error)}= -\sum_{i=1}^n\sum_k t_{i,k} \log y_{i,k}$$

 

MSE와 다르게 CEE는 분류 문제에서만 사용 가능하기 때문에, 데이터 표기법이 one-hot encoding이다.

(교차 엔트로피는 정보 이론에서 나온 용어이다. 이에 대해서는 차후에 자세히 살펴볼 것이다.)

추가: 왜 정확도를 판단 기준으로 사용하지 않는가?

문제를 가장 잘 해결하는 (인공) 신경망은 정확도가 가장 높은 (인공) 신경망을 뜻한다.

근데, 정확도 말고 손실 함수를 판단 기준으로 삼은 이유가 무엇일까?

 

매개변수의 미분값이 대부분 구간에서 0이기 때문이다. 왜냐하면 정확도는 불연속적이기 때문이다.

쉽게 말하자면, 매개변수를 약간 조정해서는 정확도가 변하지 않기 때문이다.

계단 함수를 (인공) 신경망의 활성화 함수로 사용하지 않는 이유랑 동일하다.

(다음 글에서 매개변수 미분값이 0이 되면 안되는지 자세히 설명하겠다.)

 

결론, 정확도와 같은 함수(=값이 높을수록 매개변수가 최적에 가까워지는 함수)를 판단 기준으로 사용하기 위해서는 연속적이어야 한다.


지금까지 매개변수($\theta$)가 좋은지 판단할 수 있는 "손실 함수"에 대해 알아봤다.

그럼, 손실 함수로 최적의 매개변수($\hat\theta$)를 찾아보자. 다시 말해, 손실(=loss)이 최소가 되는 매개변수($\hat\theta$)를 찾아보자!

 

가장 먼저 떠오르는 방법은 "매개변수를 일일이 바꿔가며 손실값이 가장 낮은 매개변수를 찾는 것"이다.

하지만, 위 방식은 시간이 매우 오래 걸리는 매우 무식한 방법이다.

 

두번째 방법은 "손실 함수()의 도함수를 구해 미분값이 0이 되는 부분을 찾는 것"이다.

하지만, 함수가 복잡해질수록 도함수 구하기가 매우 어려워져, 이도 매우 비효율적인 방법이다.

 

때문에, 우리는 이보다 더 빠르게 효율적으로 최적의 매개변수($\hat\theta$)를 구하는 방법을 찾아봐야 한다.

다음 글에서는 대표적인 방법인 Gradient Descent에 대해 살펴볼 것이다.