[머신러닝 시스템 설계] 1 시각 검색 시스템

2026. 4. 10. 22:13·인공지능(AI)/머신러닝(ML)
본 게시글은 알렉스 쉬, 알리 아미니안(최종일 옮김)의 "가상면접 사례로 배우는 머신러닝 시스템 설계 기초"를 읽고 정리한 내용에, 개인적인 이해를 추가한 글입니다.

 

 

Overview

머신러닝 시스템 설계 문제에서는 단순히 모델을 만드는 것이 아니라, end-to-end 관점에서 문제를 어떻게 정의하고 풀어가는지가 중요합니다.

 

이 글에서는 그 중 하나인 시각 검색 시스템 (visual search) 을 기준으로, 전체 설계 과정을 정리해보았습니다.

 

1️⃣ 요구사항 명확화


문제: 핀터레스트와 유사한 시각적 검색 시스템을 설계하시오

 

왼쪽 상단 이미지: 쿼리 이미지, 오른쪽은 유사한 이미지 결과들

주어진 기본 과정은 다음과 같다고 고려합니다.

  • 입력: 이미지
  • 출력: 유사 이미지 리스트 (ranking 포함)
  • 개인화: 고려하지 않음
  • 텍스트/동영상 쿼리: 제외

고려해야 할 포인트들

즉, 아래의 목표를 고려하여 빠르고 정확하게 유사한 이미지를 찾아주는 시스템을 만드는것이 최종 목표입니다.

비즈니스 목표 검색 시스템이 얼마나 잘 동작하는지 판단 (CTR, 사용자 수, 체류 시간 등)
시스템 기능 사용자 선호도 수집 (좋아요/싫어요 등) → 학습 데이터 라벨로 활용
데이터 이미지 기반 (동영상/텍스트 제외), 기본적으로 픽셀 정보 사용 (확장 시 메타데이터 고려)
제약 조건 컴퓨팅 자원, 클라우드 vs 온디바이스, 모델 자동 개선 여부
시스템 규모 사용자 수 및 트래픽 규모
성능 요구사항 목표 정확도 및 검색 속도 (대규모 이미지 DB: 100B~200B)

 

 

2️⃣ ML 문제로 구조화


비즈니스 문제를 ML 문제로 재정의해봅시다. 

ML 목표로 재정의: 쿼리 이미지와 시각적으로 유사한 이미지를 정확하게 찾는다

 

이 경우, I/O는 다음 처럼 생각할 수 있습니다: Input: 이미지 (pixel) , Output: 유사 이미지 리스트 (ranking)

 

입력된 쿼리 이미지와 유사한 이미지를 검색하여, 이를 보여주는 것이 목표이므로,

단순 분류 문제가 아니라, ranking 문제로 보는 것이 자연스럽습니다.

 

여러 ML이 답이 될 수 있으나, 여기서는 표현 학습(representation learning) 접근방식으로 문제를 풀려고 합니다.

 

표현학습이란, 이미지와 같은 입력 데이터를 임베딩이라는 표현으로 변환하도록 모델을 훈련하는 것으로, 유사한 이미지끼리는 서로 근접한 임베딩을 갖도록 학습하는 것이 핵심입니다.

 

표현 학습을 사용해 이미지 순위를 매기는 방법으로는, (1),(2)가 존재합니다.

(1) 임베딩 공간의 거리를 측정해 쿼리 이미지와, 다른 이미간의 유사도 점수를 계산해 이미지 순위를 매김.

(2) 유사성 정의, 모델 훈련 방법, 유사한 이미지를 가깝게 하는 방법 등

 

 

처음 이 문제를 봤을 때, 개인적으로 떠올랐던 방법은 크게 두 가지 입니다: (1) from scratch, (2)기존 임베딩 모델을 활용

 

(1) 처음부터 학습하고 싶다면, contrastive learning을 떠올릴 수 있습니다.

- simCLR, MoCo 등 다양한 self-supervised 방식

