GCP ML Engineer

GCP ML Engineer 시험 노트개념 정리13 MIN

AutoML 학습과 업종별 AI API

AutoML로 정형·이미지·텍스트 모델을 학습하는 절차와 데이터셋 분할 규칙, 그리고 Document AI·Vision·Translate 같은 기성 API의 자리를 봅니다. 직접 학습할 일과 API로 끝낼 일을 가르는 기준을 세웁니다.

로우코드 섹션의 나머지 절반은 「학습을 아예 안 해도 되는 길」입니다. Google이 이미 학습해 둔 모델을 API로 부르면 끝나는 과제가 생각보다 많고, 시험은 그 경계를 반복해서 묻습니다. 먼저 학습하는 쪽부터 보고, 그다음에 안 해도 되는 쪽을 봅니다.

AutoML이 대신 해 주는 것

AutoML은 라벨이 붙은 데이터와 예산을 주면 모델 구조와 하이퍼파라미터를 플랫폼이 탐색해 학습까지 마치는 방식입니다. 다루는 데이터 유형이 셋입니다.

데이터 유형 할 수 있는 과제
정형(tabular) 이진·다중 분류, 회귀, 시계열 예측
이미지 이미지 분류(단일·다중 라벨), 객체 탐지
텍스트 텍스트 분류, 개체 추출, 감정 분석

절차는 유형이 달라도 같습니다. 데이터셋을 만들고 → 학습 작업을 걸고 → 평가를 보고 → 배포합니다. 파이썬 SDK로는 이렇게 됩니다.

from google.cloud import aiplatform

aiplatform.init(project="my-proj", location="us-central1")

ds = aiplatform.TabularDataset.create(
    display_name="churn-ds",
    bq_source="bq://my-proj.shop.customers",
)

job = aiplatform.AutoMLTabularTrainingJob(
    display_name="churn-automl",
    optimization_prediction_type="classification",
    optimization_objective="maximize-au-prc",
)

model = job.run(
    dataset=ds,
    target_column="churned",
    budget_milli_node_hours=8000,
    training_fraction_split=0.8,
    validation_fraction_split=0.1,
    test_fraction_split=0.1,
)

두 인자가 시험에서 그대로 문항이 됩니다.

budget_milli_node_hours는 노드 시간의 1000분의 1 단위입니다. 8000이면 8 노드 시간이고, 이 예산 안에서 탐색이 끝납니다. 단위를 잘못 읽어 8을 넣으면 8 노드 시간이 아니라 0.008 노드 시간을 요청하는 셈입니다.

optimization_objective는 무엇을 잘하게 만들지를 정합니다. 분류라면 maximize-au-roc가 기본이지만, 양성 비율이 1%처럼 크게 치우친 데이터에서는 maximize-au-prc(정밀도-재현율 곡선 아래 면적)가 낫습니다. ROC AUC는 참음성이 압도적으로 많으면 실제보다 좋아 보이기 때문입니다. 「불균형 데이터」라는 말이 문항에 있으면 이 인자를 보는 것이 빠릅니다.

데이터셋 준비와 분할

데이터가 앉는 곳은 유형마다 다릅니다. 정형은 BigQuery 테이블이나 Cloud Storage의 CSV, 이미지·텍스트는 Cloud Storage의 파일과 그 경로·라벨을 적은 인덱스 파일입니다. 이미지는 파일을 옮기지 않고 gs:// 경로만 인덱스에 적습니다.

분할은 세 갈래로 나뉩니다. 지정하지 않으면 학습 80% · 검증 10% · 테스트 10%로 무작위 분할됩니다.

  • 무작위 분할. 행 사이에 순서나 그룹이 없을 때 씁니다.
  • 수동 분할. 데이터에 TRAIN·VALIDATION·TEST 값을 담은 열을 두고 그 열을 지정합니다. 같은 사용자의 행이 학습과 테스트에 갈려 들어가면 안 될 때처럼, 분할 기준을 내가 쥐어야 할 때 씁니다.
  • 시간 기반 분할. 시간 열을 지정하면 오래된 쪽이 학습, 최근 쪽이 테스트가 됩니다. 미래를 예측하는 모델은 이쪽이어야 합니다. 무작위로 섞으면 미래 행으로 학습해 과거를 맞히는 셈이 되어 평가 점수가 실제보다 높게 나옵니다.

