손실 함수
최적화 문제의 손실 함수는 어떻게 정의해야할까?
손실 함수 정의 기준
신경망 모델이 정확하게 예측하기 위해서 모델은 관측 데이터를 잘 설명하는 함수를 표현해야 한다, 이때 모델이 표현하는 함수의 현태를 결정하는 것이 손실 함수이다.
따라서 손실 함수는 최적의 해가 관측 데이터를 잘 설명할 수 있는 함수의 파라미터 값이 되도록 정의해야한다.
오차 최소화(Error Minimization)
모델의 오차를 최소화 시키는 방법
모델의 오차란 모델의 예측과 관측 데이터의 타깃의 차이를 말한다. 손실 함수의 목표가 모델의 오차를 최소화 하는 것 이므로 직관적이고 이해하기 쉽다.
따라서 손실 함수를 정의할 때 어떤 방식으로 오차의 크기를 측정할지만 정하면 된다.
$$ y(x_{j};\theta)-t_{i} = e $$
\( e \)는 오차이고 손실 함수 \( J(\theta) \)는 \( e \)의 크기를 나타내는 함수이다. 손실 함수의 설질은 어떤 함수로 오차의 크기를 표현하는지에 따라 달라진다.
오차의 크기를 나타내는 대표적인 함수를 벡터의 크기를 나타내는 노름(Norm)이다. 주로 \( L_{2}, L_{1} \) 노름을 사용하며 이때 손실 함수는 평균 제곱 오파(MSE), 평균 절대 오차(MAE)를 사용한다.
평균 제곱 오차(MSE: Mean Squared Error)
$$ J(\theta)=\frac{1}{N}\sum_{i=1}^{N}\left\|t_{i}-y(x_{i};\theta)\right\|^{2}_{2} $$
평균제곱오차는 N개의 데이터에 대해 오차의 \( L_{2} \) 노름의 제곱의 평균으로 정의되며 \( l_{2} \) 손실로 표기한다.
모델이 타깃 \( t_{i} \)의 평균(mean)을 예측하도록 만든다. 오차가 커질수록 손실이 제곱승으로 증가하기 떄문에 이상치에 민감하게 반응한다.
평균 절대 오차(MAE: Mean Absolute Error)
$$ J(\theta)=\frac{1}{N}\sum_{i=1}^{N}\left\|t_{i}-y(x_{i};\theta)\right\|_{1} $$
평균절대오차는 N개의 데이터에 대해 오차의 \( L_{1} \)노름의 평균으로 정의하며 \( l_{1} \) 손실로 표기한다.
평균절대오차는 모델이 타깃 \( t_{i} \)의 중앙값(median)을 예측하도록 만든다. 오차가 커질수록 손실이 선형적으로 증가하므로 이상치에 덜 민감하지만 미분 가능 함수가 아니기 때문에 구간별로 미분을 처리해야하는 단점이 있다.
최대 우도 추정(Maximum Likelihood Estimation)
모델이 추정하는 관측 데이터의 확률이 최대화되도록 하는 방법
우도는 모델이 추정하는 관측 데이터의 확률을 말한다. 손실 함수의 목표는 관측 데이터의 확률이 최대화 되는 확률 분포 함수를 모델이 표현하도록 만드는 것이다.
이 방식은 확률 모델인 경우에만 사용할 수 있고 최대우도추정(MLE) 방식이라고 한다.
$$ p(\mathfrak{D}|\theta )=\prod_{i=1}^{N}p(t_{i}|x_{t};\theta) $$
신경망 모델은 \( \theta \)로 이뤄진 확률 모델이고, 학습 데이터 \( \mathfrak{D}= \) {\({(x_{i}, t_{i}):i=1, \cdots, N} \)}의 각 샘플 \( (x_{t}, t_{i} \)는 같은 분포에서 독립적으로 샘플링되어 독립이라고 할 때 위와 같이 표현할 수 있음
최대우도추정 관점의 최적화 문제 개선
위의 정의한 최적화 문제를 조금만 변형하면 수치적으로 다루기 쉬워지고 안정적으로 최적화 할 수 있음
우도 -> 로그 우도 -> 음의 로그 우도
목적 함수를 로그 우도로 변환
로그 우도는 우도에 로그를 취한 형태로 목적 함수에 사용했던 관측 데이터의 우도 대신 로그 우도를 사용하면 아래와 같은 식으로 변함
$$ J(\theta) = log(\mathfrak{D}|\theta) = log \prod_{i=1}^N p(t_{i}|x_{i};\theta)= \sum_{i=1}^N logp(t_{i}|x_{i};\theta) $$
우도 대신에 로그 우도를 사용하는 이유는 아래와 같음
- 가우시안 분포, 베르누이 분포와 같은 지수 함수 형태로 표현되는 지수족 확률분포의 경우 로그를 취하면 지수 항이 상쇄되어 다항식으로 변환되기 때문에 함수를 다루기 쉬워짐
- N개의 샘플에 대한 우도의 곱을 로그 우도의 합산으로 바꾸면 언더플로를 방지할 수 있음 -> 확률을 1보다 작기 때문에 확률을 N번 곱할수록 언더플로가 쉽게 생기기 때문에(로그 우도를 사용하면 곱이 합산으로 바꾸어서 언더플로 방지)
- 로그우도로 변환하여도 최적해는 달라지지 않음
최대화 문제를 최소화 문제로 변환
최대화 문제를 최소화 문제로 변환하기 위해서는 로그 우도에 음수만 취해주면 되고 이는 NLL(Negative Log Likelihood)라고 부르는 손실함수가 됨
$$ NLL (\theta) = -log(\mathfrak{D}|\theta) = -\sum_{i=1}^N logp(t_{i}|x_{i};\theta) $$
최대우도추정 문제는 다음과 같은 표준 형태의 최소화 문제로 재정의 되었음
$$ argmin_{\theta} = -\sum_{i=1}^N logp(t_{i}|x_{i};\theta) $$
우도와 최대우도
관측데이터를 이용하여 확률분포를 추정할때 관측 데이터를 가장 잘 표현한다고 말할 수 있으려면 관측데이터의 확률을 최대화 해야함
\( \mathfrak{L}(\theta |x)를 최대화하도록 확률분포를 추정하는 것이 관측 데이터를 가장 잘 표현하는 확률분포를 추정하는 것이다. 위의 그림같은 경우에는 보라색 확률 분포가 관측 데이터를 가장 잘 표현하는 확률 분포이다.
우도는 추정된 분포가 관측 데이터를 얼마나 잘 따르는지에 대한 측도이며, 우도를 최대화하는 방식이 최대우도측정 방식이다.
회귀 문제 최대우도추정 손실함수
회귀문제에 최대우도추정을 위한 손실 함수를 정의해보면 회귀 모델이 추정하는 가우시안 분포 \( p(t_{i}|x_{i}; \theta ) \)는 신경망 모델이 출력한 평균 \( y(x_{i};\theta) \)와 정밀도의 역수 \( \beta^{-1} \)를 분산으로 하는 분포로 정의됨
$$ p(t_{i}|x_{i};\theta) = N(t_{i}|y(x_{i};\theta ),\beta ^{-1}) = \frac{1}{ \sqrt{\beta ^{-1}2\pi}}e^{- \frac{(t_{i}-y(x_{i};\theta))^{2}}{2\beta ^{-1}}} $$
오차제곱합이 나오는 것을 확인할 수 있다.
이진 분류 문제 최대우도추정 손실 함수
이진분류문제에 최대우도추정을 위한 손실 함수를 정의해보면 이진 분류 모델이 추정하는 베르누이 분포 \( p(t_{i}|x_{i}; \theta) \)는 신경망 모델이 출력한 첫 번째 클래스의 발생 확률인 \( \mu (x_{i}; \theta) \)로 정의됨
이진 분류 모델이 추정하는 분포
이를 통해 손실함수를 정의해보면 아래와 같다.
다중 분류 문제 최대우도추정 손실 함수
다중분류문제 최대우도추정을 위한 손실 함수를 정의해보자.
다중 분류 모델이 추정하는 카테고리 분포
신경망 모델을 통해 추정된 카테고리 분포의 음의 로그 우도를 손실 함수로 정의해보면 아래와 같다.
'Machine Learning > 기법' 카테고리의 다른 글
[ML] 정규화 (0) | 2023.01.16 |
---|---|
[ML] Optimizer 옵티마이저, 최적화 (0) | 2023.01.13 |
[ML] 경사하강법 (0) | 2023.01.09 |
[ML] 회귀 모델 (0) | 2023.01.04 |
[ML] 다중 분류 모델 (0) | 2023.01.04 |