- 그 중, simCLR 관련해서는 이전에 정리한 게시글이 있습니다.

https://codingsmu.tistory.com/163

 

simCLR을 통해 Contrastive Learning 이해하기

해당 게시글은 Ekin Tiu님의 Understanding Contrastive Learning글을 참고하여 번역 및 요약한 글입니다. What is Contrastive Learning? Contrastive learning is a machine learning technique used to learn the general features of a dataset w

codingsmu.tistory.com

 

(2) 기존에 잘 학습된 임베딩 모델을 활용할 수도 있습니다. hugginface에서 다운로드 수가 높은 임베딩 모델을 참고하세요

 

3️⃣ 데이터 준비


ML 모델 성능을 결정짓는 가장 중요한 단계 중 하나입니다.

데이터 준비 프로세스


데이터 준비 단계는 크게 (1) 데이터 엔지니어링, (2) 피처 엔지니어링으로 나눌 수 있습니다.


(1) 데이터 엔지니어링

데이터를 수집하고, 저장하고, 검색하고, 처리하는 전체 파이프라인을 설계하는 단계입니다.

이 시스템에서 사용할 수 있는 데이터 소스는 다음과 같습니다.

- 이미지 데이터
- 사용자 데이터
- 사용자 ↔ 이미지 상호작용 데이터

각 데이터를 조금 더 구체적으로 보면:

- 이미지: 픽셀 정보 외에도, 소유자, 업로드 시간, 태그 등의 메타데이터를 포함할 수 있음
- 사용자: 나이, 성별 등 기본적인 프로필 정보
- 상호작용: 사용자별 노출 수, 클릭 수, 좋아요/싫어요 등

특히, 상호작용 데이터는 이후 모델 학습 시 중요한 supervision signal로 활용될 수 있습니다.



(2) 피처 엔지니어링

수집된 데이터 중에서 모델 입력으로 사용할 피처를 정의하고, 전처리하는 단계입니다.

이 시스템에서는 입력이 이미지이기 때문에, 이미지 전처리가 필수적으로 수행되어야 합니다.

대표적인 전처리 과정은 다음과 같습니다.

- resizing
- scaling
- z-score normalization
- 이미지 색상 모드 통일 (RGB 등)


이미지 전처리 관련해서 좀 더 상세한 내용이 궁금하다면 아래 글을 참고하면 좋습니다 :)

- [패턴인식] 영상 처리(1) : 디지털 영상, 히스토그램: https://codingsmu.tistory.com/102
- [패턴인식] 영상 처리(2) : 이진영상, 영상 처리의 세가지 기본 연산: https://codingsmu.tistory.com/103
 

[패턴인식] 영상 처리(2) : 이진영상, 영상 처리의 세가지 기본 연산

Digital Image Processing목차0. Preview1. 디지털 영상이란?2. 히스토그램3. 이진 영상4. 영상 처리의 세가지 기본 연산5. 다해상도6. 모폴로지7. 컬러  은 이전 게시글을 참고해주세요https://codingsmu.tistory.co

codingsmu.tistory.com

 

 

 

 

 

 

 

 

4️⃣ 모델 개발


모델 개발 단계에서는 (1) 모델 선택, (2) 학습 방식, (3) loss function을 결정합니다.


(1) 모델 선택

기본적으로 이미지 데이터를 다루기 때문에, Neural Network 기반 모델을 사용합니다.

대표적으로는 다음과 같은 구조가 있습니다.

- CNN 기반: ResNet 등
- Transformer 기반: ViT (Vision Transformer)

최근에는 transformer 기반 모델이 많이 사용되는 추세이지만,   여전히 CNN 기반 모델도 안정적으로 많이 활용됩니다.


(2) 모델 훈련 (Contrastive Learning)

이 문제에서는 유사한 이미지를 가깝게, 다른 이미지를 멀게 학습해야 하므로  contrastive learning 방식이 적합합니다.

훈련 데이터 포인트


학습 데이터는 다음과 같이 구성됩니다.

 