세 번째 항목이 이 절의 핵심입니다. 시간 축이 있는 데이터에 무작위 분할을 쓰는 것 자체가 데이터 누수입니다.

학습하지 않고 끝나는 길 — 기성 API

Google이 이미 학습해 둔 모델을 REST·SDK로 부르는 API들이 있습니다. 라벨링도 학습도 배포도 없고, 호출한 만큼 냅니다.

API 하는 일
Vision API 이미지의 라벨·객체·로고·랜드마크 탐지, 텍스트 인식(OCR), 부적절 콘텐츠 판정
Document AI 문서를 구조로 파싱 — 표·양식 필드 추출, 송장·영수증·신분증 전용 프로세서
Translate API 언어 감지와 번역, 용어집(glossary)으로 고유명사 표기 고정
Natural Language API 개체·감정·구문 분석
Speech-to-Text / Text-to-Speech 음성 인식과 합성
from google.cloud import vision

client = vision.ImageAnnotatorClient()
image = vision.Image(source=vision.ImageSource(image_uri="gs://shop-imgs/shelf.jpg"))

for label in client.label_detection(image=image).label_annotations:
    print(label.description, round(label.score, 3))

Vision API와 Document AI를 가르는 자리가 자주 나옵니다. 둘 다 이미지에서 글자를 읽지만, Vision API는 「이 이미지에 어떤 글자가 있나」까지고, Document AI는 「이 송장의 공급자명·금액·날짜가 무엇인가」처럼 문서의 구조와 필드를 이해합니다. 스캔한 계약서에서 항목을 뽑아내는 요구라면 Document AI 쪽입니다.

무엇으로 끝낼지 고르는 순서

시험이 실제로 묻는 것은 제품 이름이 아니라 이 순서입니다. 위에서부터 물어 처음 「된다」가 나오는 곳에서 멈춥니다.

  1. 기성 API로 되는가. 과제가 일반적이고(사람·자동차 탐지, 번역, OCR) 우리만의 라벨 체계가 없다면 여기서 끝납니다. 학습 데이터도 운영 부담도 없습니다.
  2. 안 된다면 AutoML로 되는가. 우리 도메인의 라벨이 필요하지만 라벨이 붙은 데이터가 있고 모델 구조를 손댈 이유가 없다면 여기입니다.
  3. 그것도 안 되면 커스텀 학습이다. 구조를 직접 짜야 하거나, 특수한 손실 함수·학습 절차가 필요하거나, AutoML의 정확도가 요구를 못 맞출 때입니다.

거꾸로 가는 답이 오답이 되는 이유가 분명합니다. 라벨 100개짜리 일반 사물 인식에 CNN을 직접 학습하겠다는 보기는, 데이터 수집·라벨링·학습·서빙·재학습까지 떠안으면서 이미 있는 것보다 나은 결과를 낼 근거가 없습니다.

다만 기성 API를 쓸 수 없게 만드는 조건도 있습니다. 데이터를 외부 API로 보낼 수 없다는 규정이 있거나, 우리 공장의 부품 결함처럼 일반 모델이 본 적 없는 대상이라면 1번은 처음부터 지워집니다. 문항에 규정·도메인 특수성이 적혀 있으면 그것이 곧 그 지시입니다.

