[ML] 머신러닝 디자인 패턴 1장. 머신러닝 디자인 패턴의 필요성

gunny·2023년 6월 12일
0

ML

목록 보기
15/17

Machine Learning Design Pattern (머신러닝 디자인 패턴)

효율적인 머신러닝 파이프라인과 MLOps를 구축하는 30가지 디자인 패턴
발리아파 락슈마난, 세라 로빈슨, 마이클 먼 지음/ 맹윤호, 임지순 옮김 / 한빛미디어 출판


진짜 필요한 비즈니스 로직에 중점을 두고 프로그래밍 하기
검증된 아키텍처와 비즈니스 사용 사례로 필요한 비즈니스에 사용하기
AI 모델이 인간 사회의 기존 편견을 영속화하지 않도록 하려면 머신러닝의 다양성, 형평성, 포용성이 무엇보다 중요함

Chapter 1. 머신러닝 디자인 패턴의 필요성

  • 디자인 패턴
    : 일반적으로 발생하는 문제에 대한 모범 사례나 솔루션을 추려낸 패턴
    : 전문가의 지식과 경험을 모든 실무자가 따를 수 있는 조언으로 가공한 것

1.1 디자인 패턴, 1.2 이 책의 사용법

  • 프로덕션용 머신러닝(ML) 모델을 구축하는 것은 연구 환경에서 입증된 ML 방법을 활용하고 이를 비즈니스 문제에 적용하는 엔지니어링 분야로 변모하고 있다.
  • 머신러닝이 주류가 됨에 따라 실무자들은 반복되는 문제를 해결하기 위해 검증된 방법을 활용해야 한다.
  • 각 패턴에는 문제에 대한 간단한 설명, 표준 솔루션, 솔루션이 작동하는 이유에 대한 설명, 트레이드오프와 대안에 대한 토론이 있음

1.3 머신러닝 용어

  • 오늘날의 머신러닝 실무는 소프트웨어 엔지니어링, 데이터 분석, 데브옵스(DevOps), 통계와 같은 여러 전문 분야로 나뉨
  • 머신러닝은 데이터에서 학습하는 모델을 구축하는 프로세스
    <-> 프로그램의 동작 방식을 알려주는 명시적인 규칙을 작성하는 기존의 프로그래밍과는 대조적
  • 머신러닝 모델은 데이터에서 패턴을 학습하는 알고리즘
  • '신경망' 이라는 순방향 신경망은 머신러닝 알고리즘의 종류로 하나의 수많은 뉴런을 포함한 여러 계층이 각각 정보를 분석하고 처리한 다음, 처리한 정보를 다음 계층으로 보냄. 이러한 방식으로 최종 계층, 즉 출력층에 도달한 정보를 통해 예측을 생성함
    + 2개 이상의 은닉층(hidden layer)이 있는 신경망은 딥러닝(deep Learning)
  • 머신러닝 모델은 근본적으로 수학적 함수라, 수치 소프트웨어 패키지를 사용하면 밑바닥부터 구현할 수 있으나, 업계의 ML 엔지니어는 보통 모델 구축을 위한 직관적은 API를 제공하는 여러 오픈소스 프레임워크 중 하나를 사용하는 편임
  • Keras (케라스)는 신경망 구축을 위한 상위 수준 API로 다양한 백엔드 지원
  • 입력층과 출력층만 있는 신경망은 linear model(선형 모델)로 불리는 머신러닝 일종
  • 선형 모델은 선형 함수를 사용해 데이터에서 학습한 패턴을 나타냄
    • 결정 트리 : 데이터를 사용하여 다양한 분기를 가진 경로의 집합을 만드는 머신러닝 모델. 분기는 주어진 데이터로부터 결과를 근사적으로 이끌어냄
    • 클러스터링 : 데이터 내의 부분 집합 간의 유사성을 찾고 식별된 패턴을 사용하여 클러스터로 데이터를 그룹화
  • 머신러닝 모델은 지도 학습, 비지도 학습 두 가지 유형으로 나눌 수 있음
    • Supervised learning(지도 학습) : 데이터에 대한 실측 검증 라벨(ground truth label)을 미리 알고 있는 문제에 적용할 수 있음
      라벨이 달린 데이터를 모델에 제공하고 새로운 데이터가 들어왔을 때 자동으로 라벨을 달 수 있도록 충분히 학습시키는 것
      -> 일반적으로 분류(Classification), 회귀(Regression)으로 정의할 수 있음

      Classification(분류) : 사전에 입력 데이터에 정의된 카테고리의 라벨을 할당함. 반려 동물 이미지로 품종 맞추기, 문서에 태그 지정, 금융 거래 사기 여부 판정

      Regression(예측) : 입력 데이터에 연속적인 숫잣값을 할당함. 자전거 여행 기간 예측, 회사 미래 수익 에측, 제품 가격 예측

  • Unsupervised learning(비지도 학습) : 데이터에 라벨이 없을 때 적용.
    데이터를 자연스럽게 그룹화(클러스터링) 하거나, 정보를 압축(차원 축소)하거나, 연관 규칙을 찾을 수 있는 모델을 구축

