데이터 시프트에 대응하기 위한 방법을 다룬다:

  • 연속 학습
  • 재훈련 주기

그리고 라이브 환경에서 발생한 데이터로 테스트하는 방법인 프로덕션 테스트도 다룸

 

 

Q) 프로덕션 테스트가 구체적으로 뭔데?

 

실제 프로덕션 환경에서 다양한 모델을 최슨 데이터를 이용해서 테스트해보고, 결과값을 생성하고, 이를 기반으로 각 모델의 성능을 비교하거나 테스트하는 과정을 의미한다.

 

그러니까 어떤 모델이 가장 효율적이고 정확한지 결정하는 데 사용되는거지.

 

프로덕션 테스트를 위한 여러가지 방법이 있음.

  • 쉐도잉 테스트
  • A/B 테스트

 

 

Q) 프로덕션 테스트는 최신 라이브 데이터로 평가를 할텐데, 라이브 데이터에 대한 그라운드 트루스 레이블은 없잖아. 근데 어떻게 모델의 성능을 평가할 수 있는거야?

 

그라운드 트루스 레이블이 없더라도 여러 지표를 가지고 판단할 수 있다:

  • 사용자 지표 (e.g 클릭률, 구매율, 사용자 참여도 등)
  • 사용자 피드백 지표
  • 모델의 오류

 

 

연속 학습

연속 학습에 대한 오해가 있음:

  • 연속 학습은 실시간으로 데이터를 받아서 수집해서 즉시 업데이트 하는 방식이 아님. 이 방식은 파괴적 망각 (Catastrophic Forgetting) 문제가 있기도 함. 그러니까 새로 학습한 데이터로 이전에 추론하는 능력을 잃어버리는 걸 말함.
  • 그래서 학습한 이후에 바로 배포하는게 아니라 테스트를 거쳐서 더 나은 성능이라고 판단되는 경우에만 내보내게 된다.

 

주로 연속 학습은 마이크로배치 단위로 이뤄짐:

  • 마이크로배치는 512, 1024 개 이런식의 데이터를 가지고 모델을 업데이트 하는 걸 말한다.

 

연속 학습의 매커니즘은 기존 모델을 챔피언 (Champion) 이라고 가정하고, 기존 모델을 복사해서 새로운 데이터로 업데이트한 도전자 (Challenger) 모델의 성능을 비교해서 더 낫다고 판단하는 경우에만 대체한다:

  • 무조건 도전자 모델로 대체하는게 아님.

 

연속 학습의 주기는 꽤 길어도 괜찮다고 함:

  • 모델의 성능이 급격하게 줄어드는게 아니기도 하고, 유의미한 데이터 수집을 기다려야하니까.

 

 

Q) 연속 학습은 데이터를 필터링해서 유의미한 데이터만 골라서 학습하는건가?

 

연속 학습에서 필터링을 통해 유의미한 데이터만 골라서 학습하는 접근법도 포함될 수 있지만, 이게 전부는 아님.

 

데이터 필터링을 하는 경우는 다음과 같다:

  • 잡음 제거: 데이터 필터링을 통해 비정상적이거나 부정확한 데이터를 제거하는 것
  • 데이터 선택: 필터링을 통해 특정 기준에 따라 유의미한 데이터를 선택하여 학습의 효율성을 높이는 것
  • 데이터 중복 방지: 연속 학습 과정에서 중복된 데이터를 제거함으로써 모델의 정확성을 유지하는 것.

 

 

Q) 새로운 데이터로 도전자 모델을 만들었지만 성능이 낮다면, 해당 데이터는 페기시키는건가? 그리고 다른 데이터로 다시 도전자 모델을 만들어서 연속 학습을 하는건가?

 

단순하게 이렇게 해결하지 않는다.

 

도전자 모델이 왜 성능이 낮은지 조사해야함:

 

이 과정에서 데이터 품질이 문제라면 해당 데이터들을 조사해서 데이터 정제와 필터링 과정을 거친다.

 

 

Q) 근데 새로운 데이터로 학습한 도전자 모델이 챔피언 모델보다 성능이 낮다면 데이터 품질 문제 말고는 없는거 아니야? 사람의 실수가 있는게 아니라면

 

새로운 데이터와 기존 데이터 간의 분포가 다르면 성능이 떨어질 수 있다.

 

