머신러닝에서의 손실 함수 📂머신러닝

머신러닝에서의 손실 함수

Loss Function

정의

데이터 $Y = \begin{bmatrix} y_{1} \\ \vdots \\ y_{n} \end{bmatrix}$ 에 대한 추정치가 $\widehat{Y} = \begin{bmatrix} \widehat{ y_{1} } \\ \vdots \\ \widehat{y_{n}} \end{bmatrix}$ 와 같이 주어져 있을 때 데이터와 추정치의 괴리도를 나태는 스칼라 함수 $L : \mathbb{R}^{n} \to [ 0 , \infty )$ 를 손실 함수라 한다.

다른 이름

손실 함수는 학습을 통해 얻은 데이터의 추정치가 실제 데이터와 얼마나 차이나는지 평가하는 지표로 쓰인다. 이 값이 크면 클수록 많이 틀렸다는 의미고, 이 값이 $0$ 이라는 것은 ‘무손실’ 즉 완벽하게 추정할 수 있다는 의미가 된다. 이는 수학에서 말하는 메트릭과 크게 다를 바가 없다.

원래 경제학에서 먼저 쓰인 단어기 때문에 $L$ 은 때때로 비용 함수Cost Function 라 불리기도 한다.

종류

다음 두가지는 대표적인 손실 함수로, 용도에 알맞게 사용할 정도로만 알면 충분하다.

MSE(Mean of Squared Error)

$$ L \left( \widehat{Y} \right) := {{1} \over {n}} \sum_{i=1}^{n} ( y_{i} - \widehat{ y_{i} } )^2 $$ MSE는 유서 깊은 손실 함수로써, $y_{i} \in \mathbb{R}$ 일 때 유의미하게 사용할 수 있다.

크로스 엔트로피

$$ L \left( \widehat{Y} \right) := - {{1} \over {n}} \sum_{i=1}^{n} \left< y_{i} , \log \left( \sigma ( \hat{y_{i}} ) \right) \right> $$

크로스 엔트로피는 이른바 원-핫 코딩을 할 때 유효한 수단이 되며, $Y$ 가 범주형 데이터일 때 $\widehat{Y}$ 가 추정한 각각의 확률을 이용해 계산한다. 주로 분류 문제에 사용된다.

원-핫 코딩이란 그냥 범주의 이진법 전개를 말한다. $2^{m}$ 개의 계급이 있다면 각각의 $y_{i}$ 와 $\hat{y_{i}}$ 는 $j = 1 , \cdots , m$ 에 대해 $y_{i} = ( y_{i1} , \cdots , y_{ij} , \cdots , y_{im} ) \in \left\{ 0 , 1 \right\}^m$, $\hat{ y_{i} } = ( \hat{ y_{i1} } , \cdots , \hat{y_{ij}} , \cdots , \hat{y_{im}} ) \in \left\{ 0 , 1 \right\}^m$ 과 같은 벡터로 나타난다.

예를 들어 $Y$ 가 다섯 개의 계급을 갖는다면 $1$ 은 $y_{i_{0}} = [0,0,1]$, $4$ 는 $[1,0,0]$ 처럼 나타내는 식이다.

$\sigma$ 는 소프트맥스 함수로써 주어진 벡터의 값들을 $[0,1]$ 에 바운드 시키고 확률분포의 조건을 만족시키게 하는 함수다. $\left< \cdot , \cdot \right>$ 은 내적이다. $\sigma ( \hat{y_{i}} ) \in [0,1]$ 이므로 $\log \left( \sigma ( \hat{y_{i}} ) \right) < 0$ 이고 $y_{i}$ 는 $0$ 혹은 $1$ 이므로 $$ L \left( \widehat{Y} \right) = - {{1} \over {n}} \sum_{i=1}^{n} \left< y_{i} , \log \left( \sigma ( \hat{y_{i}} ) \right) \right> \ge 0 $$ 임을 쉽게 확인할 수 있다.

$y_{i} = ( y_{i1} , \cdots , y_{ij} , \cdots , y_{im} )$ 의 추정치인 $\hat{ y_{i} } = ( \hat{ y_{i1} } , \cdots , \hat{y_{ij}} , \cdots , \hat{y_{im}} )$ 의 각 성분들은 확률이 높을수록 큰 값, 낮을 수록 낮은 값을 갖는다. 이를 소프트맥스 함수에 넣으면 확률이 클수록 $1$ 에 가깝고 낮을수록 $0$ 에 가까운 값으로 조정된다. 만약 실제 성분이 $1$ 인데 확률을 낮게 계산했다면 $- 1 \cdot \log (c)$ 은 $c\ll 1$ 이므로 꽤 큰 값이 된다. 반대로 실제 성분이 $0$ 인데 확률을 높게 계산해봐도 $- 0 \cdot \log(c)$ 은 큰 의미가 없다. 따라서 많이 틀리면 틀릴수록 크로스 엔트로피가 치솟게 될 것임을 어렵지 않게 짐작할 수 있다.

같이보기

댓글