연습 문제

  1. budget_milli_node_hours=8000으로 AutoML 정형 학습을 걸었습니다. 요청한 예산은?
    ① 8 노드 시간
    ② 8,000 노드 시간
    ③ 8분
    ④ 800 노드 시간
    ①. 단위가 노드 시간의 1000분의 1이므로 8000/1000=88000 / 1000 = 8 노드 시간입니다.
  2. 25,000행짜리 정형 데이터셋을 분할 비율 없이 AutoML로 학습했습니다. 기본 분할대로면 테스트에 들어가는 행 수는?
    ① 250
    ② 1,250
    ③ 2,500
    ④ 5,000
    ③. 기본 분할은 80/10/10이므로 25000×0.1=250025000 \times 0.1 = 2500행입니다. 학습은 20,000행, 검증은 2,500행입니다.
  3. 사기 거래 탐지 모델을 AutoML로 학습합니다. 전체 거래 중 사기는 0.8%입니다. optimization_objective로 가장 알맞은 것은?
    ① maximize-au-roc
    ② maximize-au-prc
    ③ minimize-rmse
    ④ maximize-precision-at-recall을 재현율 지정 없이 쓴다
    ②. 참음성이 압도적으로 많으면 ROC AUC가 실제보다 좋아 보입니다. ③은 회귀용 목표이고, ④는 목표 재현율을 함께 지정해야 뜻이 생깁니다.
  4. 지난 3년간의 일별 데이터로 다음 분기 수요를 예측하는 AutoML 모델을 만듭니다. 분할 방식으로 알맞은 것은?
    ① 무작위 분할
    ② 시간 열을 지정한 시간 기반 분할
    ③ 고객 ID로 수동 분할
    ④ 분할 없이 전부 학습에 쓴다
    ②. 무작위로 섞으면 미래 행으로 학습해 과거를 맞히게 되어 평가가 부풀고, 실제 운영에서 그 점수가 나오지 않습니다.
  5. 스캔한 송장 이미지에서 공급자명·금액·발행일을 뽑아 회계 시스템에 넣으려 합니다. 가장 알맞은 것은?
    ① Vision API의 텍스트 인식
    ② Document AI
    ③ Translate API
    ④ AutoML 이미지 분류
    ②. Vision API는 이미지에 있는 글자를 읽어 주지만 어느 글자가 금액이고 어느 글자가 날짜인지는 구분하지 않습니다. Document AI가 문서 구조와 필드를 이해합니다.
  6. 사진에 사람·자동차·개가 있는지 판정하는 기능이 필요합니다. 우리만의 라벨 체계는 없고 데이터 반출 제한도 없습니다. 가장 알맞은 선택은?
    ① Vision API를 호출한다
    ② 이미지 10만 장을 라벨링해 AutoML로 학습한다
    ③ 커스텀 학습으로 CNN을 직접 설계한다
    ④ Document AI 프로세서를 만든다
    ①. 일반적인 사물 인식은 기성 API가 이미 잘합니다. ②·③은 라벨링과 운영 비용을 떠안으면서 더 나을 근거가 없습니다.
  7. 공장 라인에서 자사 부품의 미세 균열을 찾아야 합니다. 결함 이미지 3만 장에 라벨이 붙어 있고 모델 구조를 손댈 이유는 없습니다. 알맞은 선택은?
    ① Vision API 라벨 탐지
    ② AutoML 이미지 객체 탐지
    ③ Translate API
    ④ BigQuery ML LOGISTIC_REG
    ②. 일반 모델이 본 적 없는 도메인이라 1단계는 지워지고, 라벨 데이터가 있고 구조를 손댈 이유가 없으므로 2단계에서 멈춥니다.
  8. 같은 사용자의 거래가 여러 행으로 들어 있고, 한 사용자의 행이 학습과 테스트에 갈려 들어가면 안 됩니다. 알맞은 분할 방식은?
    ① 무작위 분할
    ② 시간 기반 분할
    ③ 분할 값을 담은 열을 두고 수동 분할
    ④ 검증 분할을 0으로 둔다
    ③. 분할 기준을 내가 쥐어야 하는 경우입니다. ①은 같은 사용자가 양쪽에 걸려 평가가 부풀고, ④는 분할 문제를 풀지 못합니다.
GCP ML Engineer 시험 노트 전체 보기