나 JAVA 봐라

[머신러닝 시스템 설계] 1장 머신러닝 시스템 개요 본문

DevOps, MLOps

[머신러닝 시스템 설계] 1장 머신러닝 시스템 개요

cool_code 2024. 5. 31. 00:03

의료 CV 연구실에서 학부 연구를 진행하며, 비용을 고려하지 않고. 단순히 더 좋은 성능만을 위하는 모델은 실질적이지 않다고 생각했다. 또한 연구실 환경에서는 모델 학습 ~ 성능 평가의 모든 과정이 수동으로 진행되어 속도도 더뎌지고 가끔씩 휴먼 에러도 발생했다. 내 나름대로 수동으로 이뤄져 불편한 과정들을 자동화 했었는데 실제 기업에서는 어떤 식으로 이러한 과정(학습, 평가, 배포)을 자동화하는지 궁금했다. 실제 프로덕션에서 동작하는 모델은 어떻게 다른지 책을 통해 알아가고자 한다.

 

참고 ) 쉘 스크립트로 모델 학습 자동화하기 -> https://yejin-code.tistory.com/42

1장 머신러닝 시스템 개요

머신러닝 시스템이란? 

: 단순히 로지스틱 회귀와 같은 ML 알고리즘만 의미하는 것이 아니라, 비즈니스 요구사항/ 사용자와 개발자가 시스템과 상호 작용하는 인터페이스 / 모델을 개발 및 모니터링하고 업데이트하기 위한 로직과 인프라 등 ‘프로덕션 환경’에 적용하기 위한 모든 것을 의미한다. 

 

1.1 머신러닝을 사용해야 하는 경우

ML이 광범위한 문제를 다룰 수 있기 때문에, 다양한 업계에서 ML을 도입한다. 하지만 ML로 해결 가능해도 그 ML 솔루션이 최선이 아닐 수도 있기에, ML이 꼭 필요한지, 비용 효율적인지 등을 고려해야 한다. 

 

ML이 하는 작업을 한 문장으로 정의하면 아래와 같다. 

“기존 데이터”로 부터 “복잡한 패턴”을 “학습”하고 이러한 패턴을 사용해 “본 적 없는 데이터”에 대해 “예측”을 수행

 

그렇다면 ML이 무엇이며 언제 사용되는지 알아보자. 

 

1. 시스템에 학습 능력이 있다.

시스템 차이
RDBMS - 학습 능력이 없다. 단순히 간의 관계를 직접 명시할 수는 있지만 자체적으로 관계를 파악할 수는 없다. 
ML 시스템 - 학습할 대상이 있으면 학습이 가능하다. 예를 들어, 지도 학습일 입력, 출력 데이터를 이용해서 입력 -> 출력을 생성하도록 관계를 학습할 있다. 
- 숙소 임대료를 예측하는 방법을 학습시킬 , 입력값(넓이,  개수, 지역, 편의 시설, 평점 ) -> 출력값 (임대료)

 

2. 학습할 패턴이 존재하며, 패턴이 복잡하다. 

  예시
패턴이 없는 경우 - 주사위 결과 예측하기
단순한 패턴이 있는 경우 - 숙소의 우편 번호를 보고 (state) 별로 정렬하기 -> 이미 알고 있으니 조회 테이블 사용한다. 
복잡한 패턴이 있는 경우 - 특성 값으로부터 임대료 계산하기. -> ML 시스템이 스스로 복잡한 패턴을 파악한다.  

 

 

3. 사용 가능한 데이터가 있거나, 데이터 수집이 가능하다. 

ML은 데이터로 학습하기에 학습 가능한 데이터가 있어야 한다. 아무리 좋은 모델이더라도 데이터 확보가 안된다면 모델을 만들 수 없다. 그렇지만, 특정 작업을 위한 데이터가 없더라도 모델을 만들 수 있는 방법들이 있다. 

