[머신러닝 시스템 설계]머신러닝 시스템을 단계별로 설계할 수 있는 7단계 접근법
in DATA on Machine Learning
- 해당 포스팅은 가상 면접 사례로 배우는 머신러닝 시스템 설계 기초 책의 내용을 읽고 개인적인 학습 목적 하에 작성된 글입니다.
- 1장(소개 및 개요) 내용 위주이며, 주관적인 의견도 포함되어있으니 참고만 부탁드립니다.😊
📗 책 소개
이직 면접을 보거나, 다른 도메인의 동일 계열 직군 사람들을 만날 때 가장 궁금한 부분이 MLOps 부분이 아니었나 싶어요!
실제 업무를 진행하며 모델 배포 step까지는 가기 어려웠던 부분도 있었기도 하고 아직 엔지니어라고는 칭할 수 없는 부족한 실력으로 인해, 업무적으로 제 소개를 할 때 ‘분석하고 있어요!’라고 하지만 ‘모델 설계 및 배포하고 있어요!’라고 할만한 경험이 없기에 항상 아쉬웠습니다😢
실제 업무에서 어떻게 이루어지는지 궁금한데 무엇부터 보아야할지 방황하던 찰나에, 가상 면접 사례로 배우는 머신러닝 시스템 설계 기초 책을 발견하게 되었습니다.
책에는 머신러닝 시스템을 설계하기 위하여 필요한 7단계를 소개하며, 예시 사례들을 통해 각 설계 단계마다 필요한 지식과 노하우를 담았더라구요!
하나의 사례 단위로 설명이 되어있어서, 큰 그림을 그리며 구조를 짜는 법을 익힐 수 있도록 구성되어 있어서 좋았습니다👍
실제 사례를 바탕으로 설명한 기술 서적 중에서 ‘실무에 적용하기에 좋겠다’ 라고 와닿는 책 중 하나라, 책 소개와 함께 재미있게 읽었던 chapter들 위주로 포스팅을 진행하려고 합니다! 많관부✨
먼저 책에 대한 간단한 소개를 한 다음,
머신러닝 시스템 설계 절차를 다룬 1장 내용을 요약 및 정리해보겠습니다.
👩🏻💻 머신러닝 시스템 설계 면접
이 책은 머신러닝 시스템 설계에 관심이 있는 모든 사람을 위해 쓰여졌으며, 특히나 머신러닝 면접을 준비하는 사람들을 위해 가상 면접 형식으로 구성되어 있습니다.
- 각 장 추가 자료 : 깃헙 링크
🤼♂️ 머신러닝 시스템 설계 면접이란?
머신러닝 시스템 설계 면접에서는 지원자가 시각 검색, 광고 클릭 예측 등과 같은 머신러닝 시스템을 끝에서 끝까지(end-to-end) 설계할 수 있는지 평가합니다.
- 설계 면접 질문은 명확한 구조가 없기 때문에 까다로움
- 질문과 주제가 광범위하여 다양한 해석과 접근이 가능 (정답이 없음)
면접을 잘 보기 위해서는 머신러닝의 기본 개념과 기술을 깊이 이해하고 있어야 할 뿐만 아니라, 이를 실제 문제 해결에 적용할 수 있어야 합니다.
- 데이터 파이프라인/피처 엔지니어링/효과적인 머신러닝 시스템 설계에 대한 지식
- 주어진 문제에 적합 모델 선택/매개변수 조정/성능을 평가할 수 있는 능력
면접의 목표는 지원자가 머신러닝에 대한 이론을 적용하여 효과적인 시스템을 설계하고 구현하는 능력이 있는지 전반적으로 평가하는 것입니다.
- 엔지니어에게 머신러닝 시스템을 설계하는 능력은 필수적인 기술
- 경력이 쌓일수록 더욱 중요하며, 머신러닝 시스템에 잘못된 아키텍처를 선택하면 많은 시간과 리소스가 낭비될 수 있음
🎁 책의 장점
1. 최신 기술 설명
실제 서비스 되고 있는 머신러닝 사례, 사례별 개발 사이클의 설명, 저자의 노하우가 담긴 상세한 팁이라는 세가지 축으로 이야기를 풀어 갑니다.
1️⃣ 머신러닝 사례
유튜브 동영상 추천, 에어비엔비 예약 등의 흥미로운 사례를 제시합니다.
2️⃣ 사례별 개발 사이클의 설명
각 서비스의 개발 과정을 [요구사항 명확화>머신러닝 작업으로 문제를 구조화>데이터 준비>모델 개발>평가>서빙] 순서로 진행하며, 하나의 서비스가 완성되어 가는 모습을 설명합니다.
3️⃣ 저자의 노하우가 담긴 상세한 팁
다양한 분석 기법, 모델을 설명하며 최신 정보를 전달하며,** 머신러닝 유형/모델/ 평가 지표를 선택**하는 설명에는 저자의 노하우를 담았습니다.
2. 실용성
면접관과 지원자가 등장하는 가상 면접 형태로 책의 내용이 구성되어있으며, 면접 시나리오는 실제 머신러닝 면접에서 나오는 질문으로 구성되어 있습니다.
- 데이터 파이프라인, 피처 엔지니어링, 시스템 설계 등의 전체적(end-to-end)인 지식
실제 프로젝트에서 경험하게 되는 선택과 그 선택의 기준을 합리적으로 설명합니다.
3. 통찰력
저자는 머신러닝이라는 최신 기술 영역에서 아직 명확한 기준이 없는 생각거리를 던지며, 각 장에서 독자에게 계속 질문을 합니다. 이를 통해 머신러닝 커리어의 다면적인 역량 개발을 도와줍니다. ▶ 예시 질문들
📣 추천평
✍🏻 박해선 (Microsoft AI MVP, 《혼자 공부하는 머신러닝+딥러닝》 저자)
렘브란트가 그린 초상화를 가까이서 보면 그의 섬세한 붓 터치에 감탄하게 됩니다. 하지만 한 걸음 물러서서 보면 강렬한 명암으로 가득 찬 화면 구성이 그를 당대 최고의 초상화 화가로 만들었음을 알 수 있습니다. 머신러닝 시스템도 비슷한 것 같습니다. 처음 머신러닝을 배울 때는 대부분 모델을 만드는 코드에 초점을 맞추게 됩니다. 하지만 제품을 만들려면 머신러닝 모델은 물론 이를 포함한 전체 시스템을 설계할 수 있어야 합니다. 이 책은 가상의 면접 사례를 들어 머신러닝 시스템의 설계 방법을 설명하지만, 취업을 준비하는 사람에게만 해당하는 책은 아닙니다. 머신러닝 모델을 최종 사용자에게 멋지게 서비스하고 싶은 엔지니어인가요? 그렇다면 이 책은 바로 여러분의 책입니다.
✍🏻 박찬성 (구글 공인 개발자 전문가(ML GDE), 텐서플로 코리아 커뮤니티 운영진)
결국 우리가 만드는 모든 것은 시스템의 일부가 되기 때문에, 처음부터 시스템적 관점으로 전체를 바라보는 습관을 들여야만 실제 가치 창출로 이어질 수 있습니다. 다만, 수많은 구성 요소로 이루어진 시스템을 실제 경험 없이 속속들이 정교하게 파헤치고 더 나아가 설계하기는 불가능에 가깝습니다. 이 책은 우리가 친숙하게 접하는 다양한 실제 시스템을 예로 들며 시스템적인 사고를 실험적으로, 그리고 체계적으로 해 나가는 힘을 키워 줍니다. 특히 머신러닝의 도입으로 더욱 복잡해진 현대적인 시스템을 이해하는 데 큰 도움이 될 것입니다.
💎 1장: 소개 및 개요
많은 엔지니어가 로지스틱 회귀, 신경망 같은 머신러닝 알고리즘을 시스템의 전부라고 생각하지만,
운영 환경의 머신러닝 시스템에는 단순한 모델 개발보다 훨씬 더 많은 작업이 필요됩니다.
(데이터 수집/데이터 검증/피처 추출/머신러닝 알고리즘/평가 파이프라인/모니터링/분석 도구/프로세스 관리 도구/서버 자원 관리/서비스 인프라 스트럭처/설정)
📍 머신러닝 시스템 구성요소들
- 데이터를 관리하기 위한 데이터 스택
- 수백만 사용자가 사용할 수 있도록 하는 서비스 인프라
- 시스템의 성능을 측정하기 위한 평가 파이프라인
- 시간이 지나도 모델의 성능이 저하되지 않도록 하기 위한 모니터링
머신러닝 시스템 설계 면접에서는 정해진 정답이 없는 개방형 질문을 통해, 다각적으로 지원자를 평가하려고 합니다.
📍 면접관이 지원자에게 보고자 하는 것들
- 지원자의 사고 과정
- 다양한 머신러닝 주제에 대한 이해도
- 시스템을 끝까지(end-to-end) 설계하는 능력
- 다양한 선택의 장단점을 반영한 설계 능력
복잡한 머신러닝 시스템을 성공적이고 탄탄하게 설계하려면 단계별로 무너지지 않게 틀을 만드는 것이 중요합니다.
프레임워크에 맞춰 7단계 접근법에 따라 단계별로 설계하는 방법을 배우며, 해당 프레임워크에 맞춰 생각을 구조화한다면 도움이 될 것입니다.
📍 프레임워크 - 머신러닝 시스템 설계 절차
- 요구사항 명확화
- 머신러닝 작업으로 문제를 구조화
- 데이터 준비
- 모델 개발
- 평가
- 배포 및 서비스 제공
- 모니터링 및 인프라
프레임워크의 단계별 상세 내용은 다음과 같습니다.
1️⃣ 요구사항 명확화
설계 관련 질문은 ‘이벤트 추천 시스템을 설계하시오’와 같이 의도적으로 최소한의 정보만 제공하여 모호한 경우가 일반적입니다.
광범위한 문제를 두고 우리가 우선적으로 해야 하는 첫번째 단계는 질문 내용을 정확하게 파악하는 것입니다.
요구사항을 명확하게 이해하기 위하여, 다음과 같은 질문을 하면 도움이 될 것입니다.
- 비즈니스 목표
- [휴가철 숙소 추천 시스템] 요청의 경우, 가능한 두 가지 비즈니스 목표는 예약 수와 수익을 늘리는 것임
- 시스템이 제공해야하는 피처
- feature : 머신러닝과 패턴 인식 용어 → 데이터의 특징이나 속성
- 머신러닝 시스템 설계에 영향을 줄 수 있는 피처는 무엇인지
- [동영상 추천 시스템] 요청의 경우, 사용자가 추천 영상에 ‘좋아요’나 ‘싫어요’를 선택할 수 있는 기능이 있는지 확인 필요
- 이러한 상호작용은 훈련 데이터에 라벨을 지정하는데 유용하게 사용할 수 있음
- 데이터
- 데이터 소스는 무엇인지
- 데이터세트는 얼마나 큰지
- 데이터에 라벨이 지정되어 있는지
- 제약
- 사용할 수 있는 컴퓨팅 자원은 얼마나 되는지
- 클라우드 기반 시스템인지, 단말에서 구동하는 시스템인지
- 시간이 지남에 따라 모델이 자동으로 개선되길 바라는지
- 시스템 규모
- 사용자 수는 어느 정도인지
- 동영상과 같은 콘텐츠가 얼마나 많이 제공되는지
- 사용자 수, 콘텐츠 수 등의 증가율은 어느 정도인지
- 성능
- 기대 성능은 무엇인지
- 실시간 솔루션이 필요한지
- 정확도와 대기 시간 중 무엇이 더 중요한지
위 단계가 끝나면, 시스템의 구축 범위와 요구사항에 대해 면접관과 합의하게 됩니다. 합의된 요구사항 및 제약 조건은 잘 적어두는 것이 좋습니다.
2️⃣ 머신러닝 작업으로 문제를 구조화
시스템의 요구사항을 파악했다면 문제 해결에 앞서 우리가 해야 할 것은 문제를 명확히 찾고 정의하는 것입니다. 특히나 머신러닝 문제를 해결하기 위해서는 문제의 구조를 잘 정의하는 것이 매우 중요합니다.
→ 머신러닝 작업으로 구조화 必
현실 작업에서는 주어진 문제를 해결하기 위해 머신러닝이 필요한지부터 먼저 판단해야 합니다.
그런 다음 머신러닝 시스템을 설계하려면 주어진 문제의 ‘비즈니스 목표’를 정하고, 이어서 비즈니스 목표를 기계가 이해할 수 있는 잘 정의된 ‘머신러닝 목표’로 한 번 더 전환해야 합니다.
📍 머신러닝 작업 프레임
- 머신러닝 목표 정의
- 시스템의 입력 및 출력 지정
- 적합한 머신러닝 유형 선택
머신러닝 목표 정의
머신러닝 시스템이 작업을 수행하려면 비즈니스 목표를 잘 정의된 머신러닝 목표로 변환해야 합니다. 가장 좋은 방법은 머신러닝 모델이 해결할 수 있는 목표를 잡는 것입니다.
시스템의 입력 및 출력 지정
머신러닝 목표를 결정한 후에는 시스템의 입력과 출력을 정의해야 합니다.
- 애플리케이션 : 소셜 미디어 플랫폼의 유해 콘텐츠 감지 시스템
- 입력 : 게시물
- 출력 : 이 게시물의 유해성 여부
때에 따라 시스템을 둘 이상의 머신러닝 모델로 구성할 수 있으며, 이런 경우에는 머신러닝 모델의 입력과 출력을 각각 지정해야 합니다.
- 게시물이 유해한지 여부를 판단하기 위해 두가지 모델을 사용
- 모델1 : 유해한 콘텐츠 감지를 위해 폭력을 예측하는 모델
- 모델 2 : 과도한 노출을 예측하는 모델
뿐만 아니라 각 모델의 입력-출력을 지정하는 다양한 방법이 있다는 것도 고려 사항 중 하나입니다.
- 시나리오 1 : 사용자가 여러 이벤트에 등록할 확률
- 입력 : 사용자A
- 출력 : 여러 이벤트 할당 확률(p1, p2, …)
- 시나리오 2 : 이벤트 등록 확률
- 입력 : 사용자A, 이벤트A
- 출력 : 이벤트 등록 확률
적합한 머신러닝 유형 선택
대부분의 문제는 머신러닝 유형(리프 노드) 중 하나로 구성될 수 있습니다.
- 지도학습(supervised learning)
- 훈련 데이터세트를 사용하여 작업을 학습
- 많은 문제가 이 유형에 속함
- 일반적으로 라벨이 지정된 데이터세트에서 학습하면 더 나은 결과를 얻을 수 있음
- 비지도 학습(unsupervised learning)
- 정답이 없는 데이터를 처리하여 예측
- 목표 : 데이터 사이에서 의미 있는 패턴을 식별
- 알고리즘 : 클러스터링, 연관 그리고 차원 축소
- 강화학습
- agent는 환경과의 상호작용에서 시행착오를 반복하여 수행하는 방법을 찾아냄
머신러닝 모델은 일반적으로 학습 데이터를 사용할 때 특정 작업을 더 잘 학습하게 됩니다. 이러한 이유로 비지도 학습과 강화학습에 비해 지도학습이 많이 사용됩니다. 📚 지도학습 (회귀, 분류 모델)
논의 주제
면접에서 언급하기 좋은 주제들입니다. 📣 논의 주제들
3️⃣ 데이터 준비
머신러닝 모델은 데이터를 통해 직접 학습하기 때문에, 예측력 있는 데이터는 머신러닝 모델 훈련에 필수적입니다.
이때 고품질의 데이터를 모델에 입력하기 위하여, 데이터 엔지니어링과 피처 엔지니어링이라는 두 가지 필수 프로세스가 사용됩니다.
데이터 엔지니어링
데이터 엔지니어링은 데이터의 수집, 저장, 검색 및 처리를 위한 파이프라인을 설계하고 구축하는 작업입니다.
데이터 엔지니어링 기본 사항은 다음과 같습니다.
⬛ 데이터 소스
머신러닝 시스템은 다양한 소스의 데이터를 사용하며, 다음의 질문을 통해 데이터 소스를 이해할 수 있습니다.
- 데이터 수집은 누가 하는지
- 데이터가 얼마나 깨끗한지
- 데이터 소스를 신뢰할 수 있는지
- 사용자가 생성한 데이터인지 아니면 시스템이 생성한 것인지
⬛ 데이터 저장소
데이터를 상시로 저장하고 관리하기 위한 데이터베이스입니다.
사용 사례별로 서로 다른 데이터베이스가 구축되므로, 각 데이터베이스가 작동하는 방식을 높은 수준에서 이해하는 것이 중요합니다.
- SQL : MySQL, PostgreSQL (관계형)
- NoSQL : Redis, HBase, Neo4J, MongoDB (키/값, 컬럼형, 그래프, 문서)
⬛ ETL(추출, 변환 및 적재)
ETL(Extract, Transform, Load)은 세 단계로 구성됩니다.
- 추출 : 다양한 데이터 소스에서 데이터 추출
- 변환 : 요구사항에 맞게 데이터 정제, 매핑 및 특정 형식으로 변환
- 적재 : 변환된 데이터를 파일, 데이터베이스 도는 데이터 웨어하우스에 적재
⬛ 데이터 유형
머신러닝 데이터는 정형 데이터와 비정형 데이터 두가지로 나뉩니다.
- 정형 데이터
- 사전 정의된 데이터 스키마를 따름
- 날짜, 이름 및 행과 열이 있는 표 형식으로 표시할 수 있는 모든 항목
- 비정형 데이터
- 기본 데이터 스키마가 없는 데이터
- 이미지, 오디오 파일, 동여상 및 텍스트 등
머신러닝 모델은 데이터 유형에 따라 다른 방식으로 실행되기 때문에, 데이터가 정형인지 비정형인지 이해하면 모델 개발 단계에서 적절한 머신러닝 모델을 선택하는 데 도움이 됩니다.
피처 엔지니어링
피처 엔지니어링에는 두가지 프로세스가 있습니다.
- 도메인 지식을 사용하여 raw data에서 예상 피처를 선택하고 추출
- 예측한 피처를 모델에서 사용할 수 있는 형식으로 변환
머신러닝 모델을 개발하거나 학습시킬 때 중요한 결정 중 하나는 적절한 피처를 선택하는 것입니다. (가치 있는 피처 선택 必)
- 주제별 전문 지식이 필요
- 진행 중인 작업에 따라 결과가 많이 달라짐 피처를 예측하여 선택한 후에는 피처 엔지니어링 작업을 통해 적절한 형식으로 변환해야 합니다.
⬛ 피처 엔지니어링 작업
피처 엔지니어링 작업은 선택한 피처를 모델에 사용할 수 있는 형식으로 변환하며, 운영 환경의 데이터는 값이 누락되는 경우가 많으며, 삭제나 대체를 통해 해결함
누락 데이터 처리, 왜곡된 분포가 있는 값 조정, 범주형 피처 인코딩 등을 포함합니다. 🔨 누락 데이터 처리
⬛ 피처 스케일링
피처를 표준 범위와 분포를 갖도록 스케일링하는 프로세스입니다.
→ 데이터세트의 피처가 서로 다른 범위에 있거나 분포가 왜곡되어 작업을 학습하는데 어려움을 겪을 수 있기 때문
- 정규화(최대-최소 스케일링)
- 모든 값이 [0,1] 범위 내에 있도록 피처의 스케일을 조정
- 유의할 점 : 피처의 분포를 변경하지 않음
- 표준화(Z-점수 정규화)
- 피처의 분포가 평균 0, 표준 편차 1이 되도록 변경
- 로그 스케일링
- 피처의 왜곡을 완화하기 위함
- 데이터 분포의 왜곡을 줄이고 최적화 알고리즘으로 더 빠르게 수렴할 수 있음
⬛ 이산화(버키팅)
이산화는 연속형 피처를 범주형 피처로 변환하는 프로세스입니다. 연속형 피처를 불연속형 버킷(bucket)으로 나누고 각 키를 해당 버킷으로 표현한다고 하여 버키팅이라고도 부릅니다.
- 장점 : 모델이 무한한 수의 가능성을 학습하는 대신 몇 가지 범주만 학습하는데 집중
⬛ 범주형 피처 인코딩
대부분의 머신러닝 모델은 모든 입력과 출력이 숫자여야 하기 때문에, 범주형 피처를 숫자로 인코딩해야 합니다.
→ 일반적 방법 : 정수 인코딩, 원-핫 인코딩, 임베딩
- 정수 인코딩
- 각각의 고유한 범주에 정수 값을 할당
- 범주형 피처 사이에 순서가 없는 경우 비추천
- 원-핫 인코딩
- 각 고유값에 대해 새로운 이진 피처가 생성
- 고유값 수가 많을 경우 벡터 크기가 너무 커지기 때문에 비추천
- 임베딩 학습
- 범주형 피처가 취할 수 있는 각 고유값에 대해 N차원 벡터를 학습하는 프로세스
- 피처가 갖는 고유값의 수가 너무 많을 때 유용
논의 주제
면접에서 논의하기 좋은 주제들입니다. 📣 논의 주제들
4️⃣ 모델 개발
모델 개발은 적절한 머신러닝 모델을 선택하고 당면한 과제를 해결하도로 학습시키는 과정을 말합니다.
모델 선택
모델 선택은 예측 모델링 문제에 가장 적합한 머신러닝 알고리즘과 아키텍처를 선택하는 프로세스입니다.
모델을 선택하는 일반적인 프로세스는 다음과 같습니다.
- 간단한 기준선을 설정한다
- ex) 동영상 추천 시스템 : 가장 인기 있는 동영상을 추천하여 기준선 설정
- 간단한 모델로 실험한다
- 빠르게 학습할 수 있는 머신러닝 알고리즘을 적용
- 더 복잡한 모델로 전환한다
- 간단한 모델로 만족스러운 결과를 얻을 수 없을 경우, 더 복잡한 모델을 고려
- 더 정확한 예측을 원한다면 여러 모델을 조합한다
- 여러 모델의 조합을 사용하면 예측 품질을 향상시킬 수 있음
- 앙상블 방법 : 배깅, 부스팅, 스태킹
다양한 모델 옵션을 검토할 때는 알고리즘을 간략하게 설명하고 장단점을 논의하는 것이 좋습니다.
즉, 머신러닝 알고리즘을 선택할 때는 모델의 다양한 측면을 고려하는 것이 중요합니다.
- 다양한 머신러닝 알고리즘과 장단점을 잘 이해하는지
- 요구사항과 제약 조건에 따라 모델을 선택할 수 있는지
📍 모델 고려할 점
- 모델이 학습해야 하는 데이터의 양
- 훈련 속도
- 선택할 하이퍼파라미터와 하이퍼파라미터 튜닝 기법
- 학습 지속 가능성
- 컴퓨터 요구사항
- 모델의 해석 가능성(interpretability)
모델 훈련
모델 선택을 하고 모델을 훈련할 단계입니다.
📍 모델 훈련 시 필요한 주제
- 데이터세트 구성
- 손실 함수 선택
- 처음부터 훈련하기와 미세 조정하기
- 분산 훈련
⬛ 데이터세트 구성
모델 훈련 및 평가를 위한 데이터세트 구성에는 총 5단계가 필요시 됩니다. 이때 ‘피처 및 라벨 식별’을 제외한 모든 단계는 일번적인 작업으로, 모든 머신러닝 설계 작업에 적용할 수 있습니다.
- 원시 데이터 수집
- 피처 및 라벨 식별
- 라벨을 만드는 방법은 수동 라벨링과 자동 라벨링이 있음
- 수동 라벨링
- 개별 주석 작성자가 수작업으로 라벨 지정
- 장점 : 정확한 라벨 생성
- 단점 : 비용이 많이 들고 느리며, 편견 개입될 수 있고, 도메인 지식이 필요하고, 데이터 프라이버시 위협할 수 있음
- 자동 라벨링
- 사람이 주석을 달지 않고도 ground truth 라벨이 자동으로 추론됨
- ex) 관련성에 따라 뉴스 피드의 순위 매기는 머신러닝 시스템
- 사용자와 게시물의 입력으로 받아, 사용자가 이 게시물을 본 후 ‘좋아요’ 버튼을 누를 확률을 출력하는 모델을 학습시키는 것
- 샘플링 전략 선택
- 시스템의 데이터의 양을 줄이는 효율적인 방법
- convenience, snowball, stratified, reservoir, importance 샘플링 등
- 데이터 분할
- 데이터세트를 학습, 평가(검증), 테스트로 나누는 과정을 말함
- 클래스 불균형 해결(있는 경우)
- 클래스 라벨이 왜곡된 데이터세트를 분균형 데이터세트라고 함
- 이는 모델에 소수 클래스를 학습하기에 충분한 데이터가 없을 수 있음을 의미
- 해결 방법 : 데이터 리샘플링(resampling), 손실 함수(loss function)
- 훈련 데이터 리샘플링 : 서로 다른 클래스 간의 비율을 조정하여 데이터의 균형을 맞추는 과정(oversampling, undersampling)
- 손실 함수 적용 : 소수 클래스의 데이터 포인트에 더 많은 가중치는 줌(class-balanced loss, focal loss)
⬛ 손실 함수 선택
모델을 학습시키기 위해 적절한 손실 함수를 선택해야 합니다.
- 손실 함수 : 모델이 예상 결과를 얼마나 정확하게 예측하는지를 측정하는 지표
- 손실 함수를 사용하면 학습 과정에서 최적화 알고리즘이 모델의 매개변수를 업데이트하여 손실을 최소화할 수 있음
새로운 손실 함수를 설계하기는 어렵기 때문에, 기존 손실 함수 목록에서 문제 구성에 따라 적합한 손실 함수를 선택하면 됩니다.
(때로는 손실 함수를 문제에 맞게 약간 변경해야할 수도 있음)
⬛ 처음부터 훈련하기와 미세 조정하기
미세 조정(fine-tuning)이란 학습된 파라미터를 조금씩 변경하며, 새로운 데이터로 모델을 계속 학습시키는 방법을 의미합니다.
이는 논의하면서 진행할 설계 결정 사항 중 하나입니다.
⬛ 분산 학습(distributed training)
시간이 지남에 따라 모델이 점점 더 커지고 데이터세트의 크기도 급격히 증가하기 때문에 대규모 학습이 중요해지고 있습니다.
분산 학습은 일반적으로 여러 작업자 노드에 작업을 분할하여 모델을 훈련하는데 사용 됩니다. 이러한 작업자 노드는 모델 학습 속도를 높이기 위해 병렬로 작동하며, 데이터 병렬 처리와 모델 병렬 처리의 두 가지 주요 유형이 있습니다.
논의 주제
면접에서 논의하기 좋은 주제들입니다. 📣 논의 주제들
5️⃣ 평가
모델 개발 후 다음은 평가 단계로, 다양한 지표를 사용하여 머신러닝의 모델의 성능을 파악하는 프로세스입니다.
오프라인 평가
오프라인 평가는 모델 개발 단계에서 머신러닝 모델의 성능을 평가하는 것을 말합니다.
모델을 평가하려면 일반적으로 먼저 평가 데이터세트를 사용하여 예측한 다음, 다양한 오프라인 지표를 사용하여 예측이 ground truth에 얼마나 가까운지 측정합니다.
오프라인 평가에 적합한 지표를 파악하는 것이 중요하며, 이는 당면한 과제와 프레임을 어떻게 구성했는지에 따라 달라집니다.
온라인 평가
온라인 평가는 배포 후 모델이 운영 환경에서 어떻게 수행되는지 평가하는 프로세스를 말합니다.
모델의 영향을 측정하려면 다양한 지표를 정의해야 하며,
온라인 지표는 온라인 평가 중에 사용하는 지표를 말하며 일반적으로 비즈니스 목표와 관련이 있습니다.
문제 | 온라인 지표 |
---|---|
광고 클릭 예측 | 클릭률, 수익 증가 등 |
유해 콘텐츠 탐지 | 전파율, 유효한 이의 제기 등 |
영상 추천 | 클릭률, 총시청 시간, 시청 완료된 영상 수 등 |
친구 추천 | 하루에 전송되는 요청 수, 일일 요청 수락 건수 등 |
오프라인 지표와 마찬가지고 온라인 지표를 선택하는 것은 주관적이며 제품 담당자와 비즈니스 이해관계자에 따라 달라집니다.
그렇기 때문에 이 단계에서는 면접관은 지원자의 비즈니스 감각을 평가합니다. 지원자는 자신의 사고 과정을 전달하고 특정 지표를 선택한 이유를 설명하는 것이 좋습니다.
논의 주제
📣 논의 주제들
- 온라인 지표
- 온라인에서 머신러닝 시스템의 효과를 측정하는데 중요한 지표는 무엇인지
- 이러한 지표는 비즈니스 목표와 어떤 관련이 있는지
- 오프라인 지표
- 개발 단계에서 모델의 예측 능력을 평가하는데 적합한 오프라인 지표는 무엇인지
- 공정성 및 편향성
- 모델이 연령, 성별, 인종 등과 같은 다양한 대상에 대해 편견을 가질 가능성이 있는지, 그렇다면 이 문제를 어떻게 해결할 수 있는지
- 악의적인 의도가 있는 사람이 시스템에 접근하면 어떻게 되는지
6️⃣ 배포 및 서비스 제공
평가에 적합한 지표를 선택한 후 다음 단계는 모델을 운영 환경에 배포하여 수백만 명의 사용자에게 서비스를 제공하는 것입니다.
📍 배포 시 주의할 주제들
- 클라우드와 온디바이스 배포 비교
- 모델 압축
- 운영 환경에서 테스트
- 예측 파이프라인
클라우드와 온디바이스 배포 비교
클라우드에 모델을 배포하는 것과 모바일 단말에 배포하는 것은 다릅니다. 주요 차이점은 skip하도록 하겠습니다.
모델 압축
모델 압축은 모델을 더 작게 만드는 과정을 말하며, 이는 추론 처리 시간과 모델 크기를 줄이는데 필요합니다.
모델 압축에는 일반적으로 세가지 기술을 사용합니다.
- 지식 증류(knowledge distillation)
- 작은 모델(student model)이 큰 모델(teacher model)을 모방하도록 훈련하는 것
- 가지치기(pruning)
- 가장 유용성이 낮은 매개변수를 찾아서 0으로 설정하는 프로세스
- 이렇게 하면 더 적은 수의 모델을 더 효율적으로 저장할 수 있음
- 양자화(quantization)
- 모델 파라미터는 32비트 부동 소수점으로 표현되는 경우가 많음
- 양자화에서는 더 적은 비트를 사용하여 파라미터를 표현하므로 모델의 크기가 줄어듦
- 양자화는 훈련 중 또는 훈련 후에도 발생할 수 있음
운영 환경에서 테스트
모델이 운영 환경에서 잘 작동하는지 확인하는 유일한 방법은 실제 트래픽으로 테스트하는 것입니다.
모델을 테스트하는 데 일반적으로 사용되는 기법은 다음과 같습니다.
- 섀도 배포(shadow deployment)
- A/B 테스트
- 카나리 릴리스
- 인터리빙 실험(interleaving experiments)
- 밴딧(bandits)
⬛ 섀도 배포
신규버전 B는 이전버전 A와 함께 실제 트래픽을 수신하지만 응답에 영향을 미치지 않고 숨어있음
새 모델을 기존 모델과 병렬로 배포하는 방법입니다. 각 수신 요청은 두 모델에 모두 라우팅 되지만 기존 모델의 예측만 사용자에게 제공됩니다.
모델을 shadow deployment하면 새로 개발된 모델의 테스트가 완료될 때까지, 신뢰할 수 없는 예측을 할 위험을 최소화할 수 있습니다. 하지만 이 방법은 예측 횟수를 두 배로 늘리는 비용이 많이 드는 방식입니다.
⬛ A/B 테스트
신규버전 B는 특정 조건에서 사용자의 하위 집합으로 배포됨
새 모델을 기존 모델과 병렬로 배포하는 방법입니다. 트패픽의 일부는 새로 개발된 모델로 라우팅하고 나머지 요청은 기존 모델로 라우팅합니다.
A/B테스트를 올바르게 실행하기 위해 고려할 두 가지 중요한 요소는 다음과 같습니다.
- 각 모델로 라우팅되는 트래픽은 무작위여야 함
- A/B 테스트는 충분한 수의 데이터 포인트에 대해 실행해야 적절한 결과를 얻을 수 있음
예측 파이프라인
운영 환경에서 요청을 처리하려면 예측 파이프라인이 필요합니다. 온라인 예측과 배치 예측 중 하나를 선택하는 것은 설계에서 중요한 결정 사항입니다.
⬛ 배치 예측
배치 예측을 사용하면 모델이 주기적으로 예측을 수행합니다. 예측이 미리 계산되기 때문에 모델이 예측을 생성하는데 걸리는 시간에 대해 걱정할 필요가 없습니다.
하지만 배치 예측에는 두 가지 주요 단점이 있습니다.
- 사용자의 선호도 변화에 대한 모델의 반응성이 떨어짐
- 배치 예측은 사전 계산해야할 내용을 미리 알고 있는 경우에만 가능함
- 예시) 언어 번역 시스템 - 번역이 전적으로 사용자의 입력에 의존하기 때문에, 사전에 번역할 수 없음
- 예시) 언어 번역 시스템 - 번역이 전적으로 사용자의 입력에 의존하기 때문에, 사전에 번역할 수 없음
⬛ 온라인 예측
온라인 예측에서는 요청이 도착하는 즉시 예측을 만들어 반환합니다. 온라인 예측의 주요 문제점은 모델이 예측을 생성하는데 너무 오래 걸릴 수 있다는 것입니다.
배치, 온라인 예측의 선택은 주로 제품 요구사항에 따라 결정됩니다.
- 온라인 예측 : 미리 계산해야 할 사항을 알 수 없는 상황
- 배치 예측 : 시스템이 대량의 데이터를 처리하고 그 결과가 실시간으로 필요하지 않은 경우
- 예시 - 화학물질 도포 예측 모델링
머신러닝 시스템 개발에는 단순한 머신러닝 모델링 이상이 필요하며, 다양한 구성요소가 전체적으로 어떻게 함께 작동하는지에 대한 이해가 필요합니다.
논의 주제
📣 논의 주제들
- 추론하는 동안 계산은 클라우드와 온디바이스 중 어디에서 수행해야 하는지
- 모델 압축이 필요한지? 일반적으로 사용되는 압축 기술에는 어떤 것이 있는지
- 온라인 예측과 배치 예측 중 어느 것이 더 적합한지? 장단점은 무엇인지
- 피처에 대한 실시간 엑세스가 가능한지? 어떤 어려움이 있는지
- 배포된 모델을 운영 환경에서 어떻게 테스트해야 하는지
- 머신러닝 시스템은 요청을 처리하기 위해 함께 작동하는 다양한 구성요소로 구성됩니다. 제안된 설계에서 각 구성요소의 역할은 무엇인지
- 빠르고 확장할 수 있는 서비스를 제공하려면 어떤 기술을 사용해야 하는지
7️⃣ 모니터링
모니터링은 다양한 평가 지표를 추적, 측정 및 기록하는 작업을 말합니다.
운영 중인 머신러닝 시스템은 여러 가지 이유로 장애가 발생할 수 있으며, 모니터링을 통해 시스템 장애를 감지하여 가능한 빨리 해결할 수 있도록 도와줍니다.
📍 모니터링 시 중요한 주제
- 운영 환경에서 시스템에 장애가 발생하는 이유
- 모니터링 대상
운영 환경에서 시스템에 장애가 발생하는 이유
머신러닝 시스템이 운영 환경에 배포된 후 장애가 발생하는 가장 일반적인 이유 중 하나는 데이터 분포 변화입니다.
데이터 분포 변화는 모델이 실제 업무에서 접하는 데이터가 학습 중에 접한 데이터와 다른 경우를 말합니다.
현실 세계의 데이터 분포는 끊임없이 변화하며, 학습에 사용되는 데이터는 시간이 지나면 관련성이 떨어질 가능성이 높습니다. 이는 시간이 지남에 따라 성능이 저하되는 오래된 모델이 된다는 의미입니다.
따라서 이 문제를 감지하기 위해 시스템을 지속적으로 모니터링해야하며, 데이터 분포 변화를 처리하는 두 가지 일반적인 접근 방식은 다음과 같습니다.
- 대규모 데이터세트를 학습한다
- 충분히 큰 훈련 데이터세트 사용 → 모델이 더 넓은 분포를 학습
- 운영 환경에서 발생하는 모든 데이터 포인트는 이 학습된 분포에 포함될 가능성 높음
- 새로운 분포의 라벨이 지정된 데이터를 사용하여 모델을 정기적으로 재학습한다
모니터링 대상
운영 환경 구축 후의 모니터링 기술에 중점을 두자면, 모니터링 목표는 머신러닝 시스템에서 장애를 감지하고 변화를 파악하는 것입니다.
📍 모니터링 기법 - 두 가지 버킷
- 운영 관련 지표
- 머신러닝 관련 지표
⬛ 운영 관련 지표
시스템이 정상적으로 작동하는지 확인하는 지표입니다.
- 평균 서빙 시간
- 처리량
- 예측 요청 수
- CPU/GPU 사용률
⬛ 머신러닝 관련 지표
- 입력/출력 모니터링
- 모델은 사용하는 데이터만큼 성능이 향상되므로, 모델의 입력과 출력을 모니터링하는 것이 중요함
- 드리프트(drift)
- 시스템에 대한 입력과 모델의 출력을 모니터링하여 기본 분포의 변화를 감지함
- 모델 정확도
- ex) 정확도가 특정 범위 내에 있다고 예상
- 모델 버전
- 배포된 모델 버전을 모니터링함
인프라스트럭처
인프라스트럭처는 머신러닝 시스템을 훈련, 배포 및 유지 관리하기 위한 기반입니다.
🔜 Think
1~5단계까지는 실제 모델링 진행 프로세스와 비슷하여 익숙한 반면, 6~7단계는 생소하여 재밌게 읽을 수 있었습니다🔥
책에서는 총 10개의 사례들을 바탕으로 포스팅에서 소개한 7단계 프로세스 순서로 설명하고 있는데요! 재밌는 사례들이 많아서, 관심 잇는 chapter 위주로 포스팅 진행하도록 하겠습니다.
독자가 머신러닝 어느정도 알고 있다는 전제 조건 하에 쓰여진 책이지만, 적절한 그림 예시와 더불어 쉽게 풀어서 쓴 글이다보니 술술 읽히네요! 넘 재미집니다👍