<데이터와 특징 가공>

  • 데이터는 모든 머신러닝 문제의 핵심

  • 데이터셋(dataset)은 머신러닝 모델의 학습, 검증, 테스트에 사용되는 데이터 의미
    데이터

    • 학습 데이터(training data)로 학습 프로세스 중에 모델에 제공되는 데이터
    • 검증 데이터(validation data) : 학습 데이터 셋에 포함되지 않는 데이터, 각 학습 데이터에 대한 반복인 에폭(epoch)이 완료된 모델의 성능을 평가하는데 사용
      검증 데이터에 대한 모델의 성능을 바탕으로 학습 중지 시기 결정, 하이퍼파라미터(hyperparameter)를 선택함
    • 테스트 데이터(test data) : 학습 과정에서 전혀 사용되지 않는 데이털 ㅗ학습이 끝난 모델의 성능을 평가하는데 사용
  • 머신러닝 모델의 성능 보고서는 학습 또는 검증 테스트가 아닌 독립적인 테스트 데이터를 통해 산출해야 함

  • 세 가지 데이터셋(학습, 검증, 테스트)이 모두 통계적으로 유사한 속성을 갖도록 데이터를 분할 하는 것도 중요함

  • 모델 학습에 사용하는 데이터는 모델의 종류에 따라 다양한 형태를 취할 수 있는데 구조화된 데이터(structured data)는 수치 데이터와 범주 데이터로 이루어짐

    • 수치 데이터 : 정수나 부동소수점으로 이루어짐
    • 범주 데이터 : 유한한 글부 집합으로 나눌 수 있는 데이터

    구조화된 데이터란 일반적으로 스프레드시트로 다룰 수 있는 데이터로, 아래부터는 테이블 데이터(tabular)를 구조화된 데이터와 같은 의미로 사용한다.

  • 구조화되지 않은 데이터(Unstructred data)는 깔끔하게 표현할 수 없는 데이터이고 자유 형식 텍스트, 이미지, 비디오, 오디오 등이 있음

  • 수치데이터는 보통 머신러닝 모델의 입력으로 직접 투입할 수 있지만 다른 데이터는 모델로 입력하기 위해 다양 데이터 전처리가 필요함

  • 이러한 데이터 전처리 단계에서는 보통 수칫값을 조정하거나, 수치가 아닌 데이터를 모델에서 이해할 수 있는 수치 형식으로 변환-> 특징 가공(feature engineering)

특징 가공

  • 입력 : 전처리 이전의 상태인 데이터셋의 하나의 열을 가리킴
  • 특징 : 전처리를 마친 데이터셋의 하나의 열

