개요

22~25편은 모델을 내가 학습시키는 이야기였다. 어떤 구조를 쓸지(CNN, ViT), 어떻게 학습시킬지(초기화, 정규화, 학습률)를 봤다. 그런데 그 이야기에는 조용한 전제가 하나 깔려 있었다. 학습할 데이터와 GPU가 있다는 전제다.

이번 강의는 그 전제를 대놓고 깬다. 시작 질문이 이랬다.

학습 데이터도 계산 리소스도 없는 가난한 AI 서비스 회사가 이미지 AI 서비스를 만들려면, 어디서부터 시작해야 할까?

거기다 조건이 하나 더 붙는다. 기존 이미지 모델은 학습한 도메인과 비슷한 데이터에서 잘 작동했다. 그런데 실제 서비스는 전혀 예측하지 못한 사진이 들어온다. 학습하지 않은 상황에서도 동작해야 한다면, 어떤 특징을 갖는 모델이 필요할까?

이번 글은 그 답으로 나온 파운데이션 모델의 정의부터 시작해서, 이미지 쪽 대표 모델인 CLIP이 어떻게 학습되는지까지 본다. 4차시 강의의 1차시분이다.

한 가지 미리 정리해둔다. 파운데이션 모델과 CLIP은 이 블로그에서 처음 나오는 말이 아니다.

이미 다룬 글 그 글이 다룬 각도 26~29편이 더하는 것
15편 텍스트 기준 정의, 규모의 법칙, 창발성, 폐쇄형과 개방형 같은 정의를 이미지에서 다시 본다. 왜 이미지에서 더 절실한지
21편 GAN → Diffusion → Latent Diffusion → CLIP의 큰 흐름 한 번에 CLIP 한 모델의 안쪽 — 손실 함수, 배치 구조, 온도

15편과 21편이 지도라면, 이번 시리즈는 그 지도에서 이미지 구역만 확대한 것이다. 겹치는 대목은 짧게 짚고 넘어간다.

교육 자료는 대외비라 슬라이드 이미지나 예제 데이터는 싣지 않는다.


1. 파운데이션 모델 — 매번 새로 배우지 않는다

정의부터 한 줄로 자르면 이렇다.

대규모 데이터로 사전학습한 뒤, 다양한 문제에 범용적으로 빠르게 적응해 쓸 수 있는 기반 AI 모델.

2021년 미국 스탠포드 대학의 사람 중심 AI 연구소(HAI) 보고서에서 이 이름으로 새 범주를 나누기 시작했다. 이름이 붙었다는 건, 그 전까지의 방식과 다른 무언가가 됐다는 뜻이다.

15편에서 이 정의를 텍스트 기준으로 한 번 정리했다. 규모의 법칙(데이터·파라미터·계산을 키우면 성능이 예측 가능하게 오른다)과 창발성(작은 모델에는 없던 능력이 일정 규모를 넘으면 갑자기 나타난다)이 그 글의 축이었다. 그 두 가지는 이미지 쪽에서도 그대로 성립하니 여기서 다시 풀지 않는다. 대신 이미지에서만 달라지는 대목을 본다.

무엇이 달라졌나. 예전에는 태스크마다 모델을 새로 학습했다. 분류 모델, 검출 모델, 캡션 모델이 따로 있고 각각 데이터셋이 따로 필요했다. 파운데이션 모델은 반대다. 한 번 크게 학습해두고, 그걸 얼마나 잘 활용하느냐가 핵심이 된다.

태스크별 모델과 파운데이션 모델 비교

세 가지 특징

특징 내용
대규모 사전학습 트랜스포머 구조 + 웹 규모 데이터. 라벨을 사람이 안 달아도 되는 비지도·자기지도 방식이 많다
적응성 하나의 믿고 쓸 모델을 여러 목적에 미세조정해서 쓴다. 적응 성능 자체가 높다
범용성 출력이 미리 정해진 목록에 묶이지 않는다. 자연어로 물어보는 만큼 답한다