데이터 없는 경우  
Zero-shot learning : 특정 작업에 대한 데이터가 없을   특정 작업 관련 데이터가 없더라도, 연관된 데이터로 좋은 예측을 있다.  -> , 어쨌든 데이터는 필요하다. (+ 로고 탐지 플젝 진행했을 YOLO 가지고 로고 탐지 시도한 것도 일종의 zero-shot learning으로 있을 같음)
Continual learning(연속 학습) : 어떠한 데이터도 없을 어떤 데이터로도 훈련되지 않은 ML 모델을 배포한 프로덕션 환경에서 들어오는 데이터로 학습시킬 있다. (= 온라인 학습) -> , 충분히 훈련되지 않았기에 고객 경험이 악화될 있다.
데이터도 없고, 연속 학습도 못할 실제 ML 모델 만들어지기 전까지 ML 모델이 있는 처럼 작동하는 , sw 운용하여 데이터를 수집한다. ML 모델 대신 사람이 만든 예측을 우선 제공하는 방식이다. 

 

4. 예측을 통한 답변이 필요할 때 사용한다. 

ML 모델은 예측을 수행하기에 예측을 통한 답변이 필요한 문제를 주로 해결한다. 특히, 비용이 낮고 ‘근삿값’인 예측을 대규모로 수행해 이득을 얻을 수 있을 때 효과적으로 사용된다. 

 

5. 본 적 없는 데이터가 훈련 데이터와 동일한 패턴을 갖는다.  

기존 데이터로 학습한 패턴이 유용하려면, 본 적 없는 데이터가 동일한 패턴을 가져야 한다. 

ex) 2023년 크리스마스에 사람들이 특정 앱을 다운로드할지 예측하는 모델을 만들 때 : 2008년에 가장 인기있는 앱이 ‘코이 폰드’ 였지만, 현재는 사람들에게 많이 잊혀졌다. (나도 이 앱이 뭔지 모름..) -> 즉, 기존의 데이터가 현재와 동일한 패턴이 아니기에 예측해낼 수 없다. 

 

6. 반복적으로 학습한다. 

  차이
인간 -few-shot learning 잘한다. (= 적은 데이터로도 학습한다.) , 고양이 사진 보면 바로 고양이를 구분해낼 있다. 
ML 알고리즘 - 패턴을 학습하는 많은 데이터를 필요로 한다. , 학습을 반복적으로 하면 패턴이 여러 반복되어 학습되기에 기계가 학습하기 쉬워진다. 

 

7. 잘못된 예측으로 발생하는 비용이 낮다. 

대부분의 ML 모델 성능은 100%가 나올 수 없기에, 실수를 할 때도 있다. (당연히 100%가 나온다면, 오버피팅 엄청 난거겠쥐,,,) 

그렇기에 실수해도 괜찮을 때 ML이 적합하다. 

적합한 경우 예시
ML 잘못 예측하더라도 발생되는 비용이 낮을 적합하다. - ex) 추천 시스템 : 추천 결과가 적합치 않아도 그냥 추천 결과 클릭 안하면 된다.
번의 예측 실수가 치명적인 결과를 가져올 때의 비용 < 올바른 예측에 따른 이익 적합하다.  - ex) 자율 주행 자동차 : 알고리즘 오류로 사망 사고 가능성 있더라도 통계적으로 인간 운전자보다 안전하다면 잠재적으로 많은 생명을 구할 수도 있다. 

 

8. 대규모로 수행된다. 

ML 솔루션을 도입하려면 데이터, 컴퓨팅, 인프라, 인재 등 선행 투자해야하는 것들이 많기에 ‘대규모’로 적용가능할 때 도입하는 것이 합리적이다. 

 

9. 패턴이 지속적으로 변한다. 

계속해서 데이터의 패턴이 바뀐다. 예를 들어, 스팸 이메일을 걸러내는 문구가 오늘은 ‘나이지리아 왕자’ 이지만, 내일은 ‘정신나간 인턴(나…)’이 될 수 있다. 이처럼 패턴이 바뀔 때마다 수작업으로 정한 규칙마냥 하나씩 하드코딩하면 빠르게 뒤쳐질 수 있다. 