예를 들어, '입력'이 '타임스탬프' 라면 이를 전처리한 '특징'은 '요일'
타임스팸프를 요일로 변환하려면 몇 가지 데이터 전처리를 수행해야 하는데 이러한 단계를 '데이터 변환'

  • 인스턴스(instance) : 예측을 위해 모델로 보내는 데이터 항목
    예를 들면 테스트 데이터 셋의 행(라벨 없음), 분류하려는 이미지, 텍스트 문서 등

  • 인스턴스에 대한 특징이 주어지면 모델은 예측값을 계산하는데,
    이를 위해 모델은 인스턴스와 라벨(label)을 갖춘 학습 예제(training example)로 학습을 진행함

  • 학습 예제는 모델에 공급될 데이터셋 중 하나의 데이터 인스턴스(행)을 나타냄
    예를 들어, 전체 학습 예제에서 '요일', '도시', '자동차 종류'라면 라벨은 데이터셋의 출력 열로, 모델이 예측하고자 하는 대상이다. 라벨은 데이터셋의 예측 열로 모델이 출력하고자 하는 대상 이다.
    라벨은 데이터 셋의 대상 열(실측 검증 라벨)과 모델에서 제공한 출력(예측)을 모두 가리키는데, 타임스탬프 예시의 라벨은 '여행 기간' 이 될 수 있으며 분을 나타내는 부동 소수점값이 적절할 것이다.

  • 데이터셋을 조립하고 모델의 특징을 결정했으면 데이터 검증(data validation)을 진행하는데, 데이터에 대한 통계 계산과 스키마 이해, 데이터셋을 평가해 데이터에 내재된 문제(드리프트, 학습 제공 편향)을 식별한다.
    데이터에 대한 다양한 통계를 수행하면 데이터셋의 각 특징의 균형 잡힌 표현이 포함되어 있는지 알 수 있고, 더 많은 데이터를 수집할 수 없을 때 데이터의 균형을 이해하면 이를 고려해서 모델을 설계하는데 도움이 된다.
    스키마를 이해하려면 각 특징에 대한 데이터 유형을 정의하고 특정값이 잘못되거나 누락될 수 있는 학습 예제를 식별해야 한다.
    데이터 검증을 위해 학습 데이터셋과 테스트셋의 품질에 영향을 미칠 수 있는 불일치를 식별할 수 도 있다.

    예를 들면, 학습 데이터셋에 대부분 주중 데이터가 포함되어 있고, 테스트셋에는 주말 데이터가 포함되어 있다면 이는 불일치에 해당함

<머신러닝의 과정>

  • 일반적인 머신러닝 워크플로의 첫 단계는 학습(*training) 이다.
    : 학습 데이터를 모델에 전달하여 패턴을 식별하는 방법을 학습 시키는 과정
  • 학습의 다음 단계는 모델 평가(model evaluation) 으로, 학습 데이터셋에 속하지 않는 데이터로 모델의 성능을 확인한다.
  • 학습과 평가를 여러 번 실행하여 특징 가공(feature engineering)을 추가로 수행하고, 모델의 아키텍처를 조정한다.
  • 평가를 통해 모델의 선응에 만족했으면, 다른 사용자가 모델에 접근하여 예측값을 받을 수 있도록 모델을 제공하는데 이를 위해서 들어오는 접근 요청을 수락하고, 모델을 마이크로서비스 형태로 배포하여 예측값을 전송하는 시스템을 구축해야 한다 -> 서빙(serving)
  • 서빙(serving)의 인프라는 클라우드, 온프레미스(on-premis), 온디바이스(on-device) 형태가 있다.
  • 모델에 새 데이터를 전송하고 출력하는 예측(prediction) 은, 아직 배포되지 않은 로컬 모델에서 예측값을 생성하는 것은 물론이고, 배포된 모델에서 예측값을 가져오는 모두를 의미한다.
    배포된 모델의 예측은 '온라인 예측' 과 '배치 예측' 이 있다.

    • 온라인 예측(online prediction) : 거의 실시간으로 적은 수의 예측값을 얻고자 할 때 사용되며, 지연 시간이 짧을 수록 좋음
    • 배치 예측(batch prediction) : 오프라인에서 대규모 데이터 집합에 대한 예측을 생성함. 온라인 예측보다 오래 걸리며, 예측을 사전에 계산하고 대규모 새 데이터 샘플에서 모델의 예측을 분석할때 유용. ex) 추천시스템
  • 예측이라는 단어는 단어를 타는 주기나 장바구니가 버려질지의 여부를 예측하는 것처럼 '미래 가치를 추정' 하는 데 적합하다. 이미지 및 텍스트 분류 모델에 예측이라는 말을 사용하는 것은 조금 어색하다.
    ML 모델이 텍스트 리뷰를 보고 감정이 긍정적이라고 출력하는 경우 미래 결과가 없어서 '예측' 이 아니기 떄문에 이러한 경우 '예측'을 대체하는 용어로 추론(inference) 을 사용한다. => 통계 용어인 추론과 정확하게 의미가 일치하지는 않지만 ML 업계에서는 이미 일반적으로 통용되는 용어임

  • 학습 데이터 수집, 특징 가공(feature engineering), 학습, 모델 평가 프로세스는 프로덕션 파이프라인과 별도로 처리하는 경우가 많다.
    이렇게 별도로 처리하는 경우 모델의 새 버전을 학습시키기에 충분한 추가 데이터가 있다고 결정할 때마다 모델을 다시 평가하게 되는데, 이와 같은 과정을 프로덕션 파이프라인 내에 소화하는 경우에는 새로운 데이터를 지속적으로 수집할 수 있어야 하며, 학습 또는 예측을 위해 모델로 보내기 전에 이 데이터를 즉시 전처리하는 스트리밍(streamin) 이 필요하다.

  • 스트리밍 데이터를 처리하려면 특징 가공(feature engineering), 학습, 평가, 예측을 수행하기 위해 여러 단계에 걸친 시스템이 필요한데 이를 머신러닝 파이프라인(machine learning pipeline) 이라고 한다.

