LeNet5를 활용하여 MNIST를 학습한 방법을 FashionMNIST에 적용하면 결과가 좋지 않다. 이 성능을 높이기 위해 여러 방법들을 적용한다.
1. regularization
- otimizer를 SGD로 사용하였는데 여기에 regularization을 적용
torch.optim.SGD()
의 weight_decay 파라미터로 regularization을 적용할 수 있다
- 이 방법은 L2 regularization이다
2. batch normalization
- batch normalization을 적용
- 이는 conv을 진행하는 경우에만 적용
- 따라서 conv과 activation 사이에 적용하여 activation을 진행하기 전에 값들을 normalization 해준다
3. weight initialization
4. drop out
- 항상 사용하는 방법은 아니지만 필요할 때 사용하면 좋다
5. activation
- 지금은 tanh를 사용하였는데 leakyrelu나 relu를 사용하면 성능이 높아질 수 있다
결과
- 그런데...! 성능을 높이지 않았을 때 loss가 1.736313466549492 정도였는데 성능을 높이고 나서는 2.30에 머무른다...! 끝까지 돌려보지는 않았지만 아마 regularization 때문인것 같은데 overfitting이 되는 걸까???? 아닌것 같은데에 끝까지 돌려보면 알 수 있을까...?
eval 결과 (epoch 10)
- regularization 적용 안한 경우 evlaution score : 8890 / 10000
- regularization 적용한 경우 evlaution score : 8812 / 10000
- weight_decay = 0.001로 한 경우 (mean loss : 1.5975468342010777)
- 그 이상의 값에서는 수렴이 잘되지 않는다