작성
·
786
0
안녕하세요. 트레이닝 할 때 데이터셋 분류와 몇가지 파라미터에 대해서 이해가 잘 안되는 부분이 있습니다.
하나의 훈련 예제를 돌렸을 때, 결과값이 Validation Loss: 4.6118, Validation Regression Loss 1.3363, Validation Classification Loss: 3.2755 막 이렇게 나오는데 Loss가 1이 넘는 값으로 나오는데 어떻게 4.6118을 해석해야하는지 잘 모르겠습니다
그리고 배치사이즈에 대해서도 궁금한 점이 있습니다. GPU 메모리 사이즈가 크면 배치사이즈를 크게 해도 된다고 찾아본 결과 알게됐습니다.
3-1. 배치사이즈가 크면 한 step(?)당 훈련하는 데이터 갯수가 많은 것이니, 한 번에 좀 더 많은 데이터를 참고할 수 있으니 가중치 설정에 유리하다고 보면 될까요?
3-2. 배치사이즈가 더 크면 훈련이 좀 더 빠르다고 보면 되나요?
3-3. 배치사이즈라는게 결국 6000개의 데이터셋이 있다면, 32로 잡는다면 (6000/32 + 1)번을 데이터로 나눠서 훈련시키는 것이라고 이해하면 되나요?
감사합니다
답변 2
1
안녕하십니까,
1. 일반적으로 validation 데이터 세트는 오버피팅을 방지하기 위해 학습 epoch시마다 validation을 수행합니다. 딥러닝의 특성상 학습 데이터의 오류, 즉 loss 함수 최적화를 수행하지만, 이렇게 되면 오버피팅, 즉 학습 데이터에만 최적화되고, 다른 유형의 학습 데이터에는 성능이 나빠질 수 있습니다. 때문에 validation 데이터 세트를 통해서 검증을 수행하면서 어느정도 오버피팅을 억제할 수 있게 합니다. 가령 학습 데이터에서는 loss가 계속 감소해서 좋은 방향으로 학습 된 듯이 보이나 validation 데이터에서는 loss가 감소하지 않는다면, epoch시 학습율(learning rate) 값을 변화 시키는 등의 조절책을 적용할 수가 있습니다.
이렇게 학습과 검증 데이터로 학습이 적용된 모델은 추후에 다른 테스트 데이터로 최종 테스트 합니다.
2. 딥러닝이 어떤 최적화 문제를 푸느냐에 따라 loss 정의는 다릅니다. 이진 분류 문제는 binary crossentroy로 , 다중 분류는 categorical crossentropy, 회귀는 MSE 또는 MAE 등으로 정의할 수 있습니다. 어떻게 loss함수를 정의하느냐에 따라 loss값은 달라집니다. 1이상, 또는 100이상이 될수도 있습니다.(물론 100이상과 같이 큰값은 일반적으로 적용하지 않습니다). 중요한 것은 loss값이 꾸준히 감소하고 있는가 이며, 모델의 성능은 loss값이 최적으로 감소한 상태에서 테스트 데이터에 모델 평가 방법(정확도, 재현율, ROC-AUC, MSE 등)의 방법을 적용하여 판단합니다.
3. Batch size 최적화는 좀 더 생각해볼 화두들을 던집니다.
3-1 이론적으로 batch size가 크면 모델 성능이 좋을것 같지만, 반드시 그렇지 않으며, 오히려 batch size가 커지면 최소 loss값을 찾지 못하고 지나치게 되는 경우가 많다는 논문결과들이 많습니다. 그렇다고 또 너무 작게하면 최소 loss값을 찾지 못하고 학습을 종료하는 경우가 발생합니다. 적정할 batch size는 하이퍼 파라미터 튜닝 과정의 하나입니다. 하지만 너무 집착하지 않아도 될 것 같습니다. batch size를 너무 작게/또는 너무 크게 잡지 않는 이상 성능에 큰 영향을 미치지는 않는 것 같습니다.
3-2. 네 batch_size가 크면 일반적으로 학습이 좀 더 빠르게 진행됩니다. 하지만 H/W또는 알고리즘적 제약이 있어서 어느 정도 이상은 더 키워도 학습 속도가 빨라지지 않습니다.
3-3 네, 맞습니다.
4. CPU Core가 많은 시스템에서는 NUM_WORKERS를 키우면 데이터 로딩 속도가 빨라집니다. 이것도 마찬가지로 H/W및 알고리즘적 제약이 있어서 일정 수준 이상은 키워도 성능이 빨라지지 않습니다.
감사합니다.
0