튀는 loss잡기 , 성능과 데이터 크기

안민기·2023년 5월 4일
0

🎃🤖
데브코스 AI 5기 Monthly project #2 (Boston) 진행 중 발생한 궁금증

  • 같은 모델(MLP)사용시 범주형 피처를 임베딩한 방법이 원핫인코딩 방식보다 loss가 약 1.46배 높게나오고 val_loss가 튐 각각 최적화 진행함

문제점 1. loss가 튀는 이유?

  • train_loss는 수렴하는 반면 val_loss는 심하게 튐(train_loss에 비해 바뀌는 소숫점 단위가 다름)

문제점 2. 임베딩 방식이 원핫인코딩보다 성능이 낮음


원핫인코딩과 임베딩은 모두 범주형 변수를 처리하기 위한 방법이다.
테스트할 Task

1. 배달 시간 예측

  • 사용할 데이터 (17만개 = train + val + test)

2. 보스턴 집값 예측

  • 사용할 데이터 (train:1200 test:300)

Batch_size가 작으면 loss가 튄다?

loss가 튀는 원인은 크게 두가지가 있다.
1. 높은 learning_rate
2. 작은 Batch_size

train_loss는 작아지는데 valid_loss가 커지는 overfitting이 아니라 말 그대로 train_loss에 비해 변동 폭이 큰 상황임

<Task는 보스턴 집값 예측>

  • setting
    • train데이터는 1168개 / valid데이터는 292개 밖에 없는 상황
    • optimizer:Adam / learning_rate:0.001 고정
    • 범주형 데이터 -> 임베딩

<결론>

  • batch_size가 높을수록 val_loss가 덜 튄다.
  • x축은 epoch인데 iteration으로 해야 정확했을 것 같다.
    • batch_size 64와 128을 비교하면 수렴하는데 2배의 epoch이 필요했다.
    • 수렴하는데 필요한 iteration은 비슷하다는 것을 의미한다.

One-Hot 인코딩 vs Embedding (성능)

보스턴 집값 예측의 경우 Embedding방식은 충분히 학습을 하여도 one-hot인코딩 보다 성능이 낮게 나온다.
train 데이터는 1168개 , valid 데이터는 292개 -> 데이터의 개수가 성능을 좌우하는 의심이 듦

<Task는 배달 시간 예측>
조건 1. 훈련 데이터 size 변화에 따른 두 방식의 성능 비교 (데이터는 shuffle=True)
조건 2. 데이터가 적기 때문에 분포에 따른 성능차이를 고려하여 valid 데이터는 비교군 2개로 설정
조건 3. valid 1과 2 데이터 셋은 각각 천개씩으로 개수와 데이터셋 자체가 고정이다.

(train,valid_1,valid_2) 데이터 개수Embedding 방식 loss (valid_1 , valid_2)One-Hot 방식 loss (valid_1 , valid_2)
500 / 1000 / 10001782 , 18231673 , 1691
1000 / 1000 / 10001728 , 18241652 , 1727
2000 / 1000 / 10001767 , 18101693 , 1743
5000 / 1000 / 10001771 , 17441698 , 1700
10000 / 1000 / 10001804 , 17341709 , 1709
50000 / 1000 / 10001513 , 14801555 , 1517

<결론>
1. 데이터가 적을 땐 One-Hot인코딩 방식이 대체로 성능이 좋은 것을 볼 수 있다.
2. 데이터가 많아질수록 두 성능은 수렴하는 것을 볼 수 있다.

심증으로만 존재하던 Embedding을 위해선 많은 데이터가 필요하다는 인사이트를 도출하였다.

profile
Trendy AI Developer

0개의 댓글