[8주차] Rules of Machine Learning: Best Practices for ML Engineering 요약

Soonyoung Hwang·2022년 11월 10일
0

네이버 부스트캠프

목록 보기
2/14

Rules of Machine Learning: Best Practices for ML Engineering 문서 읽고 정리하기!

주로 MLOps 분야에 대한 tip 입니다.
시간 날 때 커피마시면서 천천히 읽어보면 좋을 듯 한 내용들 입니다.

Before Machine Learning

  1. 머신러닝 없이 제품을 런치하는 것을 두려워하지 말자 - 머신러닝은 매우 좋다. 하지만 데이터가 부족하다면 우리의 경험보다 성능이 나쁘다. 데이터가 충분하지 않다면 머신러닝이 반드시 옳은 것은 아니다.
  2. Metrics를 디자인하고, 구현해라 - 모델이 무엇을 해결할지 정하자
  3. 복잡한 판단근거에 의존하기 보단 머신러닝을 택해라 - simple heuristic은 좋다. 하지만 복잡해진다면 유지가 불가능하다. 데이터가 있고, 하고싶은 목적을 정했으면 머신러닝으로 구현해라

ML Phase 1 : Your First Pipeline

  1. 첫 번째 모델을 간단하게 만들고 (주변)구조를 올바르게 만들어라 - Feature가 학습까지 잘 도달하는지, weight가 합리적인 값들인지, 서버와 잘 동작하는지 확인하라
  2. 머신러닝과 별개로 전체구조를 테스트해라 - Infrastructure을 testable하게 해라
  3. 파이프라인을 복사할 땐, 데이터가 떨어져나가지 않는지 신경써라
  4. 경험에 근거한 것을 Feature로 만들고 외부에서 다루어라 - 1. 머신러닝이 배우는 것 과정이 자연스럽도록 2. 너가 버리고싶지 않은 intuition을 포함하도록

Monitoring

  1. 너의 시스템은 갱신되어야 한다
  2. 모델을 배포하기전에 문제를 찾아내라 - 배포하고나면 문제 처리가 매-우 복잡해진다
  3. 눈에 안 띄는 실패를 잘 봐라 - 모니터링을 통해 쉽게 모델을 좋게 유지할 수 있는 부분이 있다
  4. Feature Column에 대한 Documentation을 작성해라 - 누가 column을 만들었고 왜 만들었는지 이해하는 사람이 있어야 한다

Your First Objective

  1. 최적화할 목표에 대해 너무 깊게 생각하지 마라 - 대부분의 metrics 들은 너가 원하는 성능향상과 관계가 있다. 초기 개발 단계에선 어떠한 것을 써도 (MSE, MRSE) 상관없이 최적화를 하면 된다.
  2. 처음엔 간단하며, 관찰가능하고, 이유를 특정지을 수 있는 Metric 을 선택해라
  3. 해석가능한 모델로 시작하는 것은 디버깅을 쉽게한다
  4. 스팸필터링과 퀄리티 랭킹시스템을 분리해라 - 둘은 성격이 전혀 다르다.

ML Phase 2 : Feature Engineering

  1. 런치하고 반복할 계획을 해라 - 너가 지금 배포한 것이 최종 버전이라고 생각하지 말고 다양한 요소를 추가할 수 있게 계획을 해라
  2. 학습된 Feature가 아니라 직접 관찰가능하고 리포트된 Feature를 써라 - 외부에서 학습된 결과를 Feature로 쓴다면 nonconvex, out-of-date 등 다양한 문제가 생길 수 있다. 일단 깊지 않은 feature로 훌륭한 결과를 내는 모델을 만든 후, 더 복잡한 모델을 사용해라
  3. 문맥을 일반화하는 내용의 Feature를 고려해라 - (이해 잘 못 함)
  4. 가능한 특정한 Feature를 사용해라 - 복잡한 여러개의 Feature보다 수많은 간단한 Feature 가 더 배우기 쉽다
  5. 기존의 Feature를 합리적인 방향으로 섞고 조정하여 새로 만들어라
  6. Linear Model 에서 학습 가능한 feature weight의 숫자는 데이터의 양에 비례한다 - 데이터 모델 간 괴리가 크지 않도록 한다
  7. 더 이상 사용하지 않는 Feature를 정리한다