데이터 드리프트(data drift)나 개념 드리프트(concept drift)가 발생하면 모델의 성능이 저하될 수 있다.

 

도전자 모델이 새로운 데이터에 과적합되어 기존 데이터에서 일반화 능력이 떨어질 수도 있다. 이를 방지하기 위해 규제, 드롭아웃, 조기 종료 등의 방법을 사용할 수 있음.

 

 

Q) 데이터 드리프트나 개념 드리프트의 경우에는 재훈련을 해야하는거지? 그럼 이 경우에는 새로운 데이터를 가지고 재훈련을 해야겠네?

새로운 데이터와 기존 데이터를 적절하게 조화하는 것도 필요할 수 있다:

  • 개념 드리프트: 학습 대상 개념이 변한 경우, 새로운 데이터에 중점을 두고 모델을 재훈련한다.
  • 데이터 드리프트: 데이터 분포가 변한 경우, 새로운 데이터와 기존 데이터를 조합하여 모델을 재훈련한다.

 

 

무상태 재훈련 vs 상태 재훈련

무상태 재훈련과 상태 재훈련 정의:

  • 무상태 재훈련은 새로운 데이터가 추가되더라도 처음 데이터와 합쳐서 모델을 처음부터 다시 학습 시키는 걸 말함.
  • 상태 재훈련은 이미 훈련된 모델에 새로운 데이터만 추가해서 학습을 하는 걸 말한다. 파인 튜닝이나 증분 훈련 (incremental training) 이라고도 함.

 

상태 재훈련은 두 가지로 나뉜다:

  • fine tuning:
    • 미리 훈련된 모델을 가져와서 새로운 데이터에 맞게 조정하는 과정임. 일반적으로 전이 학습(transfer learning)과 관련이 있으며, 기존 모델의 가중치나 구조를 유지하면서 새로운 데이터나 태스크에 대해 모델을 재훈련하는 방식.
    • 예시: 컴퓨터 비전에서 이미지넷 데이터셋으로 미리 훈련된 모델을 가져와, 특정 작업(예: 의료 영상 분석, 객체 인식 등)에 맞게 파인 튜닝하는 방식
  • incremental training:
    • 증분 훈련은 새로운 데이터가 도착할 때마다 모델을 지속적으로 업데이트하는 과정이다.
    • 예시: 스트리밍 데이터 환경에서 실시간으로 들어오는 데이터를 기반으로 모델을 증분적으로 업데이트하여 최신 정보를 반영하는 것.
  • 파인 튜닝은 미리 훈련된 모델을 새로운 태스크에 맞게 조정하는 과정이며, 증분 훈련은 모델을 지속적으로 업데이트하여 최신 데이터를 반영하는 과정이다.
  • 그러니까 파인 튜닝은 모델을 특정 작업이나 도메인에 맞게 최적화하는 데 사용되는 반면, 증분 훈련은 모델이 연속적으로 학습하고 데이터의 변화에 적응하도록 돕는 거임.

 

무상태 재훈련은 항상 가능한게 아님. 개인 정보 데이터 보호 때문에.

 

무상태 재훈련은 언제 쓰고, 상태 재훈련은 언제 쓰고 이게 중요한 것 같다:

  • 무상태 재훈련은 데이터 드리프트나 개념 드리프트가 발생한 경우에 쓰고, 상태 재훈련은 일반적인 최신 데이터 학습에 씀.

 

 

Q) 무상태 재훈련에서 상태 재훈련으로 바꾸면 비용 감소 뿐 아니라 모델의 성능도 올라간다는데 이건 왜 그런거야? 기본적으로 새로운 데이터에 적응하는 능력은 무상태 재훈련이 더 뛰어난거 아닌가?

 

상태 재훈련은 과거 지식을 유지하며 지속적으로 학습하므로, 모델이 더 많은 정보와 경험을 갖게 되므로 모델이 과거와 현재 데이터에 더 잘 추론한다고 함.

 

다만 데이터 드리프트 같은 문제에 더 취약할 수 있다고 한다.

 

무상태 재훈련은 매번 처음부터 모델을 재훈련하는 방식이므로 데이터 드리프트나 개념 드리프트에 유연하게 대응할 수 있다고 함

 

 

Q) 왜 상태 재훈련이 무상태 드리프트보다 성능이 더 나아지는거야? (데이터 드리프트가 발생하지 않았을 때 경우를 말함)

 