Query 이미지 (q)
Positive 이미지 (1개)
Negative 이미지 (n-1개)

 


여기서, Positive 데이터를 어떻게 구성할지가 중요한 포인트입니다.

대표적인 방법은 다음과 같습니다.

1) 사람 라벨링  
- 가장 정확하지만 비용이 큼  

2) 사용자 상호작용 기반  
- 클릭, 좋아요 등을 활용  
- 확장성은 좋지만 noise가 존재 → 필터링 필요  

3) 데이터 증강 (self-supervised)  
- crop, rotation, color 변환 등  
- simCLR, MoCo 등의 방식  

이 중, 초기 cold-start 상황에서는 simCLR 기반 augmentation을 사용할 수 있고,  
이후에는 실제 사용자 데이터를 활용하는 방향으로 발전시킬 수 있습니다.

단, augmentation 기반 데이터는 실제 semantic 유사성과 차이가 있을 수 있다는 한계가 있습니다.


(3) Loss Function

목표는 다음과 같습니다: 유사한 이미지는 임베딩 공간에서 가깝게, 다른 이미지는 멀어지도록 학습하는 것

이를 위해 일반적으로 다음 과정을 거칩니다.


1. 임베딩 간 유사도 계산  
2. softmax를 통해 확률로 변환  
3. cross entropy로 loss 계산  

 

복잡한 수식보다도, 아래 그래프를 보면 이해가 빠릅니다. 

(좌) softmax , (우) cross entropy function

softmax는 0~1로 값을 정규화 해주는 작업으로, cross entropy는 loss 값을 계산해준다고 생각하면 됩니다.

 

예로, 레이블이 3개 (긍정, 중립, 주정)인 모델이 있다고 합니다. 예측1,2의 결과는 softmax를 거쳐 합이 1인 값으로 나온다고 했을 때, loss 값은 다음처럼 계산될 수 있습니다. 모델은 loss가 최소화되는 방향으로 학습됩니다.

 

- (예시1) GT=긍정일 때, 모델의 예측값→ [긍정, 중립, 부정] → [0.6, 0.1, 0.3] → -log(0.6) = 0.51 (loss 값. 낮음)

- (예시2) GT=중립일 때, 모델의 예측값→ [긍정, 중립, 부정] → [0.6, 0.1, 0.3] → -log(0.1) = 2.3 (loss 값. 높음)

 

 

 

5️⃣ 평가



모델 성능 평가는 크게 (1) 오프라인 평가, (2) 온라인 평가로 나눌 수 있습니다.



(1) 오프라인 평가
대표적으로 다음과 같은 지표를 사용합니다.

- MRR
- Recall@K
- Precision@K
- mAP (mean Average Precision)
- nDCG (normalized Discounted Cumulative Gain)

 

검색/추천 시스템에서는 단순 accuracy보다 ranking metric이 중요합니다. 따라서 MRR, mAP, nDCG 메트릭을 주로 평가 지표로 사용됩니다.

각 지표를 다음의 예시로 계산해보겠습니다.

 

후보 이미지: [a, b, c, d, e]  
GT 유사도: [5, 4, 1, 0, 2] (threshold ≥ 3 → a, b가 정답)
예측값이 정답일 때 ✅, 예측값이 오답일 때⏺️

 


MRR (Mean Reciprocal Rank) : 첫 번째 정답이 얼마나 빠르게 등장하는지를 측정합니다.

 

a(혹은 b)를 첫번째 시도에 예측했을 때 → 1

- ✅⏺️⏺️⏺️⏺️

- ✅⏺️⏺️✅⏺️


a(혹은 b)를 세 번째 시도에 예측했을 때 → 1/3

- ⏺️⏺️✅⏺️⏺️

- ⏺️⏺️✅✅⏺️



Recall@K: 정답을 얼마나 많이 찾았는지를 평가합니다.

- recall@1: [a] → 1/2 = 0.5  
- recall@2: [a, b] → 2/2 = 1  

