Introduction
- 데이터 분포 시프트에 모델을 적응시키려면 ML 모델을 지속적으로 업데이트해야한다.
- 모니터링이 사용 중인 모델의 결과값을 수동으로 추적하는 일이라면, 프로덕션 테스트는 모델을 평가하기 위해 결과값을 생성할 모델을 능동적으로 선택하는 일이다. 프로덕션에서 모니터링과 테스트의 목표는 모델 성능을 이해하고 업데이트 시기를 파악하는 것이다. 그리고 연속 학습의 목표는 업데이트를 안전하고 효율적으로 자동화하는 것이다. 모니터링과 연속 학습을 통해 변화하는 환경에 대해 유지보수적이고 적응적인 ML 시스템을 설계하고 있다.
9.1 연속 학습 Continual Learning
- 많은 분들이 ‘연속 학습’이라는 말을 들으면 모델이 프로덕션에서 들어오는 모든 샘플로 스스로를 업데이트하는 훈련 패러다임을 생각한다. 하지만 실제로 그렇게 하는 기업은 거의 없다.
- 모델이 신경망이라면 모든 입력 샘플을 학습하면 파괴적 망각catastrophic forgetting에 취약해진다. 파괴적 망각은 신경망이 새로운 정보를 학습할 때 이전에 학습한 정보를 갑자기 그리고 잊어버리는 경향을 말한다.
- 훈련 비용이 더 많이 든다. 오늘날 하드웨어 백엔드는 대부분 배치 처리를 위해 설계됐으므로 샘플을 하나씩 처리하면 연산 성능이 크게 낭비되고 데이터 병렬 처리를 활용할 수 없기 때문이다.
- 프로덕션에서 연속 학습을 사용하는 회사는 모델을 마이크로 배치로 업데이트한다. 각 마이크로 배치의 최적 샘플 개수는 작업에 따라 다르다.
- 업데이트된 모델은 평가가 완료될 때까지 배포해서는 안된다. 즉, 기존 모델을 직접 변경해서는 안된다. 대신 기존 모델의 복제본을 생성해 신규 데이터로 업데이트하고, 업데이트된 복제본이 더 낫다고 판명될 때만 기존 모델을 업데이트된 복제본으로 교체한다. 기존 모델을 챔피언champion 모델, 업데이트된 복제 모델을 도전자challenger라고 한다.
- 그럼에도 ‘연속 학습’이라는 용어는 모델을 매우 자주 업데이트하는 것을 떠올리게 한다. 많은 사람이 대부분의 회사에서 모델을 자주 업데이트할 필요가 없다고 주장하며 그 이유는 두 가지이다.
- 재훈련 일정이 타당할 만큼 충분한 트래픽, 즉 충분한 신규 데이터가 없기 때문이다.
- 모델 성능이 그렇게 빨리 떨어지지는 않기 때문이다. 재훈련 일정을 일주일에 하루로 변경해도 수익이 나지 않고 더 많은 오버헤드가 발생한다면 모델을 자주 업데이트할 필요가 없다.
9.1.1 무상태 재훈련 vs 상태 유지 훈련
- 연속 훈련은 재훈련 빈도가 아니라 모델 재훈련 방식과 관련이 있다. 대부분의 회사는 무상태 재훈련stateless retraining을 수행해 모델이 매번 처음부터 훈련된다. 연속 학습은 상태 유지 훈련stateful training을 허용함을 의미하며 모델은 신규 데이터로 훈련을 지속한다. 상태 유지 훈련은 미세 조정fine-tuning 혹은 증분 훈련incremental training이라고 한다.
- 상태 유지 훈련을 사용하면 더 적은 데이터로 모델을 업데이트한다. 모델을 처음부터 훈련하려면 동일한 모델을 미세 조정할 때보다 데이터가 훨씬 많이 필요하다.
- 상태 유지 훈련을 하면 데이터를 완전히 저장하는 일을 피할 수 있는데, 사람들은 이 점을 종종 간과한다. 기존 무상태 재훈련에서 데이터 샘플은 모델을 여러 번 반복 훈련하는 동안 재사용되며, 이는 데이터를 저장해야 함을 의미한다. 그런데 저장이 항상 가능하지는 않다. 특히 개인 정보 보호 요구 사항이 엄격한 데이터라면 더욱 그렇다. 한편 상태 유지 훈련 패러다임에서는 각 모델 업데이트가 신규 데이터로만 훈련되므로 한 데이터 샘플은 훈련에 한 번만 사용된다. 즉, 데이터를 영구 스토리지에 저장할 필요 없이 모델 훈련이 이뤄지므로 데이터 개인 정보 보호에 대한 우려를 많이 덜 수 있다. 하지만 오늘날 기업들은 온라인에서 수행하는 모든 행위를 추적하는 관행을 따라 데이터 폐기를 꺼리기에 이 점이 간과되고 있다.
- 상태 유지 훈련이 대량의 데이터로 처음부터 훈련하지 않는다는 의미는 아니다. 즉, 신규 데이터로 미세 조정만을 수행하지는 않는다. 상태 유지 훈련을 가장 성공적으로 적용한 기업에서도 종종 모델을 교정하기 위해 대량의 데이터로 처음부터 모델을 훈련한다. 혹은 상태 유지 훈련과 병행해 모델을 처음부터 훈련하고 파라미터 서버parameter server 같은 기술을 사용해 업데이트된 두 모델을 결합하기도 한다.
- 인프라가 무상태 재훈련과 상태 유지 훈련을 모두 허용하도록 설정되면 훈련 빈도는 쉽게 조정할 수 있다.
- 연속 학습은 필요할 때마다 업데이트하고, 이 업데이트를 신속하게 배포하는 방식으로 인프라를 설정하는 것이다.
- 모델 업데이트 유형 2가지
- 모델 반복(Model iteration): 기존 모델 아키텍처에 새로운 피처가 추가되거나 모델 아키텍처가 변경된다.
- 데이터 반복(Data iteration): 모델 아키텍처와 피처는 동일하게 유지되지만 신규 데이터로 모델을 갱신한다.
- 용어 정리
- 어떤 사람들은 ‘온라인 학습’이라는 용어로 ‘모델이 들어오는 신규 샘플로 학습’하는 특정 상황을 지칭한다. 이러한 상황에는 연속 학습이 온라인 학습의 일반화이다. 하지만 온라인 교육, 인터넷 강의 등의 단어와 혼동이 심하다.
- ‘continuous learning’은 모델이 들어오는 샘플로 지속적으로 학습하는 체제를 의미하는 반면 ‘continual learning’에서는 학습이 일련의 배치 혹은 마이크로 배치로 수행된다.
- ‘continuous learning’은 때때로 ML의 지속적인 제공(CD, continuous delivery)을 제공하는 데 사용하는데, CD는 ‘continual learning’과 밀접관 관련이 있다. ‘continual learning’은 기업이 ML 모델의 반복 주기를 가속화하는 데 도움이 되기 때문이다. 다만 차이점은 이러한 의미로 사용될 때 ‘continuous learning’은 CD를 위한 파이프라인 설정에 대한 데브옵스 관점인 반면, ‘continual learning’은 ML 관점에서 사용된다는 점이다. 이 용어는 모호하므로 사용을 권장하지 않는다.
9.1.2 연속 학습의 필요성
- 연속 학습의 첫번째 유스 케이스는 데이터 분포 시프트, 특히 갑자기 발생하는 시프트에 대처하는 일이다.
- 두번째 유스 케이스는 희귀한 사건rare event에 적응하는 것이다.
- 오늘날 ML 프로덕션의 주요 난제인 지속 콜드 스타트continuous cold start 문제에는 연속 학습이 도움이 된다. 콜드 스타트 문제는 모델이 과거 데이터 없이 신규 사용자를 예측해야 할 때 발생한다.