기존 모델의 지식을 보존하면서 새로운 데이터를 추가로 학습하기 때문임.

 

모델의 일반화 능력을 유지하면서 추가 학습을 할 수 있음을 의미.

 

 

Q) 상태 유지 훈련과 무상태 유지 훈련을 병해해 모델을 처음부터 훈련하고 파라미터 서버와 같은 기술을 사용해서 업데이트 된 두 모델을 결합하기도 한다는데 이게 무슨 뜻이지?

 

파라미터 서버는 분산된 머신러닝 환경에서 모델의 파라미터를 관리하고, 여러 학습 작업에서 공유할 수 있도록 하는 기술임.

 

파라미터는 하이퍼파라미터를 뜻하는게 아님:

  • 파라미터(Parameter): 모델이 학습을 통해 얻은 값으로, 신경망의 가중치와 편향 등이 포함됨. 모델이 학습 데이터를 기반으로 최적의 파라미터를 찾는 과정에서 결정된다.
  • 하이퍼파라미터(Hyperparameter): 모델의 구조나 학습 과정에서 사전에 설정되는 값으로, 학습률, 배치 크기, 네트워크의 층 수, 규제 방법 등이 포함됨. 모델 학습 전 또는 학습 과정에서 조정되는 값임.

 

파라미터 결합은 여러 모델의 파라미터를 결합하는 방식임. 그러니까 무상태 훈련과 상태 유지 훈련을 병행해서 생긴 파라미터를 평균을 내는 식으로 결합하는거지. (어떻게 보면 앙상블과 유사한 측면이 있음.)

 

파라미터 결합을 하면 모델의 편향을 줄이고 성능이 보다 안정화된다고 함. 모델의 정보를 통합하므로.

 

 

Q) 모델 업데이트 유형 (e.g Model Iteration, Data Iteration) 은 뭔데? 이거랑 새로운 피처나 신규 레이어를 추가하는게 무슨 연관이 있는거지?

 

모델 업데이트 유형은 머신러닝 모델을 개선하거나 새로운 데이터, 구조 또는 피처에 적응하기 위한 다양한 접근법을 말함.

 

모델 이터레이션(Model Iteration):

  • 모델 이터레이션은 기존 모델을 반복적으로 수정, 재훈련 또는 개선하는 과정임. 이는 모델의 구조, 하이퍼파라미터, 알고리즘 등을 업데이트하여 모델 성능을 높이는 방법이다.
  • 모델 이터레이션은 모델의 내부 구조나 구성 요소를 변경하여 성능을 향상시키거나 새로운 기능을 추가할 수 있음. 예를 들어, 새로운 신경망 레이어를 추가하거나, 기존 레이어를 재구성하는 방식이 포함됨.
  • 모델 이터레이션에서는 새로운 피처(feature)를 모델에 추가하여 성능을 개선할 수 있다.

 

데이터 이터레이션(Data Iteration)

  • 모델을 업데이트하기 위해 데이터 자체를 변경하거나 추가하는 과정임. 이에는 새로운 데이터셋을 사용하거나, 기존 데이터의 전처리 방식을 변경하는 것이 포함됨.
  • 데이터 이터레이션은 데이터의 변화나 추가를 통해 모델의 성능을 높이는 접근법임. 새로운 데이터가 들어오면 모델을 재훈련하거나, 데이터의 분포를 분석하여 모델을 조정함.
  • 데이터 이터레이션에서는 새로운 피처를 데이터에 추가하여 모델의 입력을 확장할 수 있음.

 

데이터 셋에 새로운 피처를 추가하는 것:

  • 데이터 셋에 새로운 피처를 추가하는 것은 기존 데이터에 새로운 열이나 특성을 추가하는 것
  • 기존 데이터를 사용하여 새로운 피처를 계산하거나 생성하는 것.

 

모델에 새로운 피처를 추가하는 것:

  • 모델에 새로운 피처를 추가하는 것은 데이터 셋에 추가된 정보를 모델의 입력에 반영하는 과정임. 추가로 모델의 구조를 변경하여, 추가된 피처를 효과적으로 학습할 수 있도록 하는 것. 예를 들어, 더 많은 레이어를 추가하거나, 새로운 활성화 함수를 도입하는 것

 

 

연속 학습의 필요성