세 번째가 특히 크다. 기존 분류 모델은 모델 구조 자체가 출력을 20여 개로 못 박아 놨다. 개·고양이·자동차를 학습시켰으면 그 셋 중 하나로만 답한다. 파운데이션 모델은 만 개 이상을 구분하거나, 아예 자연어로 된 한정되지 않은 대상까지 다룬다.

사전학습과 적응, 두 단계로 나뉜다

파운데이션 모델의 개발 흐름은 두 덩어리로 갈린다.

  1. Pre-training (사전학습) — 대규모 데이터에서 폭넓은 기본 지식을 습득한다. 데이터·계산·전력이 어마어마하게 들어서 일부 기관만 할 수 있다
  2. 적응 활용 (Down-stream task adaptation) — 이미 학습된 모델을 내 문제에 붙인다. 여기가 우리 자리다

적응 쪽은 다시 셋으로 나뉜다.

방식 추가 학습
Zero-shot 처음 보는 문제를 추가 학습 없이 바로 처리. 모델이 이미 가진 배경 지식으로 푼다 없음
Few-shot 예제 몇 개만 보여주면 바로 적용 거의 없음
Fine-tuning 조금만 알려주면 금방 적응한다. 모델 가중치가 실제로 바뀐다 있음 (가벼움)

25편에서 본 전이학습(LP/FT)이 이 표의 마지막 줄에 그대로 들어온다. 다른 이야기가 아니라 규모가 커진 같은 이야기다.

파운데이션 모델은 “더 좋은 모델”이 아니라 “학습 비용을 남이 대신 낸 모델” 이다. 가난한 쪽이 고를 수 있는 선택지가 이것뿐인 이유다.


2. 왜 이미지여야 했나 — 언어만으로는 부족하다

강의는 여기서 AGI 이야기를 잠깐 꺼낸다. 사람의 지능을 이렇게 쪼갠다.

인간의 인지 = 지각(perception) + 고차 인지 과정(추론·사고)

2022년 11월 ChatGPT 이전에는 각 분야별로 지능의 아주 부분적인 능력만 따로따로 모델링했다. ChatGPT 이후로는 대규모 언어모델이 사고·추론 성능을 꽤 보여주기 시작했고, 여러 인지 벤치마크에서 인간 수준에 근접했다.

그런데 강의가 못을 박는 지점이 여기다.

사고 능력과 언어 능력만으로는 현실 세계를 이해하기에 충분하지 않다.

당연한 말이다. 눈이 없으면 “저기 회색 지붕 정자 옆에 서 있는 사람”을 말할 수가 없다. 그래서 나온 게 LLM에 눈을 달자는 발상이고, 그게 시각언어모델(VLM)이다. 구조는 단순하게 보면 이렇다.

  • 이미지 → 이미지 인코더 → 토큰 몇 개
  • 텍스트 → 토크나이저 → 토큰 몇 개
  • 둘을 합쳐 언어모델에 넣는다 → 답변 문장

강의에서 든 사례는 GPT-4의 손그림을 웹페이지로 바꾸는 시연, 그리고 Claude가 화면을 보고 컴퓨터를 조작하는 Computer use였다. 둘 다 “이미지를 이해한 다음 그걸로 무언가를 한다”는 점에서 같은 계열이다.

여기서 질문이 하나 남는다. 이미지 인코더가 뱉은 토큰을 언어모델이 어떻게 알아듣나? 그 답이 CLIP이다.


3. CLIP — 이미지와 문장을 같은 지도 위에 올린다

CLIP(Contrastive Language-Image Pre-training)은 2021년 OpenAI가 낸 모델이다. 이름 그대로 대조 학습으로 언어와 이미지를 함께 사전학습한다.

