마무리하며
이번 챕터에서는 이제까지 배운 내용들을 모두 종합하여 MNIST를 분류하기 위한 프로젝트를 구현하여 보았습니다. 사실 MNIST 데이터셋은 딥러닝을 처음 접하시는 분들이라면 누구나 다 접해보았을 기초 데이터셋이고, MNIST를 분류하는 코드는 검색해보면 발에 채일 정도로 차고 넘쳐납니다. 물론 그런 코드들도 MNIST를 훌륭하게 풀어내지만, 대부분은 문제를 푸는 자체에 집중하고 있고, 어떻게 문제를 효율적으로 풀기위한 환경을 어떻게 구축해야 하는지는 알려주지 않는 것들이 대부분입니다. 따라서 막상 여러분들이 실제 업무에서 비슷한 업무를 수행하고자 프로젝트를 구현해야 할 때에는 어떻게 구현해야 할 지 막막해하는 경우를 많이 보았습니다.
그래서 이번 챕터를 통해 이제까지 배운 이론과 지식들을 동원하면서 실제 업무에 활용하는 사례를 보여드리고 싶었습니다. 단순히 주피터 노트북을 활용해서 한 셀cell 씩 코드를 적어나가는 것이 아니라, 문제를 해결하기 위한 최적의 알고리즘과 하이퍼파라미터들을 연구하고 찾을 수 있는 환경을 구축하는 방법을 보여드리고자 했습니다. 이와 같이 프로젝트 환경을 구축하게 되면, 추후 다른 프로젝트를 수행할 때에도 최소한의 수정을 거쳐 재활용 할 수 있게 되며, 점점 자신에게 최적화된 형태로 고도화되어 갈 것입니다. 정리해보면 현재 우리가 구현한 프로젝트는 다음과 같은 요구사항을 반영하고 있습니다.
- 효율적으로 실험을 반복해서 수행할 수 있어야 함
- 모델 아키텍처가 바뀌어도 바로 동작할 수 있어야 함
- 하이퍼파라미터를 바꿔서 다양한 실험을 돌릴 수 있어야 함
- 코드의 일부분이 수정되어도, 다른 부분은 큰 수정이 없도록 독립적으로 동작해야 함
당연히 현재 이 프로젝트의 형태에도 더 개선해나가야 할 점들이 있었는데요. 작게는 코드를 설명하면서 독자분들에게 수정해보길 권했던 사항들부터, 크게는 프로젝트의 구조를 개선하는 사항들까지 여러가지가 있을 것 같습니다. 좀 더 굵직한 사항들을 살펴보면, 다음과 같은 개선 사항들이 있으면 더 좋을 것 같습니다.
AS-IS | TO-BE |
---|---|
데이터 전처리/분할 등을 직접 구현 | PyTorch Dataset을 활용하자 |
여전히 custom for-loop에 의존하고 있음 | PyTorch Ignite[1] / Lightning[2]과 같은 라이브러리를 활용하자 |
이제까지 우리는 딥러닝의 기초에 대해서 배웠습니다. 딥러닝의 기초가 되는 대부분의 기법과 이론에 대해서 다뤘다고 볼 수 있습니다. 간단한 프로젝트는 한번 시도해보는 것도 나쁘지 않겠네요. 하지만 이제까지 배운 내용들은 어떤 내용들이 있는 것인지 다뤘다면, 이제 왜 그 방법들이 동작하는지와 좀 더 고도화 할 수 있는 방법들에 대해서 다뤄보고자 합니다.
[1]: https://github.com/pytorch/ignite
[2]: https://github.com/PyTorchLightning/pytorch-lightning