연속 학습은 모델이 빠르게 환경에 적응하도록 하기 위함임:

  • 예: 특정 날짜의 행사가 있어서 승차 공유 서비스가 적극적으로 활발하다면 좀 더 높은 가격으로 측정해도 되니까
  • 예: 블랙 프라이데이라면 관련된 더 다양한 상품들을 적극적으로 추천해준다면 매출에 기여할 수 있을거니까.

 

그래서 연속 모델은 가능한 빠르게 업데이트 될 수 있도록 인프라를 구축해야한다:

  • 알리바바 같은 경우는 아파치 플링크를 이용해서 ML 을 지속적으로 업데이트 한다고함.

 

연속 학습은 지속 콜드 스타트 문제도 해결할만큼 빨라야한다:

  • 콜드 스타트 문제는 사용자에 대한 데이터가 없어서 추천을 못해주는 문제를 말함.
  • 지속 콜드 스타트 문제는 사용자가 엄청 드물게 오거나 해서 추천을 못하거나, 사용자가 로그인을 못해서 추천을 못하거나, 사용자의 디바이스가 달라서 추천을 못하는 경우등을 말함.
  • 이러지 말고 가능한 빠르게 연속 학습을 해서 지금 사용자가 들어오고 있는 세션안에서 추천을 하도록 해야함. 틱톡처럼. 틱톡은 현재 앱에 들어와서 영상 몇개만 보면 그거에 맞게 추천을 빠르게 해준다고 함.

 

 

연속 학습의 난제

연속 학습의 난제는 다음과 같다:

  • 신규 데이터 엑세스 난제
  • 평가 난제
  • 알고리즘 난제

 

신규 데이터 엑세스 난제

신규 데이터 엑세스 난제는 신규 데이터를 확보하는 것, 신규 데이터를 레이블링 하는 것, 그리고 모델에 적용하는 것을 빠르게 하는 거임.

  • 그래서 데이터 웨어하우스에서 데이터를 가져오거나, 배치 처리를 하거나 이런 작업은 지양하려고 한다고 함.

 

 

Q) 실시간으로 추천을 하는 시스템은 어떻게 처리할까?

 

실시간 데이터로 모델을 학습하는 데이터 파이프라인이 설계되어야 할 것:

  • 사용자의 클릭, 구매, 검색 데이터를 Kafka나 Kinesis 같은 메시지 큐 시스템을 통해 실시간으로 수집해야한다. 이건 데이터 웨어하우스에 적재하기 전 데이터일 것임.

 

온라인 학습이 가능한 모델이어야 할 것이다:

  • LightGBM이나 XGBoost 같은 Gradient Boosting 모델은 새로운 데이터가 들어올 때마다 부분적으로 업데이트할 수 있음.

 

실시간 추천을 하기 위해서는 배치 프로세싱 보다는 스트림 프로세상를 이용해야할 것.

 

신규 데이터에 레이블링 하는 것이 병목이 될 수 있다고 함. 이 병목을 해결하는 방법은 다음과 같다:

  • 훈련된 모델을 이용해서 자동 레이블링 하는 것
  • 스노클 같은 프로그래밍 방식의 레이블링 도구를 이용하는 것. 이건 프로그래밍 한대로 자동으로 대규모 데이터에 레이블링을 수행한다.
  • 크라우딩 소싱 플랫폼을 이용해서 사람들을 이용해 자동으로 레이블링 하도록 만들 수 있다.

 

실시간 추천의 경우 이전에 추천했지만 효과가 없었던 상품은 배제될 것임:

  • 지연 레이블을 이용해 새롭게 업데이트 된 모델은 추천을 더 잘할거임.
  • 근데 이렇게해도 똑같은 항목을 추천할수도 있으니까 배제 로직이나 시스템을 구축해서 추천을 배제할 수도 있을듯. 유튜브가 그런 시스템이 있지 않는가.

 

 

Q) 이커머스에서 상품을 추천을 해주는 시스템이 있다고 했을 때, 내가 몇개의 상품을 클릭하고 나서 새로고침해서 추천을 받는 경우에는 그때의 모델은 나의 행동 데이터를 바탕으로 새로 배포된 모델이야?

 

아님.

 

나의 행동 데이터를 바탕으로 모델이 추천을 해주는 시스템이다.

 

