-
[주간학습 정리] Week 1Naver AI Tech 2024. 8. 9. 13:45
학습 중 생긴 이론적 이슈 및 해결방법에 대해 기록하자
1. nn.BCELoss() 파라미터 순서
이슈: train loss가 비정상적으로 크고 학습하면서 감소가 되지 않는다.
- BCELoss(Binary Cross Entropy Loss)는 이진 분류 문제에서 예측값과 실측값의 차이를 측정하는데 사용된다
- 예측값과 실측값 간의 교차 엔트로피를 계산하여 손실을 산출한다
- loss_function = nn.BCELoss() 일때
- loss_function(예측값, 실측값) 순서로 작성해야한다
- 예측값과 실측값 순서가 잘못된 경우의 문제점
- 손실값의 왜곡
- 훈련 오류
- 수식적인 이유
- 수식에서 p는 예측값(0~1 사이의 확률값), y는 실측값(0 또는 1)을 의미한다
- 참고로 log의 경우, log(0) = -infinity 이고 log(1) = log(1) 이다
- 즉, 예측값과 실측값의 입력 순서가 바뀔경우, 계산상에 오류가 발생한다
import torch.nn as nn loss_function = nn.BCELoss() # pre: 예측값, gt: 실측값 loss = loss_function(pred, gt)
2. torch.max(t, 0) vs torch.max(t, torch.tensor(0.)) 비교
이슈: 원하는데로 양수 결과값이 반환되지 않는다
- 텐서 t 가 있을때
- torch.max(t, 0)은 t 텐서와 스칼라값 0을 비교한것이 아니라 t 텐서의 특정 차원에 대한 최대값을 계산한다
- 0은 차원을 의미하며, t 텐서의 첫번째 차원에 대한 최대값을 계산한다
- 이 연산은 다음 두개의 결과를 반환한다
- 최대값 텐서: 각 위치에서 최다값을 포함하는 텐서
- 인덱스 텐서: 각 위치에서 최대값을 가진 원소의 인덱스를 포함하는 텐서
- torch.max(t, torch.tensor(0.))은 t 텐서의 각 요소와 스칼라값 0을 비교하여 최대값을 계산한다
- t 텐서의 각 요소와 0을 비교하여 최대값을 포함하는 새로운 텐서를 반환한다
import torch t = torch.tensor([1.2]) torch.max(t, 0) ''' torch.return_types.max( values=tensor(1.2000), indices=tensor(0)) ''' torch.max(t, torch.tensor(0)) ''' tensor([1.2000]) '''
'Naver AI Tech' 카테고리의 다른 글
[주간학습 정리] Week 6 (2) 2024.09.13 [주간학습 정리] Week 5 (1) 2024.09.06 [주간학습 정리] Week4 (0) 2024.08.30 [주간학습 정리] Week 3 (0) 2024.08.23 [주간학습 정리] Week 2 (0) 2024.08.16