<데이터와 모델 도구>

  • 빅쿼리: SQL로 대규모 데이터셋을 빠르게 분석하도록 설계된 엔터프라이즈 데이터 웨어하우스

  • 빅쿼리 ML : 빅쿼리에 저장된 데이터로 모델을 빌드학 위한 도구로, SQL을 사용하여 모델을 학습하고 평가하고 모델로 부터 예측을 생성가능 함.
    비지도 클러스터링, 분류 모델, 회귀 모델 지원하고 예측을 위해 학습이 끝난 텐서플로 모델을 빅쿼리 ML로 임포트 가능

  • 클라우드 AI 플랫폼: 구글 클라우드에서 커스텀 머신러닝 모델을 학습하고 서빙하기 위한 제품 포함

    • AI Platform Training : 구글 클라우드에서 머신러닝 모델을 학습하기 위한 인프레 제공
    • AI Platform Prediction : 학습된 모델을 배포하고 API를 사용해서 모델의 예측 생성
    • Explainable AI : AI 플랫폼에 배포된 모델의 예측 결과를 해석하는 도구

    => 두 서비스 모두 텐서플로, 사이킷런, XG부스트를 포함해 다양한 프레임워크로 빌드한 모델을 위한 커스텀 컨테이너 지원

<머신러닝의 직군>

(1) 데이터 과학자(data scientist) : 데이터셋 수집, 해석, 처리를 수행하는 직군
데이터에 대한 통계적 ,탐색적 분석 수행. 머신러닝과 관련해서는 데이터 수집, 특징 가공, 모델 구축 등의 작업을 할 수 있음. 일반적으로 조직의 머신러닝 모델을 가장 먼저 구축

(2) 데이터 엔지니어(data engineer) : 조직의 데이터를 위한 인프라와 워크플로 관리
회사가 데이터를 수집하고, 데이터 파이프라인을 구축하고, 데이터를 저장하고 전송하는 방법을 관리하는데 도움을 줌. 데이터를 중심으로 인프라와 파이프라인을 구현함

(3) 머신러닝 엔지니어(machine learning engineer) : ML 모델에 대해 데이터 엔지니어와 유사한 작업을 수행함. 데이터 과학자가 개발한 모델을 가져와 해당 모델을 학습, 배포와 관련된 인프라와 운영을 관리함.
ML 엔지니어는 모델을 업데이트하고, 모델 버전을 관리하고, 최종 사용자에게 예측 서빙을 처리하는 프로덕션 서비스를 구축함

  • 회사의 데이터 과학 팀이 작고 팀의 민첩성이 높을수록, 같은 사람이 여러 역할을 수행할 가능성이 높음.
    보통은 데이터 엔지니어로서 머신러닝 프로젝트를 시작하고 데이터 수집을 위한 데이터 파이프라인을 구축하고, 데이터 과학자 역할로 전환해 ML 모델을 구축함. 최종적으로는 ML 엔지니어로서 모델을 프로덕션 으로 옮김