21편에서 이 모델을 한 번 짚었다. 그때 정리한 한 줄은 이랬다. CLIP은 그림을 그리는 모델이 아니라, 글과 그림이 얼마나 맞는지 재는 모델이다. 그 문장은 지금도 그대로 유효하다. 이번 글은 거기서 한 겹 더 들어가서, 그 “재는 기준”이 어떻게 만들어지는지를 본다.

데이터부터 다르다

  • 인터넷에서 모은 이미지-텍스트 쌍 4억 개
  • 텍스트는 alt 속성, 이미지 캡션, 제목 같은 걸 긁어온 것
<img src="/imgs/cat-sleeping.jpg" alt="A cat sleeping on a blanket">

이 한 줄이 곧 학습 데이터 하나다. 사람이 라벨링한 게 아니라 웹에 이미 붙어 있던 설명이다. ImageNet이 1,400만 장 규모인데, CLIP은 4억 쌍으로 시작했다. 라벨링 인건비를 안 내는 방식이라 가능했던 규모다.

구성은 두 덩어리다.

인코더 구조 하는 일
텍스트 인코더 Transformer 문장 → 512차원 벡터
이미지 인코더 ViT-B (또는 ResNet-50) 사진 → 512차원 벡터

두 인코더 다 앞 편에서 본 것들이다. 24편의 ViT가 여기 그대로 들어온다. 이미지를 16x16 패치로 자르고, 1D로 펴고, 학습 가능한 위치 임베딩을 더해 Transformer 인코더에 넣는 그 구조다. 다른 점은 MLP Head로 분류를 하지 않는다는 것뿐이다. CLIP에서는 분류 대신 CLIP 학습법으로 학습된다.

3-1. 임베딩 공간 정합이 무슨 말인가

나는 이 표현에서 한 번 걸렸다. “두 모달리티를 같은 임베딩 공간에 정합한다”는 문장이 계속 나오는데, 실제로 뭘 한다는 건지 감이 안 왔다.

풀어보면 이렇다. 이미지 인코더도 숫자 512개를 뱉고, 텍스트 인코더도 숫자 512개를 뱉는다. 여기까지는 그냥 길이만 같은 남남이다. 이미지 벡터의 3번째 숫자와 텍스트 벡터의 3번째 숫자는 아무 관계가 없다.

정합은 여기에 규칙을 하나 강제로 심는 일이다.

뜻이 같으면 두 벡터가 가까운 자리에, 뜻이 다르면 먼 자리에 놓이도록 두 인코더를 같이 학습시킨다.

임베딩 공간 정합

이게 되면 재밌는 일이 생긴다. 강아지 사진의 벡터와 “강아지 사진”이라는 문장의 벡터가 거의 같은 자리에 있으니, 사진을 문장으로 검색할 수 있고 문장을 사진으로 검색할 수도 있다. 두 종류의 데이터를 같은 자로 잴 수 있게 된다.

더 쉬운 비유로

정합 전 — 한 사람은 한국 주소로, 한 사람은 위도·경도로 위치를 말한다. 같은 자리를 말해도 서로 못 알아듣는다. 정합 후 — 둘 다 같은 지도의 같은 좌표계로 말한다. 이제 “가깝다/멀다”를 그냥 뺄셈으로 잴 수 있다.

파일 형식을 통일하는 것과 비슷하다. 사진도 문장도 결국 같은 좌표계의 점 하나로 바꿔놓으면, 그다음부터는 거리 계산이라는 아주 단순한 연산만 남는다. 검색·분류·추천이 전부 이 거리 계산 위에서 돌아간다.


4. 대조 학습 — 배치 하나가 곧 문제지

그럼 그 좌표계를 어떻게 맞추나. 여기가 CLIP 학습의 핵심이다.

학습 목표

  • 이미지와 텍스트가 짝이면 임베딩이 가깝게
  • 짝이 아니면 멀게

라벨이 따로 없다. 이 방식이 성립하는 이유는 배치 안에서 정답이 저절로 정해지기 때문이다. N개의 쌍을 배치에 넣으면 N×N 유사도 표가 만들어지고, 대각선만 정답, 나머지는 전부 오답이 된다.

