[ML Info] Machine Learning Pipeline

김현우
None
Published in
9 min readNov 29, 2020

휴먼스케이프 Software engineer Covy입니다.

본 포스트에서는 machine learning service를 런칭하려고 할 때 주요하게 고려해야 할 사항들을 다뤄보려고 합니다.
실제로 machine learning framework를 사용해서 학습하려는 목적에 맞는 모델로 학습을 시키고 그 결과를 체험해보는 것과 이를 실제로 서비스하는 것과는 거리가 있습니다. Machine learning 을 활용한 service들이 주로 그들의 완결성과 유지보수를 위해 가지고 있는 Machine Learning Pipeline 에 대해서 소개하려고 합니다.

Machine Learning Pipeline

Machine Learning Pipeline은 machine learning service가 가지는 machine learning workflows를 자동화하여 관리를 유연하고 용이하게 만드는 프로세스입니다.
자세한 설명을 위해 간단한 예시를 들겠습니다.
우리가 machine learning service를 운영하는데 데이터를 전처리하여 모델을 만들고 서비스에 올렸다고 합시다. 이 때 데이터의 형태가 맞지 않는 새로운 데이터들이 들어와서 전처리 작업을 진행해야 한다고 합시다. 만약, 서비스가 올라간 상태에서 하지 못하고 전처리 과정을 따로 매번 독립적으로 진행해야 한다면 어떨까요?
이미 아시겠지만, 상당히 귀찮고 복잡할 것입니다. 불가능한 것은 아니지만, 상당히 애를 먹을 것입니다. 이러한 과정들을 자동화함에 있어서 빼놓지 않고 챙겨 인프라를 설계/구축할 수 있도록 도와주는 친구가 Machine Learning Pipeline이라고 보시면 됩니다.

Machine Learning Pipeline

아마 논문리뷰나 실습 관련해서 글을 적은 내용을 잘 보셨다면 지금부터 설명하는 내용이 그 안에 담겨있다는 것을 느끼실 수 있습니다.

Problem Definition

가장 첫 단계가 Problem Definition(문제 정의)입니다. 이 단계를 Machine Learning Pipeline으로 보는 곳도, 아닌 곳도 있지만 저는 서비스의 시작부터 유지보수 단계까지의 전 생애를 설명드리기 위해서 이 단계를 넣어서 설명을 진행하도록 하겠습니다.
이 단계는 개발하고자 하는 서비스가 해결하고자 하는 비즈니스적 문제를 구체화하여 정의하는 단계입니다. 여기서 중요하게 봐야 할 점은 해결하고자 하는 문제가 반드시 “Machine learning을 필요로 하는가” 입니다.
여기서 주어질 수 있는 판단 기준으로는 해결하고자 하는 문제가 머신러닝을 사용해야 할 만큼 데이터와 결과의 관계성이 복잡한가, 그러면서도 데이터에서 특별한 패턴을 찾을 수 있는가 입니다.

Data Ingestion

다음 단계가 Data Ingestion(데이터 투입)입니다. 이 data는 따로 data pipeline을 통해서 모여지고(collect), 저장되고(save), 투입(ingest)됩니다. 이 단계는 앞선 세 가지 단계 중 data pipeline을 통해서 특정 저장소에 저장된 데이터를 투입하는 단계입니다. 보통 사용자로부터 데이터를 얻는 서비스의 경우는 클라이언트로부터 얻은 데이터를 저장한 이후에 이를 이용해 추가 학습한 모델을 저장하고, 배포가 나가는 형태로 이루어집니다. 다만 예외적으로 real-time data ingestion 이라고 하여 실시간으로 얻은 데이터를 학습에 사용하는 방법도 있습니다. 둘 중 어느 방법을 택하던 간에 얻은 데이터를 저장하고 저장소로부터 학습에 사용되지 않은 데이터를 가져오는 과정을 자동화하는 프로세스가 필요합니다.

Data Preparation

다음 단계는 Data Preparation(데이터 준비)입니다. 이 단계에서는 Data Analysis(데이터 분석)Data Transformation(데이터 변환), 그리고 Data Validation(데이터 검증)이 필요합니다. Data Analysis의 경우 초기에 수집한 데이터가 학습에 적합한지 확인하는 용도로 진행되며, Data Transformation과 Data Validation과 같은 경우에는 학습을 위한 데이터 준비를 위한 용도로 진행됩니다.
간단한 부연설명을 하자면, Data Analysis 는 데이터로 부터 의미/특성을 찾아내 수집한 데이터가 실제로 학습을 통해서 원하는 결과를 얻을 수 있을 만한 데이터인지 검증하는 과정입니다.
Data Transformation은 설계할 모델에 들어갈 수 있는 형태로 데이터를 변환하는 과정입니다. 가령 이미지를 이용한 네트워크를 설계한다고 가정했을 때 이미지의 resizing 등을 들 수 있습니다.
Data Validation은 변환된 데이터가 학습에 사용될 수 있는 형태인지 최종적으로 확인하는 과정입니다. 가령 악의적인 사용자의 데이터로 원치 않는 학습이 일어날 수도 있기 때문에 이를 위한 과정입니다.