모델의 지속적인 배포는 중요하지만, 이렇게까지 자주 배포하지는 않는다.

 

 

평가 난제

평가 난제는 모델이 기존 모델보다 더 나은지 평가하는 척도가 있어야 한다는 걸 말함:

  • 단순히 사용자 관련 지표만 (구매율, 클릭율 등) 이 더 우월하다고 평가하면 안될듯
  • 연속 학습으로 인해서 파괴적 망각 (Catastrophic Forgetting) 이 발생할 수 있음. (e.g 계속 신규 데이터가 백인들에게 대출이 나오니, 흑인들에게 대출이 안나오게 되는 문제)
  • 악의적인 데이터로 학습을 하게 되는 문제 때문에 모델의 안정성을 평가하는 지표도 있어야 함.(e.g 트위터에 챗봇이 출시된 이후에 여성 혐오나 인종 차별 문구를 챗봇이 학습하게 됨)

 

성능과 안정성을 평가하기 위해서는 절대적인 시간이 걸리기도 한다고 함:

  • 저자의 회사에서는 이상 거래 탐지 시스템은 2주마다 모델을 배포한다고 함. 모델을 평가하기 위해서 최소한의 새로운 신규 데이터가 있어야 하니까.

 

알고리즘 난제

알고리즘 난제는 특정 모델이나 알고리즘에서만 적용되는 거라고 함.

 

그러니까 신경망과 같은 모델은 일부 부분 데이터로 쉽게 모델을 업데이트 할 수 있지만, 행렬 기반 모델과 트리 기반 모델은 부분 업데이트가 어렵고 전체 데이터를 이용해서 다시 학습해야한다고 함.

 

 

 

Q) 연속 학습을 할 때 신규 데이터에 대한 통계치를 이용해서 피처 스케일링을 할텐데 이 경우에는 통계치를 어딘가에 저장해두고 신규 데이터가 올 때마다 계산 하는식으로 하는건가?

 

주로 통계치를 메모리에 저장해두고, 새로운 신규 데이터가 올 때마다 통계치를 계산하는 식으로 한다고 함. 그리고 엄격하게 계산해서 비용이 큰 것보다는 근사를 이용하기도 하고.

 

매번 전체 데이터를 통계치로 계산하는 방식이 아니라.

 

 

연속 학습을 적용하는 때:

연속 학습은 ML 모델이 개발된 이후 필요한 과정이라서 당장에 필요하지 않다.

 

연속 학습을 적용하는 단계는 다음과 같은 시기를 거쳐서 적용이 될 것.

 

 

1단계: 수동 무상태 재훈련

필요한 모델을 개발하고 있는 단계를 말함.

 

모델 업데이트는 모델 성능이 득이 더 크다고 판단하고, 업데이트 할 시간이 있을 때 알아서 수동으로 적용하는 때이다.

 

 

2단계: 자동 재훈련

이 단계는 ML 모델이 여러개 구축된 단계이고, ML 을 재훈련 하는 수동 프로세스가 너무 골칫거리라서 자동으로 프로세스를 구축하는 단계를 말한다.

 

대부분의 회사는 이 단계에 머물러 있다고 함. 이 단계는 Spark 배치 프로세싱을 이용해서 구현한다고 함.

 

다만 ML 모델의 재훈련 주기는 모델마다 다르다는 점과 의존성이 있는 경우도 있다는 점을 기억해야한다.

 

ML 모델의 자동 재훈련 프로세스는 다음과 같을 것:

    1. 데이터를 가져온다.
    1. 필요시 데이터를 오버 샘플링하거나 언더 샘플링한다.
    1. 피처를 추출한다.
    1. 레이블링 작업과 그에대한 처리를 수행해 훈련 데이터를 만든다.
    1. 훈련 과정을 시작한다.
    1. 새로 훈련한 모델을 배포한다.
    1. 모델을 배포한다.

 

모델 자동 재훈련 프로세스 스크립트는 다음 3가지 요소에 의해 결정된다:

  • 스케줄러: 트리거링을 해주는 스케줄러를 말함.
  • 데이터: 데이터 가용성과 접근성을 말함. 어디서 데이터를 가져와야 하는지, 데이터를 합쳐야 하는지, 데이터를 레이블링 해야하는지 등을 말한다.
  • 모델 스토어: 모델을 재현하는데 필요한 아티팩트를 모두 저장하는 걸 말한다.

 

 