대조 학습 배치 구조

계산 순서

  1. 이미지 배치와 텍스트 배치를 각자 인코더에 통과시킨다
  2. 각각 선형 투영으로 같은 차원(d)에 맞추고 L2 정규화한다
  3. 두 묶음을 곱해 코사인 유사도 행렬을 만든다
  4. 온도 파라미터 τ로 나눈 뒤 교차 엔트로피를 계산한다
  5. 행 방향(이미지→텍스트)과 열 방향(텍스트→이미지) 손실을 각각 구해 평균낸다

유사도는 이렇게 잰다. 정규화를 먼저 해두면 내적이 곧 코사인 유사도가 된다.

$$ s_{ij} = \frac{z^{I}{i} \cdot z^{T}{j}}{\lVert z^{I}{i} \rVert \lVert z^{T}{j} \rVert} $$

손실은 대각선을 정답으로 두는 교차 엔트로피다. 이미지 기준 손실은 이렇게 쓴다.

$$ \mathcal{L}{I} = -\frac{1}{N} \sum{i=1}^{N} \log \frac{\exp(s_{ii} / \tau)}{\sum_{j=1}^{N} \exp(s_{ij} / \tau)} $$

텍스트 기준 손실은 합의 방향만 바꾼 것이고, 최종 손실은 둘의 평균이다.

$$ \mathcal{L} = \frac{\mathcal{L}{I} + \mathcal{L}{T}}{2} $$

강의 의사코드에서도 딱 이 구조였다. cross_entropy_loss(logits, labels, axis=0)axis=1을 각각 구해서 2로 나눈다. 양방향으로 거는 이유는 간단하다. 한쪽만 걸면 “이 사진에 맞는 문장 고르기”만 잘하고 “이 문장에 맞는 사진 고르기”는 못하게 된다.

4-1. 온도 파라미터가 하는 일

softmax는 점수 묶음을 확률로 바꾸는 함수다. 그런데 나누는 값 τ(온도)에 따라 결과 모양이 꽤 달라진다.

τ 분포 모양 학습에서의 뜻
작다 (0.01) 뾰족하다. 1등이 거의 전부를 가져감 오답에 아주 민감. 조금만 헷갈려도 손실이 크게 튄다
크다 (1.0) 평평하다. 다 비슷비슷 무르게 학습. 정답·오답 구분이 흐려진다

이 τ는 17편에서 이미 만난 값이다. 그때는 디코딩할 때 다음 토큰 분포를 뾰족하게(보수적으로) 또는 평평하게(창의적으로) 만드는 손잡이였다. 수식은 같고 놓이는 자리만 다르다.

  17편 — 디코딩 온도 26편 — 대조 학습 온도
언제 쓰나 학습 다 끝난 뒤, 생성할 때 학습 중, 손실을 계산할 때
누가 정하나 사람이 API 파라미터로 모델이 학습으로
조절 대상 답변의 다양성 오답에 얼마나 민감할지

CLIP은 이 τ를 고정값으로 두지 않고 학습 가능한 파라미터로 뒀다. 사람이 감으로 고르는 대신 모델이 알아서 조절하게 한 것이다. 25편에서 학습률 하나 고르느라 그렇게 고생했던 걸 생각하면, 이 선택은 꽤 얄밉게 영리하다.

대조 학습은 정답을 알려주는 학습이 아니라 순위를 맞추는 학습이다. “이 사진의 설명은 무엇인가”가 아니라 “이 다섯 개 중 어느 게 이 사진의 설명인가”를 푼다.


5. 제로샷 분류 — 분류기를 문장으로 만든다

학습이 끝나면 바로 써먹을 수 있는 응용이 있다. 강의에서 “간단 응용”으로 부른 제로샷 이미지 인식기다.