Human Analysis of the System

  1. 일반적인 유저를 고려해라
  2. 모델간 유사도를 계산해라 - 같은 input을 넣고 다른 모델과 간극이 너무 크지 않도록 해라
  3. 모델을 선택할 땐, 활용도가 예측성능보다 중요하다
  4. 측정된 에러의 패턴을 파악해서 새로운 Feature를 만들어라
  5. 원치않는 결과를 정량화해라 - measure first, optimize second
  6. 짧은 기간내의 동일한 행동이 시간이 지난 후 동일하지 않을 수도 있다는 것을 알아라
  7. 너가 제공하기 원하는 것을 잘 트레이닝 하고 있는지 확인하기 위해서는 서빙 타임에 쓰이는 feature들을 다음 트레이닝 타임에 사용하기 위해 기록을 해놓아라 - 매번은 힘들어도 종종 consistency 확인을 위해 serving과 training 과의 gap을 확인하자
  8. Importance-weight sampled data 를 이용하고 절대로 버리지 말아라 - 종종 거의 나타나지 않는 패턴의 데이터를 버리고 싶어하지만 데이터를 버리는 것 보다 importance- weighting이 더 낫다. 그것들을 특정확률로 샘플 된다면, 그들에게 그 특정확률의 weight를 주어라 (다시 확인해보자)
  9. 트레이닝과 서빙 테이블에서 데이터를 합친다면 테이블 내 데이터가 변할 수 있다는 것을 알아라
  10. 가능한한 training pipeline 에서와 serving pipeline 에서 코드를 재사용해라 - training-serving skew를 줄일 수 있다
  11. 1월5일까지의 데이터로 학습한 모델이 있으면, 1월 6일부터의 데이터로 테스트해라
  12. 이진분류에서 단기간의 희생은 클린 데이터를 위해 버려라 - 만약 너가 positive로 판별한 것을 유저가 negative로 표시해놓는다면, 이 정보를 이용하고 싶겠지만 이것은 샘플링 편향을 일으킨다. 서빙할 때는 이러한 데이터들을 모으기만 하고 사용하지말고 나중에 한번에 training할 때 써라
  13. 랭킹문제에서 내부적인 편향이 있을 수 있음을 알아라
  14. 위치적 특징에 따른 결과를 피드백에 반영하지 않도록 조심해라 - 1번에 놓으면 당연히 클릭이 많이된다
  15. Training/Serving Skew를 측정해라

ML Phase 3 : Slowed Growth, Optimization Refinement, and Complex Models

  1. 목적과 일치하지 않는 것이 문제가 된다면 새로운 Feature에 집중하지 말아라 - 모델을 버리던 goal을 바꾸던 해야 한다
  2. Launch decision은 많은 분야를 고려해서 결정내려져야 한다 - 특정 수치가 좋아져도 다른 criteria들이 나빠졌을 수도 있다.
  3. 앙상블은 단순하게 해라 - 각각의 모델은 다른 모델의 input 만 받던지, 베이스모델이 여러개 특징을 받던지, 둘 다 하지는 말아라
  4. Existing signals를 정제하기 보다는 질적으로 새로운 소스의 정보를 고려해라
  5. 다양성, 맞춤설정 또는 관련성은 인기도와 상관관계가 높을 것으로 기대하지 말아라 - 다양성, 맞춤설정, 관련성이 해서 일반적인 인기도를 대표하진 않는다
  6. 당신의 친구는 다른 제품들간에 당신과 같은 경향을 보일 것 이지만 당신의 흥미는 그렇지 않다 - 한 사람이 사용하는 제품간 관계가 크게 없을 수 있다
profile
https://github.com/soonyoung-hwang

0개의 댓글