Q) S3 에 모델 아티팩트를 버저닝해서 저장하는 방식보다 SageMaker 나 MLflow 와 같은 모델 스토어 도구를 이용하는 이유는?

 

AWS S3와 같은 클라우드 스토리지 서비스를 사용하여 모델 아티팩트를 저장하는 것은 간단하고 비용 효율적일 수 있지만, SageMaker, MLflow와 같은 전문 모델 관리 도구를 사용하는 것은 여러 이유에서 더욱 이점이 있다고 함.

 

이 도구들은 모델의 각 버전에 대해 자세한 메타데이터를 저장하고 관리할 수 있습니다. 예를 들어, MLflow는 각 모델 실행에 대한 파라미터, 메트릭, 결과 등을 로깅하고 버전을 자동으로 관리할 수 있습니다

 

AWS SageMaker는 Jupyter 노트북 인스턴스, 실험 관리, 자동 모델 튜닝, 엔드투엔드 머신 러닝 파이프라인 생성 등을 지원하여 통합된 개발 환경을 제공하기도 한다고 함.

 

SageMaker와 MLflow는 모델을 신속하게 배포하고 스케일링하는 기능도 제공함.

 

 

Q) Log and Wait 가 뭔데?

 

일단 모델이 새로운 데이터를 가지고 예측할 때 피처가 추출된다는 점을 알아야한다.

  • 피처들은 데이터에서 유의미한 정보를 추출하고 변환하여 모델이 이해할 수 있는 형식으로 만드는 과정을 포함한다. 피처 추출은 데이터의 원시 형태를 모델이 예측을 수행하는 데 필요한 입력 형식으로 변환하는 중요한 단계임.

 

중요한 건 이 피처 추출을 로그로 기억해두고, 훈련 데이터에서 재사용하는 방식이다.

 

이렇게하면 데이터를 매번 새로 처리하고 피처를 추출하는 계산을 사용하지 않아도 된다. 그리고 예측과 훈련 모두에서 동일한 피처를 사용함으로써 모델의 일관성과 성능을 유지할 수 있다.

 

 

Q) 피처 로깅은 어떤식으로 되는거야?

 

예시: 피처 로깅 프로세스

 

상황: 온라인 쇼핑 플랫폼에서 사용자의 상품 클릭 및 구매 데이터를 기반으로 추천 시스템을 구축하는 경우.

 

1. 데이터 수집: 사용자의 활동(예: 상품 클릭, 페이지 조회 등) 데이터가 실시간으로 수집됩니다.

 

2. 피처 추출:

  • 사용자 ID
  • 클릭된 상품 ID
  • 세션 ID
  • 사용자가 페이지에 머문 시간
  • 사용자의 클릭 패턴 (예: 클릭된 상품의 카테고리)

 

3. 피처 로깅:

  • 수집된 데이터에서 추출된 피처들을 JSON 형식으로 변환.
  • 각 로그는 피처 데이터와 함께 타임스탬프 정보를 포함함.
{
    "timestamp": "2023-04-01T12:34:56Z",
    "user_id": "123456",
    "product_id": "78910",
    "session_id": "abcde12345",
    "time_spent": 300,
    "click_pattern": ["Electronics", "Mobiles", "Accessories"]
}

 

 

4. 데이터 저장:

  • 이 JSON 로그 데이터는 실시간 데이터 스트림으로부터 데이터 레이크나 빅 데이터 시스템으로 전송된다.
  • 데이터는 추후 분석이나 모델 훈련을 위해 활용된다.

 

5. 재사용

  • 저장된 로그 데이터는 모델의 재훈련이 필요할 때 불러와 사용된다.

 

3단계: 자동 상태 유지 훈련

이 단계에서는 이제 모델을 매번 처음 단계부터 재훈련하는게 아니라 신규 데이터만을 이용해서 상태 유지 훈련을 하는 걸 말한다.

 

이렇게하면 일반적으로 성능적으로도 비용적으로도 이익을 볼 수 있음.

 

상태 재훈련 유지 프로세스를 구축할 땐 데이터와 모델 계보 (lineage) 를 잘 관리하는거임. 이건 모델 스토어에서도 지원안한다고 한다.

  • 무슨 뜻이냐면, 모델을 v1.0 에서 1.1 로 업데이트하고, 모델 버전이 2.16 -> 2.17 로 업데이트 할 때 어떤 모델을 베이스 모델로 사용했는지, 어떤 데이터들이 모델 업데이트에 사용되었는지를 추적하는 작업이다.

 