ML을 도입한다면, 데이터를 계속 학습할 수 있기에 데이터의 변화를 명시적으로 파악하지 않고도 새로운 데이터를 통해 ML 모델을 업데이트할 수 있다. (연속 학습)

 

 

위와 같은 경우에 ML을 사용할 수 있고, 광범위하게 사용하는 것도 가능하겠지만, 사용하면 안되는 경우도 있다. 

  1. 비윤리적인 경우: 자동 채점기의 편향 (채용할 때 성차별 하는 것도 하나의 예시일듯)
  2. 보다 단순한 솔루션이 효과 있는 경우
  3. 비용 효율적이지 않은 경우

 

또한, ML이 문제 전체를 해결하지 못하더라도 문제를 더 작은 구성 요소로 나눴을 때 그 일부를 해결할 수도 있다.

예를 들어, 모든 고객 문의에 답하는 챗봇을 구축하는 것은 어렵지만, 자주 묻는 질문인지 아닌지 예측하여 해당 답변을 제시할 수는 있다.

 

1.1.1. 머신러닝 유스 케이스 

 

ML 유스 케이스는 기업과 소비자 애플리케이션 양쪽 모두에서 증가하고 있다. 

또한 ML을 소비자가 쓰는지, 기업이 쓰는지에 따라 요구 사항, 고려 사항이 크게 다르다. 

  요구 사항
기업 - 정확도 요구사항이 비교적 엄격 / -latency 요구사항은 비교적 관대 -> 예를 들어 음성 인식 시스템의 정확도를 95% -> 95.5% 개선했을 , 소비자 입장에서는 크게 주목하지 않지만, 리소스 할당 시스템의 효율성을 0.1% 개선해도 많은 비용을 절약할 있다. 
소비자 - 정확도 요구사항이 비교적 관대 / -latency 요구사항은 비교적 엄격 -> 예를 들어 소비자는 1초의 latency에도 집중력을 잃고 앱을 있지만, 기업 사용자는 latency 길더라도 관대하다.

 

 

ML은 실제로 어떻게 사용되고 있을까? 

 

ML 유스 케이스

  설명
추천 시스템, 검색 엔진 아마존, 넷플릭스 등에서 개인의 취향에 따라 가장 부합하는 품목을 추천한다. 추천 품목이 맘에 들지 않을 경우 직접 검색할 수도 있다. 
타이핑 예측 타이핑을 예측하여 문자 입력을 수월하게 한다. 
지문, 얼굴 인식 지문이나 얼굴이 사용자와 일치하는지 예측한다. 
기계 번역 언어를 다른 언어로 자동 번역하여 사람들 간의 언어 장벽을 없앤다.
스마트 개인 비서 아마존 알렉사, 구글 어시스턴트 등을 사용하여 반려동물이 집을 나가거나 외부인이 들어올 스마트 보안 카메라가 알려준다. 건강 모니터링 기능도 한다. 
이상 거래 탐지 과거의 이상 거래를 학습하여 향후 거래가 이상 거래인지 여부를 예측한다. 
가격 최적화 회사의 마진, 매출, 성장률 등을 최대로 만드는 가격을 추정한다. , 수요가 계속 변하고 변동하는 가격을 소비자가 받아들일 있는 경우가 적합하다. (Ex. 인터넷 광고, 항공권, 숙박 예약 ) 
고객 수요 예측 고객의 수요를 예측한다. 예를 들어, 식료품점을 운영할 재고량이 너무 적어도, 많아도 문제이기에 수요를 예측한다. 
고객 이탈 예측 특정 고객이 제품, 서비스 사용을 중단하려는 시점을 예측하고 적절한 조치를 취해 고객의 이탈을 방지한다. 
브랜드 모니터링 (감성 분석) 브랜드는 기업의 소중한 자산이기에, 대중이 브랜드를 어떻게 느끼는지 모니터링하는 일이 중요하다. 따라서 누군가 브랜드를 언제, 어디서 , 어떤 식으로 언급했으며 해당 언급이 어떤 감정을 담고 있는지 파악한다. 부정적 언급이 증가하면 빠르게 해결할 있다. 
헬스케어 피부암을 감지하고 당뇨병을 진단해준다. (+ 학부 연구했을 때는 신장을 segmentation하여 정확한 수술 범위를 파악하는 모델을 개발했었는데, 헬스케어 분야 하나라고 있을 ) 하지만 정확도, 개인 정보 보호에 관한 요구 사항이 엄격하기 때문에 병원 같은 의료 서비스 제공자를 통해 제공되거나, 의사의 진료 보조 도구로만 사용된다. 

 

 