단, 정답 개수가 많은 경우 값이 낮아지는 경향이 있어 검색 시스템에서는 한계가 있습니다.

Precision@K: 예측한 결과 중 정답 비율을 측정합니다.

- precision@5: 2/5 = 0.4  

순서 정보가 반영되지 않기 때문에 ranking 품질을 평가하기에는 부족한 지표입니다.

mAP (Mean Average Precision)

 

이진 관련성 (relevant / non-relevant) 기준으로 평가하는 지표입니다.
정답이 등장할 때마다 precision을 계산하고 평균을 냅니다.

즉, 정답이 등장하는 위치가 앞쪽일수록 점수가 높으며, binary relevance 기준에서는 잘 동작합니다.

 

계산 시 먼저 AP를 구합니다. 즉, 정답이 등장할 때마다 precision을 계산해서 평균냄.

: k개의 항목에서 precision@k의 평균을 구함 (AP) → (4개 AP의 합)/4=0.37 → mAP

 

- 예측 1: ⏺️⏺️✅→ 1/3 → AP → (1/3)/1 = 0.33

- 예측 2: ✅, ✅⏺️⏺️✅ → 1, 2/4 → (1+2/4)/2=0.75

- 예측 3:⏺️⏺️✅, ⏺️⏺️✅✅  → 1/3, 2/4 → (1/3+2/4)/2=0.41

- 예측 4: ⏺️⏺️⏺️⏺️⏺️ → 0



nDCG (Normalized Discounted Cumulative Gain)

연속적인 relevance score (예: 0~5)를 반영하는 지표입니다.
이상적인 순위와 비교하여, 현재 결과가 얼마나 좋은지 평가합니다.

예시로 다음 상황을 가정해봅시다.

GT: [5, 4, 1, 0, 2]  
예측: [d, a, c, b, e]


먼저, DCG를 계산합니다. (실제 예측 값 기반)

다음으로 IDCG를 계산합니다. (이상적인 순서)

 

이를 DCG/IDCG로 하면, 실제 예측값이 얼마나 이상적인 순서에 가까운지를 계산할 수 있습니다.


(2) 온라인 평가

모델을 실제 서비스에 배포한 이후에는,   비즈니스 지표 기반으로 성능을 평가합니다.

확인해야 할 포인트는 다음과 같습니다. : “이 모델이 실제로 사용자 경험을 개선했는가?”

대표적인 지표로는 클릭률 (CTR), 체류 시간 (dwell time), 재방문율 등이 있습니다.

반응형

'인공지능(AI) > 머신러닝(ML)' 카테고리의 다른 글

[머신러닝 시스템 설계] 3 유튜브 동영상 검색  (6) 2026.04.25
[머신러닝 시스템 설계] 2 구글 스트리트 뷰 블러링 시스템  (0) 2026.04.19
머신러닝의 종류: 지도학습과 비지도학습  (0) 2022.10.12
앙상블(Ensemble) 기법  (1) 2022.07.15
[핸즈온 머신러닝] 5. 정규화  (0) 2021.12.05
'인공지능(AI)/머신러닝(ML)' 카테고리의 다른 글
  • [머신러닝 시스템 설계] 3 유튜브 동영상 검색
  • [머신러닝 시스템 설계] 2 구글 스트리트 뷰 블러링 시스템
  • 머신러닝의 종류: 지도학습과 비지도학습
  • 앙상블(Ensemble) 기법
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    머신러닝
    결정경계
    디지털이미지처리
    SIFT
    비용함수
    LM
    DIP
    에지검출
    최대유량
    선형회귀
    네트워크플로우
    ComputerVision
    networkflow
    f1-score
    machinelearning
    손실함수
    언어모델
    경사하강법
    NLP
    파이썬 클린코드
    MaximumFlow
    패턴인식
    지도학습
    비지도학습
    컴퓨터비전
    기계학습
    ML
    군집화
    DigitalImageProcessing
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[머신러닝 시스템 설계] 1 시각 검색 시스템

티스토리툴바