4단계: 연속 학습

이 단계에서는 좀 더 모델의 업데이트가 필요할 때 이뤄지는 단계를 말한다. 즉 주기적으로 신규 데이터로 모델이 업데이트 되기도 하지만 데이터 분포가 변경되고 모델의 성능이 낮아졌다고 판단될 때 재훈련되기도 하는 그런 단계를 말함.

 

이렇게 모델 업데이트가 효율적으로 되면 시장의 외부 이벤트 (e.g 블랙 프라이데이나, 지역 축제 등) 에서도 유연하게 반응해서 최적의 결과를 낼 수 있을 것.

 

모델 업데이트 트리거는 다음과 같을 것:

  • 시간 기반: 5분마다 업데이트 된다 이런 것
  • 성능 기반: 모델의 성능이 떨어졌다고 판단할 때마다 업데이트 되는 것
  • 볼륨 기반: 레이블링된 데이터가 5% 정도 쌓였다고 판단될 떄 업데이트 되는 것
  • 드리프트 기반: 데이터 분포 시프트가 변경되었다고 감지될 때마다 업데이트 되는 것

 

이렇게 트리거가 되려면 모니터링 시스템도 잘 구축되어야 하네. 그리고 탐지도 잘해야함. 오탐지가 되면 불필요하게 업데이트 될거임.

 

연속 학습의 최종 목표는 엣지 디바이스와 결합될 때라고도 함. 모델은 가능한 중앙화된 서버에서 관리되는 것보다 엣지 디바이스에서 관리되는 걸 목표로 한다. 이게 장점이 훨씬 큼.

 

 

모델 업데이트 빈도

신규 데이터의 가치

실용적인 관점에서 모델 성능 주기를 평가해본다면 실제로 모델을 업데이트 했을 때 얼마만큼의 성능 변화를 주는지 판단해봐야한다.

 

과거 데이터를 주기별로 나눠서 성능 차이가 얼만큼 나는지 판단해보고 재훈련 주기를 결정하는거지.

  • 예시로 1월-6월 데이터로 학습한 모델 A, 4월-9월 데이터로 학습한 모델 B, 6월-11월 데이터로 학습한 모델 C 이렇게 3가지 모델로 두고 12월 데이터로 모델들을 평가해보는거지.

자주 업데이트 할수록 모델의 성능이 좋아진다면 그렇게 해야할 것.

 

페이스북 같은 경우는 모델을 1주일마다 재훈련을 하다가 일일 단위로 업데이트 한 이후로 광고 모델 성능이 1% 좋아졌다고 한다. (이건 금액으로 치면 엄청난거임)

 

 

모델 반복 vs 데이터 반복

모델 성능을 더 낫게 하는 방법은 모델을 업데이트 방법 (e.g 새로운 신규 피처를 추가하던가, 모델 아키텍처를 개선하던가) 과 새로운 데이터를 바탕으로 업데이트 하는 방법 이렇게 있다.

 

어떤 쪽을 선택할지는 뭐가 더 성능을 낫게 만들지로 결정하면 된다.

 

현재의 연구 결과로는 뭐가 더 성능을 낫게 만드는지는 명확하게 밝혀진 바가 없다고 함. 논문이 계속 나와야된다고 한다.

 

지금은 실험적으로 해보면서 더 성능을 낫게 만드는 방법을 알아야하는 단계라고 함.

 

그리고 중요한 건 모델의 성능 변화가 비용 효율적이어야 한다는 거임. 모델 성능이 1% 증가시키기 위해서 이전보다 100배 더 많은 학습을 해야한다면 글쎼..

 

 

 

프로덕션에서 테스트하기

프로덕션 테스트를 하는 이유는 결국 최신 데이터를 만나봐야만 모델이 제대로 작동하는지 평가할 수 있기 때문임.

 

프로덕션 테스트를 하는 방법은 다양하게 있다. 하나씩 살펴보자.

  • Shadow Test
  • A/B 테스트
  • 카나리 배포
  • 인터리빙 실험 (interleaving experience)
  • bandit

 

