본문 바로가기

Machine Learning

[ML] Data shuffling Effects

머신러닝 적용 중 겪은 현상

[Model Convergence & Performance]

Scikit-learn MLPRegressor vs Pytorch

 

사이킷런에서 제공하는 MLPRegressor로 모델을 돌렸을때와, torch로 같은 hyperparameter로 세운 모델의 수렴속도 차이가 엄청나게 났다. MLPRegressor로 돌릴땐 최대 학습반복 수를 2000번으로 설정해뒀는데 167번정도 돌다가 멈췄고, torch로 세운 모델은 200번 돌아갈동안 MLPRegressor의 loss의 반의 반도 못따라갔다. 

MLPRegressor hyperparameter
sklearn MLPRegressor train loss
pytorch model train loss

같은 iteration동안 모델 수렴속도가 엄청나게 차이가 났다. 첫 loss크기 차이부터 2배가 났고, MLPRegressor가 3번 학습하는동안 loss가 149까지 내려갈때, torch모델에서는 17번 도는동안에도 200대에 머물러있었다.

같은 hyper parameter로 설정했는데, 왜 이런 차이가 나는지 찾아보았다.

MLPRegressor에서 Default 값으로 shuffle이라는 옵션이 True로 설정되어있는데, 이게 

Optimizer를 Adam이나 SGD를 사용할때, iteration이 돌 때마다 샘플을 무작위로 학습시킨다는 것이다.

Pytorch에서 DataLoader를 사용했는데, shuffle옵션의 Default가 False였다.

그래서 shuffle을 True로 넣어주고 나니, 초기 loss값도 줄어들고 수렴속도도 비슷해졌다.

Data shuffle이 모델 수렴 속도에 이렇게 영향을 끼치는지 이번에 알게되었다. 모델 수렴 속도를 엄청나게 줄여준다.

그런데, 모델이 빠르게 수렴했다고 해서 정확도가 꼭 그렇게 좋아지지는 않던데 (비슷함), 왜그럴까 더 고민해봐야겠다.

 

* sklearn MLPRegressor에는 tolerance라는 option이 있어서 모델이 수렴하면 알아서 멈추는 기능이 탑재되어있던데, torch에서 그 기능을 구현해봐야겠다.

* Scikit-learn의 MLPRegressor의 loss function은 'squared error'인데 특이한 점이 MSE를 쓰기는 하는데 /2, 2로 한번더 나누어주었다. 동일하게 비교하기 위해서 2로 나눠주었다.

'Machine Learning' 카테고리의 다른 글

Tensorflow CNN  (0) 2023.04.26
[ML] Deep SHAP (DeepLIFT를 중심으로)  (0) 2021.04.15
[ML] XAI, Model Interpretability  (0) 2020.11.27