(4) 연구 과학자(research scientist) : ML 분야를 발전시키기 위해 새로운 알고리즘을 찾고 개발하는 역할
연구로는 모델 아키 텍처, 자연어 처리, 컴퓨터 비전, 하이퍼파라미터 튜닝, 모델 해석과 같은 머신러닝 내의 다양한 하위 분야를 포함함.
연구 과학자는 다른 직군과 달리 프로덕션 ML 시스템을 구축하는 대신, ML에 대한 새로운 접근 방식을 프로토타이핑하고 평가하는 데 대부분의 시간을 보냄

(5) 데이터 분석가(data analyst) : 데이터를 분석하고 통찰한 내용을 뽑아낸 다음, 조직 내의 다른 팀에 이를 공유함.
SQL 스프레드시트에서 작업하고 비즈니스 인텔리전스 도구를 사용해 데이터를 시가고하하여 결과를 공유함.
제품 팀과 긴밀히 협력하며, 통찰력이 어떻게 비즈니스 문제를 해결하고 가치를 창출하는데 도움을 주는지 잘 알고 있음.
보통 기존 데이터의 추세를 식별하고 그로부터 통찰한 결과를 만들어내는 데 집중하지만, 해당 데이터를 사용하여 향후 예측을 만들고 통찰 결과 생성을 자동화하거나 확장하는 데도 관심을 갖음. 머신러닝이 대중화됨에 따라 데이터 분석가가 자신의 역량을 기른다면 데이터 과학자로 성장할 수 있음

(6) 개발자(developer) :
최종 사용자가 ML 모델에 접근할 수 있는 프로덕션 시스템 구축 담당
웹 또는 앱을 통해 사용자 친화적인 형식으로 모델에 쿼리를 날리고 예측을 반한 받기 위한 API를 설계함
이러한 API가 쿼리, 예측을 주고받는 모델은 클라우드에서 호스팅되는 모델일 수 있고, 온디바이스로 내장된 모델일 수 있음.
개발자는 ML 엔지니어가 구현한 모델 서빙 인프라를 통해 모델 사용자에게 예측을 표시하기 위한 애플리케이션과 사용자 인터페이스를 구축함

1.4 머신러닝의 문제

  • ML 시스템을 구축하는 프로세스 내에는 ML 설계에 영향을 미치는 다양한 문제가 존재하므로, 이러한 문제를 이해하면 ML 실무자로서 솔루션을 적용하는 사고 프레임을 형성할 수 있으므로 '머신러닝 디자인 패턴'이 필요함

[문제 1] 데이터의 품질

  • 머신러닝 모델은 학습에 사용되는 데이터만큼만 신뢰할 수 있음
    불완전한 데이터셋, 특징이 부실한 데이터, 모델을 사용하는 모집단을 제대로 표현하지 못하는 데이터로 머신러닝 모델을 학습하면 모델의 예측에 이러한 데이터가 직접 반영됨
  • 데이터 품질에는 '정확도', '완전성', '일관성', '적시성' 이라는 네 가지 중요한 구성요소가 있다.

[1] 데이터 정확도(accuracy)
: 학습 데이터 특징의 정확도와 해당 특징에 해당하는 실측 라벨의 정확도
데이터의 출처와 데이터 수집 과정에 존재할 수 있는 오류에 대해 이해하면 특징의 정확성을 보장할 수 있음
데이터를 수집한 후에는 철저한 분석을 통해 오타, 중복 항목, 데이터 테이블의 단어 불일치, 누락된 특징, 기타 데이터 품질에 영향을 줄 수 있는 오류를 걸러내느 ㄴ것이 중요
=> 학습 데이터셋이 중복되면 모델은 이러한 중복 데이터에 더 많은 가중치를 할당함

데이터 라벨의 정확도 또한 특징의 정확도 만큼 중요한데, 모델은 가중치를 업데이트하고 손실 함수를 최소화할 때 학습 데이터의 실측 라벨에 의존함.
결과적으로 라벨이 잘못 지정된 학습 데이터는 모델의 정확도를 떨어트림