중요한 건 모델을 테스트 할 때 테스트 방법과, 테스트 임계값등을 정하고 CI/CD 처럼 자연스럽게 테스트하고 배포될 수 있도록 파이프라인을 구축하는 거임.

  • 일반적으로 모델 평가와 테스트는 데이터 과학자가 하는 경우가 많은데 이 경우에는 편향으로 가득차있어서 올바르게 테스트할 수 없다.

 

 

Q) 프로덕션 테스트 이전에 하는 오프라인 테스트로는 충분하지 않는가?

 

충분하지 않다.

 

 

Q) 오프라인 테스트 유형은 훈련 데이터에서 테스트 분할을 한 것을 말하는건가?

 

그것 말고도 특정 과거 시점의 데이터로 테스트하는 방법인 백테스트 (back test) 라는 것도 있다.

 

예를 들면 모델 배포 전 과거 한시간 전 데이터로 테스트 하는 방법임.

 

 

새도 배포

기존 모델과 새 모델 모두 배포한 뒤 기존 모델로 들어오는 트래픽을 새 모델로도 향하게 만드는 방법이다.

 

그리고 새 모델에서 결과를 분석해서 기존 모델을 대체할 수 있을지 판단하는거임.

 

물론 새 모델의 예측 결과는 사용자에게 보여주지 않는다.

 

위험도가 적으나, 비용이 두배로 든다는 점이 있다.

 

 

A/B 테스트

새도 테스트는 새 모델의 예측 결과가 사용자에게 보여주지 않는다.

 

그러나 A/B 테스트는 트래픽의 일정 부분을 새 모델로 향하게 해서 새 모델과 기존 모델의 예측 결과를 비교해보고 통계적으로 더 낫다고 생각하는 모델을 배포하도록 만드는 방법이다.

  • 통계적 비교 방법은 2-표본 검정을 사용한다. 이 방법은 모집단의 차이가 통계적으로 유의미한지 판단하는 방법임.

 

A/B 테스트를 할 때 주의할 점은 다음과 같다:

  • 트래픽은 무작위로 향하게 만든다. (무작위가 아니라면 그 요소에 의해서 결과 차이가 발생할 수도 있기 때문임.)
  • A/B 테스트는 두 대상을 비교할 수 있을만한 충분한 테스트 샘플을 확보해야한다.

 

 

카나리 배포

카나리 배포는 A/B 테스트와 유사하다.

 

새 모델을 배포하기 전에 적은 트래픽만 새 모델로 향하게 만든 후 문제가 없다면 점차 롤아웃을 하는 방법임.

 

문제가 생기면 기존 모델로만 트래픽을 서빙하도록 하는 방법이다.

 

 

인터리빙 실험

인터리빙 실험은 사용자에게 기존 모델의 예측과 새 모델의 예측 모두를 보여주고나서 반응을 보도록 하는 방법임.

 

OpenAI 에서 주로 하는 방법이다. 넷플릭스에서도 기존 A/B 테스트에 비해서 훨씬 적은 샘플로 모델을 더 비교해볼 수 있는 방법이라고 한다.

 

인터리빙 실험을 할 때 중요한 건 두 예측이 모두 동등해야한다는 거임:

  • 노출되는 위치가 달라지면 그건 동등한게 아니다. 일반적으로 위에 있는게 더 우위에 있다.

 

 

밴딧 테스트

A/B 테스트가 무작위로 트래픽을 분할해서 일정 테스트 샘플이 쌓인 후 모델의 성능을 측정하는 방식이라면, 밴딧 테스트는 사용자로부터 피드백을 계속해서 받고 이 상태를 유지하면서 더 나은 성능을 가진 모델에게 많은 트래픽을 주도록 하는 방법이다.

 

즉 성과가 좋은 모델이 더 많은 트래픽을 받게 된다.

 

A/B 테스트가 비교를 위해 샘플 데이터가 63만개 정도 필요하다면, 밴딧 테스트는 1만개 정도만 있으면 된다고 할 정도로 훨씬 효율적이라고 함.

 

그러나 밴딧 테스트를 위해서는 짧은 피드백 루프가 있어야 하고, 모델이 온라인 예측을 수행할 수 있어야하며, 피드백을 바탕으로 모델의 성능을 계산하고 라우팅하는 시스템이 필요해서 꽤 복잡하다.

 

+ Recent posts