순서는 이렇다.

  1. 구분하고 싶은 카테고리 이름을 텍스트 목록으로 준비한다
  2. 목록을 텍스트 인코더에 넣어 임베딩으로 바꾸고 Vector DB에 넣어둔다
  3. 분류할 이미지를 이미지 인코더에 넣는다
  4. 이미지 벡터와 후보 벡터들을 비교해 가장 점수 높은 카테고리를 반환한다

제로샷 분류 파이프라인

여기서 학습은 한 번도 일어나지 않는다. 모델은 그대로 두고 후보 목록만 바꾸면 다른 분류기가 된다. 개·고양이 분류기를 쓰다가 “젖은 도로/마른 도로” 분류기가 필요해지면, 그 두 문장을 넣으면 그만이다. 22편의 CNN 분류기가 새 클래스 하나 추가하려면 마지막 층을 갈아엎고 다시 학습해야 했던 것과 비교하면 차이가 꽤 크다.

강의에서 생각해볼 거리로 세 가지를 던졌는데, 셋 다 답이 어느 정도 보인다.

질문 내 나름의 답
검색 시스템과의 유사성은? 사실상 같다. 질의 벡터 하나와 후보 벡터 여러 개의 거리 비교. 검색은 상위 k개를 주고, 분류는 1개만 준다
카테고리 이외에 뭐가 가능할까? 문장이면 뭐든 후보가 된다. “사람이 넘어져 있는 장면” 같은 상황 설명, 이상 탐지, 이미지 검색
카테고리가 정말 많으면? 텍스트 임베딩은 미리 계산해 캐시하고, 비교는 근사 최근접 탐색(ANN)으로 넘긴다

단점도 있다

  • 후보 문장을 어떻게 쓰느냐에 성능이 흔들린다. dog보다 a photo of a dog가 잘 나오는 식이라, 프롬프트를 손봐야 한다
  • 세밀한 구분은 약하다. 품종 구분이나 개수 세기처럼 정밀한 문제는 전용 모델보다 떨어진다
  • 학습 데이터가 웹이라 편향이 그대로 들어온다. 웹에서 흔한 설명이 곧 모델의 상식이 된다

정리

  • 파운데이션 모델 = 대규모 데이터로 사전학습해두고 여러 문제에 적응시켜 쓰는 기반 모델. 특징은 대규모·적응성·범용성
  • 개발이 사전학습(큰 기관의 몫)과 적응 활용(내 몫)으로 갈린다. 적응은 Zero-shot / Few-shot / Fine-tuning
  • 언어모델의 사고력만으로는 현실을 다 못 다룬다 → LLM에 눈을 달자가 시각언어모델의 출발점
  • CLIP은 웹에서 모은 이미지-텍스트 쌍 4억 개로 학습한다. 텍스트 인코더는 Transformer, 이미지 인코더는 ViT
  • 임베딩 공간 정합 = 뜻이 같은 사진과 문장이 같은 좌표계에서 가까운 자리에 놓이도록 두 인코더를 함께 학습시키는 것
  • 대조 학습은 배치 N개로 N×N 유사도 표를 만들고 대각선을 정답으로 삼는다. 손실은 행·열 양방향의 평균
  • 온도 τ는 softmax 분포를 뾰족하게/평평하게 만든다. CLIP은 이걸 학습 가능한 파라미터로 뒀다
  • 제로샷 분류는 후보 이름을 문장으로 바꿔 임베딩하고 유사도 1등을 고르는 것. 학습 없이 후보 목록만 갈아끼우면 새 분류기가 된다
  • 겹치는 글 — 정의·규모의 법칙·창발성은 15편, GAN부터 CLIP까지의 큰 흐름은 21편, 온도 파라미터의 다른 쓰임은 17편

참고 자료

한줄 평

  • 임베딩 공간 정합이라는 말이 계속 걸렸는데, 결국 두 종류의 데이터를 같은 자로 재게 만드는 것이라 정리하고 나니 내용이 쉽게 이해됬다