[2] 데이터 완전성(completeness)
: 예를 들어 고양이 품종을 식별하는 모델을 학습시킨다고 할때, 광범위한 고양이 이미지 데이터셋에서 모델을 학습하면 99% 정확도로 10개의 품종 중 하나로 이미지를 분류할 수 있다. 그런데 모델을 프로덕션에 배포하니 사용자가 고양이 사진을 분류하려고 업로드하고, 모델의 결과에 실망하게 되는데 모델이 무엇을 입력받든 상관없이 이 10가지 품종 중 하나로 분류 하기 때문이다. '고양이 아님' 에 해당하는 데이터와 라벨이 학습 데이터셋에 포함되지 않으면 '고양이 아님' 이라는 결과를 출력할 방법이 없음

데이터 완전성을 높이려면 학습 데이터에 각 라벨의 다양한 표현이 포함되도록 해야함.
위의 고양이 품종 모델에서 학습 데이터가 고양이 얼굴의 정면 클로즈업 샷이면 모델은 측면 사진이나 전신사진을 제대로 식별할 수 없음
테이블 데이터의 경우에도 마찬가지, 부동산 가격을 예측하는 모델을 만들 때, 2000 제곱피트가 넘는 주택의 학습 데이터만 사용해 모델을 학습시킨다면 작은 집에 대한 모델의 예측 성능은 떨어짐

[3] 데이터 일관성(consistency)
: 대규모 데이터셋을 만들 때 데이터 수집과 라벨 지정 작업을 여러 팀이 나눠서 수행함
데이터셋 전체의 일관성을 유지하려면 이러한 작업 절차에 대한 표준을 마련해야 함
데이터셋 전체의 일관성을 유지하려면 작업 절차에 대한 표준을 마련해야 하는데, 데이터셋 준비 과정에서 작업자들의 편견이 들어가기 때문임.
데이터 일관성 부족은 데이터의 특징과 라벨 양쪽에서 발생할 수 있음

예를 들어, 온도 센서에서 대기 데이터를 수집할 때, 각 센서가 서로 다른 표준으로 보정되었다면 모델은 부정확하고 신뢰할 수 없는 예측을 만들어내며, 데이터의 형식 자체도 일관성이 부족할 수 있음
위치 데이터 셋 수집시 데이터셋을 준비하는 사람이 일부는 전체 주소를 'Main Street' 으로 작성하고 다른 사용자는 'Main St'로 축약하거나, 마일이나 킬로미터와 같은 측정 단위를 혼재하는 것도 파함됨

라벨링의 일관성은 텍스트 감정 분류에서, 학습 데이터에 라벨을 지정할 때 각 텍스트가 긍정적인지 혹은 부정적인지에 대해 모두가 동일하게 생각하지 않을 수 있다.
이 문제를 해결하기 위해서는 여러 사람이 데이터셋의 각 항목에 라벨을 지정하고 각 항목에 가장 일반적으로 적용되는 라벨을 사용하는 것이 좋음. 누가 하느냐에 따라 라벨링의 편향이 존재할 수 있다는 점을 인식하고 이를 감안한 시스템을 구현한다면 데이터셋 전체에서 라벨링의 일관성이 보장될 것임

[4] 데이터 적시성(timelines)
데이터의 사건이 발생한 시점과 데이터베이스에 추가된 시점 사이의 지연 시간을 말함
애플리케이션 로그에서 데이터를 수집할 때는 오류 로그가 로그 데이터베이스에 표시될 때까지 몇 시간이 걸릴 수 있는데, 신용 카드 거래를 기록하는 데이터라면 거래가 발생하고 시스템에 보고될때 까지 하루가 걸릴 수 있다.
적시성을 처리하려면 특정 데이터에 대해 가능한 한 많은 정보를 기록하고 데이터를 머신러닝 모델의 특징으로 변환할 떄 정보가 반영되는지 확인하는 것이 좋음
-> 이벤트가 발생한 시점과 데이터셋에 추가도니 시점의 타임스탬프를 추적한 후 특징 가공 (feature engineering) 시 이러한 차이점을 반영하면 됨

