최근 IT 분야에서 활동하는 최신 지식을 가진 사람들과 여러 차례 이 논의를 했습니다. 엔비디아가 게이밍 및 프로(pro) 범위 모두에서 출시하는 최신 제품들이 전력 소비, 크기, 비용, 총 VRAM 등 면에서 정말 놀랍다는 것은 사실입니다... 하지만 실제로는 ML 커뮤니티(ML community)가 주도하는 매우 현실적인 필요성이 존재하며, 이는 대부분의 사람들이 예상하는 것보다 더 클 수 있습니다.
제가 오늘 작업하고 있는 프로젝트의 예시를 보여드리겠습니다. 이것은 현재 제가 훈련시키고 있는 모델의 콘솔 출력입니다:
I1015 20:04:51.426224 139830830814976 supervisor.py:1050] Recording summary at step 107041.
INFO:tensorflow:global step 107050: loss = 1.0418 (0.453 sec/step)
I1015 20:04:55.421283 139841985250112 learning.py:506] global step 107050: loss = 1.0418 (0.453 sec/step)
INFO:tensorflow:global step 107060: loss = 0.9265 (0.461 sec/step)
I1015 20:04:59.865883 139841985250112 learning.py:506] global step 107060: loss = 0.9265 (0.461 sec/step)
INFO:tensorflow:global step 107070: loss = 0.7003 (0.446 sec/step)
I1015 20:05:04.328712 139841985250112 learning.py:506] global step 107070: loss = 0.7003 (0.446 sec/step)
INFO:tensorflow:global step 107080: loss = 0.9612 (0.434 sec/step)
I1015 20:05:08.808678 139841985250112 learning.py:506] global step 107080: loss = 0.9612 (0.434 sec/step)
INFO:tensorflow:global step 107090: loss = 1.7290 (0.444 sec/step)
I1015 20:05:13.288547 139841985250112 learning.py:506] global step 107090: loss = 1.7290 (0.444 sec/step)
마지막 줄을 확인해 보세요. 배치 크기(batch size)가 42개의 이미지(제 GPU의 24Gb 메모리에 넣을 수 있는 최대치)일 때, 저는 무작위로 전체 손실(total loss)이 지난 100개 배치에 대한 이동 평균(moving average)보다 두 배 이상 높은 경우가 간헐적으로 발생합니다!
근본적으로 잘못된 것은 아니지만, 이는 여러 반복 동안 모델의 수렴(convergence)을 방해할 것이며, 제가 계획한 반복 횟수 내에서 모델이 이상적인 최종 상태에 도달하는 데 도움이 되지 않을 가능성이 높습니다.
이는 부분적으로 제가 근본적으로 불균형한 데이터셋을 가지고 있고, 손실 함수(loss function)에서 이를 설명하기 위해 상당히 큰 레이블별 가중치 재조정(label-wise weight rebalancing)을 적용해야 하기 때문입니다... 하지만 이것이 제가 작업하는 경우의 현실을 가장 잘 보여주는 것입니다!
--> 지금 당장 이상적인 해결책은 훈련 세트(training set)에서 이러한 큰 아웃라이어(outliers)가 발생할 가능성을 최소화하기 위해 더 큰 배치 크기를 사용하는 것입니다.
최상의 결과를 얻으려면