Part-1에서는 MLOPs의 소개와 플러스제로에서 어떻게 적용하고 있는지를 소개드렸습니다.
이번 Part-2에서는 Part-1과는 다르게 플러스제로의 연구팀이 바라보는 방향을 공유 해보려 합니다.
Part-2 에서는 Data Scientists와 관련있는 MLOPs 컴포넌트 4개를 소개합니다.
- Data Verification
- Feature Engineering
- ML Code [ Testing & Debugging ]
- Model Analysis
1. Data Verification
데이터 검증은 실험과 운영에서 항상 중요합니다.
[ 실험 (Experiment) - 최선의 ML 예측 성능을 확보하기 위한 다양한 데이터 변환, AI모델의 파라미터, 구조 변경 ]
- 실험 단계에서의 데이터 검증은 우리가 해결하려는 문제를 현재 확보한 데이터를 통하여 해결 가능한지를 확인합니다. 예를 들면, 고객의 구매 전환율을 예측하려고 하는데, 현재 확보한 데이터는 유저에 대한 페이지 입장 시간만 있다면, 해결하고자 하는 문제 자체도 어렵지만, 우리에게는 구매 전환율을 예측하기 위한 충분한 데이터를 확보하지 못했다는 것을 알 수 있습니다.
너무 극단적인 예시였지만, 해결하고자 하는 문제에 대해서 충분한 데이터가 확보되지 않은 경우가 많이 있습니다. 이를 해결하기 위해서는 정확한 문제 정의와 함께, 현재 가용 가능한 데이터의 상태를 함께 확인하여 해결 가능성을 높이는 방법을 찾아야 합니다.
MLOPs의 범주에서는 실험에 관한 데이터 “만” 정의하지 않습니다.
사실, 실험에 대한 데이터 검증은 그 외에도 많이 있지만, 위의 예시처럼 데이터의 검증이 되지 않은 상태라면, ML 프로젝트가 시작되기전에, 데이터 확보 작업으로 “돌아가야" 할 것입니다.
그렇다면, MLOPs의 범주에서의 데이터 검증은 무엇일까요?
우리는 MLOPs에서, “OP”라는 단어를 더 집중하여 보도록 하겠습니다.
OP, 즉 운영 시스템은 유지보수가 잘 된다고 하더라도 데이터와 ML알고리즘이 완벽하게 결합되기 힘듭니다.
예를 들면, 우리는 어떤 문제를 해결하기 위해, 4개의 컬럼이 있는 데이터를 사용하여, ML 모델을 만들었습니다.
데이터 파이프라인과, AI모델의 예측 서비스, 재학습을 위한 워크 플로우를 만들었습니다.
약 3개월뒤, AI모델의 성능이 “새로 저장되는 데이터"를 예측 할 때마다, AI모델의 성능이 점점 떨어지는 것을 확인 하였습니다.
[ 모델 학습 이후에, 새롭게 저장되는 데이터 (Serving Data / Production Data) - AI 시스템에서의 AI모델은 기존에 확보된 데이터와 시스템 배포 이후에, 지속적으로 저장되는 데이터를 해결하려는 문제에 맞추어 예측을 하고 있습니다. ]
지속적인 AI모델의 성능 하락이 확인된다면, “왜 성능이 하락했는가?”를 확인해야 합니다.
AI모델의 성능 하락이 발생하는 이유는, AI모델의 성능은 데이터로부터 시작된다는 것을 명심해야 합니다.
여러가지 이유중에서 4가지를 확인해보도록 하겠습니다.
- Data Drift: 데이터의 통계적 변형
- Schema Drift: 데이터 스키마 변형
- Data Skew: 데이터의 불균형
- Concept Drift: 비즈니스 목적의 변형
Data Drift
[ 데이터의 통계적인 수치의 변화 ]
[https://arxiv.org/pdf/2004.05785.pdf]
Schema Drift
[ Production Data의 속성 변경 ]
- 데이터 컬럼
- 데이터 타입
Data Skew
[ Production Data 수집 시 ]
Concept Drift
[ AI 모델의 Input과 Output의 관계와 연관 ]
Before Project: 고객의 온라인 구매 횟수 (Before COVID-19)
After Project: 고객의 온라인 구매 횟수 (During COVID-19)
!! COVID-19으로 인해 고객의 구매 패턴 변경
데이터의 Drift를 빠르게 확인하기 위해서는 MLOPs 컴포넌트 중, Monitoring 시스템이 중요합니다.
데이터 검증단계에서는 AI 모델의 학습 단계에 사용된 데이터와 Serving / Production 단계에 수집된 데이터와 비교 / 검증하여 Drift를 검출하는 것이 가장 중요합니다.
만약, Drift가 발견되었을 시에는, AI모델의 성능 하락이 예상되기에 데이터 처리 또는 AI 모델의 재학습 전략을 통하여 AI모델 성능 하락을 방지합니다.
2. Feature Engineering
Feature Engineering은 데이터의 전처리와 연관있습니다. 원천 데이터 소스에서 데이터를 확보한 이후에 AI모델이 학습 할 수 있도록 데이터를 가공하는 과정 (데이터 전처리)을 거칩니다.
하지만, 데이터의 처리는 다양한 방법으로 가능합니다.
Feature Engineering은 Feature 생성, 변형, 추출 등 여러 방법을 포함하고 있습니다.
시각적인 예시를 위해 이번 파트는 이미지 데이터를 예시로 소개드리겠습니다.
[Cats vs Dogs]
이미지 데이터를 전처리 할 때, 가장 많이 사용 하는 방법으로는 2가지 방법을 보편적으로 사용합니다
- 데이터 정규화 ( Data Normalization )
- 데이터 증강 ( Data Augmentation )
이미지 데이터는 0~255의 값을 가지고 있지만, AI 모델의 학습을 위해 데이터의 값의 정규화를 진행합니다.
- MinMax: 0 ~ 1
- Standard: -1 ~ 1
이미지 데이터의 증강은 여러가지 방법이 있으며, 어떠한 방식을 사용하고 조합하느냐에 따라 AI모델의 최종 성능에서 차이를 나타냅니다.
[https://github.com/albumentations-team/albumentations]
이 외의 이미지 데이터의 Feature Engineering으로는 퓨리에 변환을 통한 이미지 데이터의 변환도 있습니다.
[ 이미지 데이터의 퓨리에 변환은 이미지 분석, 필터링, 복원, 압축 등 다양한 어플리케이션에서 사용하는 변환 방법중의 하나입니다. ]
Feature Engineering은 데이터의 성격과 해당 도메인의 이해를 바탕으로 진행 하는 것이 좋습니다.
3. ML Code [ Testing & Debugging ]
ML Code는 ML 모델 학습을 위한 데이터 준비, 알고리즘, 학습 코드 등 AI 모델을 생성하기 위한 여러 소스코드들을 포함합니다.
이번 컴포넌트에 대한 소개는 ML 알고리즘 보다는, MLOPs 관점에서 ML 코드의 테스트와 디버깅을 소개합니다.
운영 (OP) 관점에서 가장 큰 이슈 사항으로는 시스템의 유지성입니다. 그러나, AI모델의 학습은 필요에 따라 굉장히 큰 컴퓨팅 리소스를 필요로 합니다. 또한 AI모델의 학습 진행 시, 학습이 완료되기 까지의 시간도 오랜 시간을 필요로 하기도 합니다.
한 예로 GPT-3라는 언어모델은 Nvidia사의 V100 그래픽카드 8장을 통해 학습을 시작하면, 학습 종료까지 약 36년을 필요로 합니다. 준비된 데이터로 한번 학습을 하는데 36년이 필요하고, 실험을 위한 모델의 파라미터는 수십가지가 있습니다. 5개의 파라미터를 변경한다면, (36 * 5) 약 180년을 필요로 할 수 있겠네요.
물론 거대 AI 및 IT 그룹은 다양한 방법으로 학습 시간을 최소화 하려 노력하고 있습니다.
해결 하고자 하는 문제에 따라 다르겠지만, AI 모델의 데이터 준비 과정과, 알고리즘을 구성하는 요소, 학습 및 검증을 위한 코드가 정확하게 연구자 및 개발자가 의도한 대로 작동하는지를 확인하는 방법은 “유닛테스트”가 있습니다.
AI모델의 유닛테스트는 각 단계에 대한 “아주 조그마한" 데이터를 통해 기능이 정상 작동하는지를 확인 할 수 있습니다.
이런 유닛테스트는 Part-1에서 소개드린 [ CI / CD ] 와 연계한다면, 코드의 버그와 기능의 오류를 빠르게 확인 할 수 있도록 도와줍니다.
AI모델 학습코드의 유닛테스트는 앞서 소개드린 “조그마한 데이터" 또는 “샘플 데이터 (Mock Data)"를 통해 1-Iteration 또는 1-Epoch 테스트를 통해 오류를 방지 할 수 있습니다.
4. Model Analysis
AI 모델이 학습이 완료 되었다면, 배포 전에 거쳐야 할 몇가지 단계가 있습니다.
첫번째로는 모델의 성능이 만족스러운지 확인하는 Model Evaluation 단계를 거친 이후에, AI모델의 성능이 왜 안나오는지를 확인하는 Error Analysis 단계를 거칩니다.
Error Analysis에서는 모델이 잘 못 예측한 데이터를 통해서 직접 확인하고, 왜 안나왔는지를 확인합니다.
이 단계에서는 여러가지 문제가 나올수 있습니다. 예를 들면, AI모델 학습을 위한 Data의 처리가 잘못 되었을 수도, 데이터의 정답 (Y) 값이 정확하게 표기 되지 않았을 수도 있습니다.
이와 관련된 예시로, 플러스제로에서 연구중인 Active Learning의 방법 중, 가장 베이스가 되는 Pseudo Labeling과 Entropy Sampling을 통해서 댓글을 분석하는 AI모델을 예시로 공유드립니다.
플러스제로에서 베이스라인으로 진행중인 ML-System으로는 새로 추가된 데이터는 기존에 학습이 완료된 모델을 통해 예측하고, 예측된 결과는 Class 분류가 아닌 확률로 기반으로 정보량을 가장 많이 포함한 데이터를 샘플링하는 과정을 거친 이후에, 학습이 완료된 AI모델을 지속적으로 학습하는 실험중에 발견된 오류 입니다.
“true_label” 은 초기에 학습한 AI모델의 예측 결과를 통해 나온 긍/부정 입니다. (0: 긍정, 1: 부정)
“class_result” 는 현재 학습중인 AI모델의 probability를 통해 예측된 긍/부정 입니다. (0: 긍정, 1:부정)
Active Learning을 사용한다고 하여도 AI 모델의 예측 성능이 “확실히 올라간다”는 보장 할 수 없습니다. 하지만, 플러스제로 연구팀에서 진행중인 실험 결과를 보았을 때에는, 학습중인 AI모델이 연구자가 직접 보고 이해하였을때는, 예측 성능이 증가되는 것으로 보이지만, 초기 AI모델의 성능이 잘못 예측한 데이터가 다수 포함되어 있음을 파악 할 수 있었습니다.
Error Analysis를 통해서 모델 성능 감소의 원인을 해결 하면, 세부적인 데이터의 부분을 통해 추가 검증을 진행합니다.
세부적인 데이터를 통한 AI모델의 결과 중, AI - Fairness와 관련된 여러 사항이 포함됩니다.
앞서 소개드렸던 GPT-3와 같은 모델을 언어 모델 (Language Model)은 특히 이 부분을 검증해야 합니다. 또한 AI 모델을 학습에 사용된 데이터에는 편견이 포함된 데이터가 존재 할 가능성이 높기 때문에 AI모델 의 윤리적인 예측과 편견에 대해서도 검증을 진행합니다.
Conclude
이번 Part-2에서는 플러스제로 연구팀이 바라보는 AI 시스템의 개발 단계에서 AI 모델의 학습 시, 직접적인 관계가 있는 4개의 컴포넌트를 소개드렸습니다.
학습 데이터와 학습 이후에 축적되는 데이터의 성격을 비교하여 데이터와 관련된 변경사항을 확인하여 AI모델의 성능 저하를 빠르게 확인하고, AI 모델의 학습을 위해 다양한 Feature Engineering을 통한 실험과, 실험 단계마다의 유닛테스트를 통한 시스템의 유지 보수를 용이하게 하며, 학습이 완성된 AI 모델의 단계별 검증을 통해 AI 시스템의 Quality를 개선 하고자 노력합니다.