2. [문제 2] 재현성

  • 일반적인 프로그래밍에서 프로그램의 출력은 재현이 가능한데, 문자열 뒤집는 파이썬 프로그램은 input으로 'banana' 단어 입력시 output으로 'ananab' 이 됨
  • 반면 , 머신러닝 모델에는 근본적으로 무작위성이 내재되어 있어서 ML 모델을 처음 학습시킬 때 가중치는 임의의 값으로 초기화 되기 때문에, 모델이 학습을 반복하다보면 이 가중치는 특정한 값으로 수렴됨
    그래서, 동일한 학습 데이터를 동일한 모델의 코드에 입력해도, 두 모델은 학습이 끝나면 약간 다른 결과를 생성하는 재현성의 문제를 야기함

-> 모델이 98.1%의 정확도로 학습했다면 반복적인 학습이 동일한 결과에 도달한다고 보장할 수 없어 여러 실험에서 비교를 실행하기 어려워 짐

  • 이 재현성 문제를 해결하는 일반적인 방법은 학습을 실행할 때마다 동일한 무작위성이 적용되도록 모델에서 사용하는 시드값을 설정하는 것임
    텐서플로에서의 tf.random.set_seed(value)
    사이킬런에서 from skelarn.utils import shuffle, data = shuffle(data, random_state=value)

  • 여러 실험에서 반복 가능하고 재현 가능한 결과를 보장하려면, 모델을 학습시킬 떄 동일한 데이터와 동일한 랜덤 시드를 사용해야 함

  • ML 모델 학습에는 재현성을 보장하기 위해 수정해야 하는 몇 가지 요소가 있는데 학습 데이터, 학습 및 검증을 윟나 데이터셋 생성에 사용되는 분할 메커니즘, 데이터 준비와 모델 하이퍼파라미터, 배치 크기와 학습률 등의 변수이다.

  • 재현성은 머신러닝 프레임워크의 종속성에도 영향을 받는데, 랜덤 시드를 수동으로 설정하는 것 외에도 프레임워크에는 모델을 학습시키기 위해 함수를 호출할 때 실해되는 무작위 요소가 내부적으로 구현되어 있음.
    이 기본 구현이 서로 다른 프레임워크 버전 간에 변경되면 재현성이 보장되지 않음
    => 재현성을 보장하고 싶으면 컨테이너에서 ML 워크로드를 실행하고 라이브러리 버전을 표준화하는 것이 좋음

  • 재현성은 모델 학습 환경에 영향도 받는데, 큰 데이터셋과 복잡성을 가진 모델은 학습하는데 상당한 시간이 걸린다.
    이를 데이터 또는 모델의 병렬 처리와 같은 배포 전략을 통해 가소고하하는데, 이러한 가속화로 분산 학습을 사용하는 코드를 다시 실행할 때에도 재현성 문제가 생길 수 있음