Data Segregation

다음 단계는 Data Segregation(데이터 분리)입니다. 이는 준비한 data를 training dataset, test dataset, validation dataset으로 나눈 작업입니다. 이를 나누는 이유는 학습한 모델이 특정 dataset에 overfitting 되지 않기 위함입니다. 즉, 모델의 평가에 객관성을 부여해 특정 데이터셋에서만 잘 동작하는 모델이 아닌, 일반적으로 성능이 좋은 모델을 만들기 위해서라고 보시면 됩니다. Validation dataset은 여러 학습 모델 중 가장 좋은 성능을 보이는 모델을 선택하기 위한 척도로 사용되며, test dataset은 학습된 모델을 최종적으로 평가하는 용도로 사용하게 됩니다.
이 과정 또한 얻어낸 데이터들을 자동으로 나누어서 학습을 진행해야 합니다.

Model Training

다음 단계는 Model Training(모델 학습)입니다. 이 단계는 Model Build(모델 생성) 과정을 초기에만 포함합니다. 앞서 설명드린 Machine Learning Pipeline의 Data Ingestion에서 수집한 데이터를 이용해 Problem Definition에서 정의한 문제를 가장 잘 해결할 수 있는 모델 및 알고리즘이 어떤 것인지 고민하고 선택하며 이를 바탕으로 모델을 설계하고 생성합니다.
이후 생성된 모델을 training 하는 과정을 진행하는데 이 때 학습에 사용할 parameter를 다양화하면서 training을 진행하는 pipeline을 구축해야 합니다. 이는 이후에 설명할 Candidate Model Evalutation과 직결한 내용이기도 합니다.

Candidate Model Evaluation

다음 단계는 Candidate Model Evaluation(후보군 모델 평가)입니다. 이 단계에서는 앞선 Model Training 단계에서 다양한 parameter를 이용해 학습을 진행한 여러 후보군 model들을 validation dataset을 통해서 평가하여 최고의 성능을 내는 model을 선택하고, 그 model을 test dataset을 통해서 평가하는 단계입니다.
이 과정을 통해 최종적으로 이전 단계보다 성능이 좋은 학습 모델이 발생하고 모델을 업데이트할 수 있는 계기가 됩니다.

Model Deployment

다음 단계는 Model Deployment(모델 배포)입니다. 이 단계에서는 이전보다 성능이 좋은 학습 모델이 생성되었으면 기존의 모델 대신에 새로 생성된 모델을 배포하여 서비스에 올리는 단계입니다.

Performance Monitoring

Machine Learning Pipeline의 마지막 단계는 Performance Monitoring(성능 트래킹)입니다. 성능 트래킹은 모델의 부정확한 측면을 분석하고 정확한 모델로의 학습을 위해서 필수적입니다. 가령 서비스가 부정확한 결과를 산출했다는 것을 알 수 있다면, 정확한 결과와 함께 데이터를 학습시켜 모델의 정확성을 높일 수 있습니다.
이러한 경우가 아니더라도 모델이 산출한 결과를 트래킹하는 것은 예상치 못한 결과를 산출한 데이터를 얻을 수 있고 다시 모델의 정확도를 높일 수 있는 데이터로 쓰일 수 있기 때문에 중요합니다.
이러한 모니터링을 진행하는데 권장하는 방법은 알림과 대시보드 기능이라고 합니다.

위 8가지의 과정을 모두 거친다면 마지막 과정인 Performance Monitoring에서 얻은 데이터를 바탕으로 data integration으로 돌아가 반복을 하는 형태로 모델을 지속적으로 업데이트할 수 있습니다. Machine Learning Pipeline에서 중요하게 알아두어야 할 것은 이러한 8가지를 자동화하여 실행할 수 있는 인프라를 구축해야한다는 점입니다.

Conclusion

Google Developers 문서에 따르면, 머신러닝 서비스를 구축하는 가이드라인 중 “최초 모델은 단순하게 유지하고 인프라를 제대로 갖춰라.”라는 규칙이 있습니다. 실제로 머신러닝 서비스에 처음 발을 들인 개발자가 모델의 성능에 초점을 맞추어 개발을 하는 경향이 있는데 개발을 하면서 실제로 성능보다는 개발 환경의 자동화나 관리가 발목을 잡았던 경험이 많다고 합니다. 인프라를 따로 테스트를 하라고 할 만큼 인프라를 잘 구축하는 것이 중요하다고 하니 서비스를 런칭하기 전에 참고하시면 좋을 것 같습니다.

Reference

https://bcho.tistory.com/1301
https://lsjsj92.tistory.com/579
https://towardsdatascience.com/not-yet-another-article-on-machine-learning-e67f8812ba86

Get to know us better!
Join our official channels below.

Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io

--

--