1.2 머신러닝 시스템 이해하기

1.2.1 연구용 머신러닝 vs 프로덕션용 머신러닝

 

학부 연구를 하면서도 느꼈지만, 연구용 ML과 프로덕션용 ML의 차이가 크다고 생각했었다. 생각했던 차이점이 책에 잘 정리되어 있는 것 같다.

  연구용 ML 프로덕션용 ML
요구 사항 벤치마크 데이터셋에서 최적의 모델 성능 달성하기 이해관계자마다 다름
계산 우선순위 빠른 훈련, 높은 스루풋 빠른 추론, 낮은 latency
데이터 정적임 끊임없이 변동
공정성 중요하지 않은 경우가 많음 반드시 고려해야
해석 가능성 중요하지 않은 경우가 많음 반드시 고려해야

 

위의 표에 나온 차이점을 더 자세히 살펴보자. 

 

1. 다양한 이해관계자와 요구 사항

보통 연구할 때 벤치마크 데이터셋에서 최첨단(state-of-the-art) 결과를 달성하는 모델을 개발하는 것을 목표로 한다. 결과 달성을 위해 아주 약간 성능 향상이 될 수 있다면 모델 구조를 완전 복잡하게 만들어둘 수도 있다. 이렇게 되면 프로덕션 적용이 어려워진다. (-> 이래서 연구실 탈주함,,)

 

실제 프로덕션에 ML 시스템을 적용하려면 연구원 말고도 훨씬 많은 이해관계자들이 얽혀 있다. 이들의 요구사항이 서로 다르고 충돌할 때도 많기에 모든 요구 사항을 충족하는 ML모델을 설계, 개발, 선택하는 것이 어려울 수 있다. 

 

예를 들어, 사용자에게 음식점을 추천하는 모바일 앱을 개발하고 있다. 이 앱은 주문이 들어올 때마다 음식점에 수수료 10%를 부과해 수익을 창출한다. (= 주문 금액 높으면 낮을 때보다 더 많은 수익 창출)

이 프로젝트에는 다양한 이해관계자들이 있고, 각자의 요구사항이 있다. 

  요구 사항
ML 엔지니어 더 많은 데이터가 포함된 더 복잡한 모델을 사용하여, 사용자가 주문할 가능성이 가장 높은 음식점을 추천하고 싶음. 
영업 팀 비싼 음식점일수록 수수료가 높기에, 더 비싼 음식점을 추천하는 모델을 원함. 
제품 팀 latency가 증가할 때마다 서비스를 통한 주문이 감소하므로, 100밀리초 이내에 추천 음식점을 반환할 수 있는 모델을 원함. 
ML 플랫폼 팀 트래픽 증가에 따라 기존 시스템을 스케일링하는 문제로 인해 새벽에도 대응할 수도 있어, 플랫폼 개선을 우선하기 위해 모델 업데이트를 보류하고 싶음.
관리자 마진을 최대화하고 싶음. 한 가지 방법은 ML 팀을 내보내는 것임. (너무하다 진짜 왜그러냐)