[문제 3] 데이터 드리프트

  • 머신러닝 모델은 일반적으로 입력과 출력의 정적인 관계를 나타내지만, 데이터는 시간의 흐림에 따라 크게 바뀔 수 있음
    머신러닝 모델이 입력과 출력 간의 관계를 유지할 수 있는지와 모델 예측이 사용 중인 환경을 정확하게 반영하는지에 대한 문제를 표현하는 용어가 바로 데이터 드리프트(data drift)

    예를 들어, 뉴스 기사 헤드라인을 '정치', '비즈니스', '기술' 과 같은 카테고리로 분류하는 모델을 학습할 때, 20세기 뉴스 기사에 대한 모델을 학습하고 평가했으면 21세기의 데이터 기준으로는 성능이 좋지 않을 수 있음
    예를 들면 '스마트폰' 단어는 요즘 세대의 기술이지만 과거 데이터 학습하면 관련 지식이 없음

  • 데이터 드리프트 문제를 해결하려면 학습 데이터셋을 지속적으로 업데이트하고, 모델을 재학습하고, 모델이 특정 입력 데이터 그룹에 할당하는 가중치를 수정해야 함

  • 드리프트의 예로 빅쿼리의 대규모 폭풍 NOAA 데이터셋(https://oreil.ly/obzvn) 에서, 특정 지역에서 폭풍이 발생할 가능성을 예측하는 모델을 학습하는 경우 날씨 보고가 시간에 따라 변화하는 방식을 고려 해야 함

[문제 4] 확장

  • 확장 문제는 일반적인 머신러닝 워크플로 여러 단계에 걸쳐 있음
  • 데이터 수집과 전처리, 학습과 서빙 모두 확장 문제가 발생할 수 있는데, 머신러닝 모델을 위한 데이터를 수집하고 준비할 때는 데이터셋의 크기에 따라 필요한 도구가 결정됨
  • 데이터 엔지니어의 경우 수백만 개의 행이 있는 데이터셋을 처리하도록 확장할 수 있는 데이터 파이프라인을 구축할 일이 많음
  • 모델을 학습시킬 때는 ML 엔지니어가 특정 학습 작업에 필요한 인프라를 결정해야 하는데, 데이터셋의 유형과 크기에 따라 모델 학습에 많은 시간과 계산 비용이 들 수 있으며,ML 워크로드를 위해 특별히 설계된 인프라가 필요할 수 있음
    예를 들어, 이미지 모델은 일반적으로 테이블 데이터에 비해 훨씬 더 많은 학습 인프라를 필요로 함
  • 모델을 서빙할 때는 상황이 달라지는데, 데이터 과학자들을 위해 모델 프로토타입에서 예측을 가져오는 인프라와 매시간 수백만 건의 예측 요청을 받는 프로덕션 모델을 위한 인프라는 완전히 다름
    모델 배포, 예측 서빙과 관련된 확장성 문제를 해결하는 것은 개발자와 ML 엔지니어의 몫

[문제 5] 다양한 목표

  • 머신러닝 모델 구축 담당 팀은 조직 내 하나일 수 있지만, 조직 전체의 많은 팀이 어떤 방식으로든 모델을 사용할 수 있음. 팀이 다르면 성공적인 모델을 정의하는 방식도 다름

  • 이미지를 입력으로 받아 결함이 있는 제품을 식별하는 모델을 만들 때, 데이터 과학자의 목표는 모델의 교차 엔트로피 손실을 최소화 하는 것임. 제품 관리자라면 잘못 분류되어 고객에게 발송되는 결함의 제품 수를 줄이는 것이 목표. 경영진의 목표는 매출을 30% 늘리는 것.
    이렇게 각 팀의 최적화 대상에 따라 목표는 달라지고 조직 내에서 이러한 서로 다른 요구 사항의 균형을 맞추는 데는 어려움이 따름

  • 데이터 과학자는 거짓 음성(fflase negative)가 거짓 양성(false positive)보다 5배 더 큰 비용을 유발한다는 사실을 인용함으로써 제품 팀의 요구사항을 모델의 맥락으로 변환할 수 있음. 모델을 설계시 이를 충족하기 위해 정밀도(presicion) 보다 재현율(recall)을 최적화해야함.
    그러면 제품 팀의 정밀도 최적화 목표와 모델 손실 최소화 목표 사이의 균형을 찾을 수 있음

  • 모델의 목표를 정의할 때는 조직 내 각 팀의 요구사항이 모델과 어떻게 관련되어 있는 지 고려하는 것이 중요함. 솔루션을 구축하기 전에 각 팀의 무엇을 최적화 하고 있는지 분석해 이러한 여러 목표의 균형을 최적화하는 타협 영역을 찾아야 함

정리

  • 디자인 패턴은 전문가의 지식과 경험을 모든 실무자가 따를 수 있는 조언으로 코드화하는 방법
  • 다음으로 전개될 내용은 각 디자인 패턴에서 머신러닝 시스템을 설계, 구축, 배포할 때 일반적으로 발생하는 문제에 대한 모범 사례와 솔루션을 정리한 것
  • 머신러닝의 일반적인 과제는 데이터 품질, 재현성, 데이터 드리프트, 확장, 다양한 목표 충족과 관련되어 있음
  • ML 수명 주기의 여러 단계에서 서로 다른 머신러닝 디자인 패턴을 필요로 하게 됨
  • 문제 프레임의 정의와 실행 가능성 평가에 유용한 패턴도 따로 있는데, 대부분의 패턴은 개발 또는 배포를 다루고 상당수의 패턴은 이러한 단계 간의 상호작용을 해결함
profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글