1. Loss Function
Loss(손실)란 정답값과 예측값의 오차를 의미한다
Loss Function의 정의:
- Neural Network 모델이 예측한 값 $\hat{Y}$와 실제 값 $Y$ 간의 차이의 지표를 의미한다
- 대표적으로 MSE가 있다. $$L(Y, \hat{Y}) = \frac{1}{N} \sum_{1}^{n} (y_i - \hat{y_i})^2$$
따라서 이 $L$값이 낮아질수록 NN 모델의 성능은 좋아진다고 볼 수 있다. 즉, 손실함수의 값이 최소가 되도록 weight들의 값을 최적화하는 것이 모델 학습의 목적인 것이다.
2. Deep Learning의 Task
Loss Function은 풀고자 하는 Task에 따라 다르다.
1. Regession (회귀) : 어떤 연속적인 값을 예측하는 Task
2. Classification (분류) : 어떤 클래스의 라벨을 예측하는 Task
1. Regression의 Loss
(1) L2 Loss (MSE)
$$L(Y, \hat{Y}) = \frac{1}{N} \sum_{n = 1}^{N} (y_i - \hat{y_i})^2$$
- 장점 : Convergence가 더 빠르다
- 단점 : Anomaly에 더 민감하다
(2) L1 Loss (MAE)
$$L(Y, \hat{Y}) = \frac{1}{N} \sum_{n = 1}^{N} |y_i - \hat{y_i}|$$
- 장점 : L2에 비해 anomaly에 비교적 robust하다.
- 단점 : 0에서 미분가능하지 않다
(3) Huber Loss
$$\begin{cases}
& \frac{1}{2}(y_i - \hat{y_i})^2 \quad \quad \text{if} \;\;|(y_i - \hat{y_i})| < \delta \\
& \delta \times (|y_i - \hat{y_i}| - \frac{\delta}{2}) \quad \quad \text{ if } \;\; \text{otherwise}
\end{cases}$$
- 장점 : L2의 fast convergence와 L1의 Robust의 장점을 모두 겸비하고 있다
- 단점 : 한 번만 전구간 미분가능하다
(4) Log - Cosh Loss
$$ log(cosh( \hat{y_i} - y_i))$$
- Huber Loss와 유사하지만 전구간 미분이 두 번 가능하다
2. Classification의 Loss
Ground Truth Label : $Y_{i,c}$ = i번째 데이터의 레이블이 class c일 확률
Predicted Label : $\hat{Y}_{i,c}$ = i번째 data의 레이블이 class c라고 예측할 확률
(1) Cross Entropy Loss
$$\sum_{c = 1}^{C} - Y_{i,c} \cdot log \hat{Y}_{i,c}$$
(2) KL Divergence Loss
$$\sum_{c = 1}^{C} Y_{i,c} \cdot log( \frac{Y_{i,c}}{\hat{Y}_{i,c}})$$
- 장점: 학습 속도가 빠르다
- 단점: Outlier및 Noise에 더 취약, 민감하다.
(3) L1 Loss (MAE)
$$L(Y, \hat{Y}) = \frac{1}{N} \sum_{n = 1}^{N} |y_i - \hat{y_i}|$$
- 장점 : Outlier및 Noise에 비교적 robust하다.
- 단점 : 학습 속도가 Cross Entropy나 KL Divergence에 비해 느리다
3. Pytorch로 구현하기
<pseudo code>
# initalize loss function
loss_fnc = nn.MSELoss(reduction = "mean")
for batch in dataloader:
input, ground_truth = batch
optimizer = zero.grad()
predicted = model(input)
#compute loss
loss = loss_fnc(predicted, ground_truth)
loss.backward() #backward pass
optimizer.step() #step function
- loss.backward(): loss에 대한 gradient $\bigtriangledown_w L$ 계산
- optimizer.step(): gradient descent하여 다음 step의 gradient를 업데이트한다
reduction = 'mean'과 'none'의 차이
(1) reduction = "none"
- 각 데이터 sample 별로 loss를 구한다. 주로 evaluation 단계에서 사용
$$L(Y, \hat{Y}) \in \mathbb{R^b}$$
(2) reduction = "mean"
- 각 데이터 sample 별로 loss를 구해서 average를 취한다. 주로 Training 단계에서 사용 $$\sum_{b = 1}^{B} L(Y, \hat{Y}) \in \mathbb{R^b}$$
Loss Function" target="_blank" rel="noopener" data-mce-href="http://Loss Function">http://Loss Function
'AI & Data > Deep Learning' 카테고리의 다른 글
[딥러닝] Activation Function (활성화 함수) (1) | 2024.09.08 |
---|---|
[딥러닝] Gradient Descent (경사하강법) - 심화 (0) | 2024.08.28 |
[딥러닝] PyTorch - Transforms (1) | 2024.08.17 |
[딥러닝] PyTorch - Dataset and Data Loader (0) | 2024.08.17 |
[딥러닝] PyTorch - Tensor (0) | 2024.08.16 |