1. Loss Function
Loss(손실)란 정답값과 예측값의 오차를 의미한다
Loss Function의 정의:
- Neural Network 모델이 예측한 값 ˆY와 실제 값 Y 간의 차이의 지표를 의미한다
- 대표적으로 MSE가 있다. L(Y,ˆY)=1Nn∑1(yi−^yi)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,ˆY)=1NN∑n=1(yi−^yi)2
- 장점 : Convergence가 더 빠르다
- 단점 : Anomaly에 더 민감하다
(2) L1 Loss (MAE)
L(Y,ˆY)=1NN∑n=1|yi−^yi|
- 장점 : L2에 비해 anomaly에 비교적 robust하다.
- 단점 : 0에서 미분가능하지 않다
(3) Huber Loss
{12(yi−^yi)2if|(yi−^yi)|<δδ×(|yi−^yi|−δ2) if otherwise
- 장점 : L2의 fast convergence와 L1의 Robust의 장점을 모두 겸비하고 있다
- 단점 : 한 번만 전구간 미분가능하다
(4) Log - Cosh Loss
log(cosh(^yi−yi))
- Huber Loss와 유사하지만 전구간 미분이 두 번 가능하다
2. Classification의 Loss
Ground Truth Label : Yi,c = i번째 데이터의 레이블이 class c일 확률
Predicted Label : ˆYi,c = i번째 data의 레이블이 class c라고 예측할 확률
(1) Cross Entropy Loss
C∑c=1−Yi,c⋅logˆYi,c
(2) KL Divergence Loss
C∑c=1Yi,c⋅log(Yi,cˆYi,c)
- 장점: 학습 속도가 빠르다
- 단점: Outlier및 Noise에 더 취약, 민감하다.
(3) L1 Loss (MAE)
L(Y,ˆY)=1NN∑n=1|yi−^yi|
- 장점 : 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 ▽wL 계산
- optimizer.step(): gradient descent하여 다음 step의 gradient를 업데이트한다
reduction = 'mean'과 'none'의 차이
(1) reduction = "none"
- 각 데이터 sample 별로 loss를 구한다. 주로 evaluation 단계에서 사용
L(Y,ˆY)∈Rb
(2) reduction = "mean"
- 각 데이터 sample 별로 loss를 구해서 average를 취한다. 주로 Training 단계에서 사용 B∑b=1L(Y,ˆY)∈Rb
Loss Function" target="_blank" rel="noopener" data-mce-href="http://Loss Function">http://Loss Function
GitHub - taekyounglee1224/Pytorch_DL: Hands-on deep learning models with Pytorch
Hands-on deep learning models with Pytorch . Contribute to taekyounglee1224/Pytorch_DL development by creating an account on GitHub.
github.com
'산업공학 > Deep Learning' 카테고리의 다른 글
[딥러닝] Activation Function (활성화 함수) (2) | 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 (1) | 2024.08.16 |