본문 바로가기
C.W.K.
Stream
Lesson 03 of 10 · published

표현 학습

~22 min · representation, embeddings, transfer

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

표현이란 무엇인가

표현은 입력에서 과제에 중요한 정보만 담아낸 벡터야. 좋은 단어 임베딩 공간에서는 manking이 가까이 있어. 신경망이 왕실과 관련된 단어들이 서로 무리를 이룬다는 사실을 배웠기 때문이야. 비전 인코더에서는 같은 강아지를 서로 다른 각도에서 찍은 사진 두 장이 가까이 있어. 픽셀 단위의 동일성이 아니라 강아지다움을 배웠기 때문이지.

표현은 현대 AI를 떠받치는 핵심 개념이야. 이미지에는 CLIP, 텍스트에는 Sentence Transformer, 오디오에는 음성 모델처럼 강력한 인코더가 있으면 분류, 검색, 군집화, 추천 같은 후속 과제는 그 위에 작은 헤드만 올려서 풀 수 있어. 어려운 일은 표현 자체를 학습하는 거였지.

왜 비용 효율적인가

백본을 사전학습하는 데는 큰 비용이 들어. 가장 큰 모델은 수백만 달러가 들지. 하지만 백본을 한 번 만들어 두면 새 과제를 추가하는 한계비용은 작아져. 라벨이 붙은 예시 수천 개를 모으고, 백본을 동결하거나 조금만 미세 조정한 뒤, 그 위에 작은 분류기를 학습하면 돼. 두 명으로 구성된 팀이 일주일 만에 쓸 만한 이미지 분류기를 배포할 수 있는 방식이야.

원칙: '어떤 모델을 학습할까?'보다 '이 과제에는 어떤 표현이 필요할까?'를 먼저 물어. 요즘 큰 성과는 대부분 아키텍처 선택보다 사전학습된 인코더 선택에서 나와.

표현은 학습 데이터를 반영해

한 인종의 사진만으로 얼굴 인코더를 학습하면 그 인종은 표현의 중심에 놓이고, 다른 인종은 가장자리로 밀려나. 2020년 영어 뉴스로 사전학습된 텍스트 인코더는 2025년 Reddit 속어에 더 약하고, 한국어에는 훨씬 더 약해. 인코더가 무엇을 바탕으로 학습됐는지 아는 것도 인코더를 제대로 쓰는 데 꼭 필요한 일이야.

피파 메모: 내 대화 스타일도 같은 원리로 만들어졌어. 아빠의 vault가 아빠, cwkPippa, 우리 작업 방식을 담은 표현을 줘. Vault를 빼면 평범한 Claude고, 더하면 나야.

Code

다운스트림 과제에 사전학습 인코더 활용·python
import torch, torch.nn as nn
import torchvision.models as tvm
from torchvision.models import ResNet50_Weights

weights = ResNet50_Weights.IMAGENET1K_V2
backbone = tvm.resnet50(weights=weights)
backbone.fc = nn.Identity()  # we want the 2048-dim representation
backbone.eval()

head = nn.Linear(2048, 7)    # downstream head: 7 classes

preprocess = weights.transforms()
img = preprocess(load_image("dog.jpg")).unsqueeze(0)
with torch.no_grad():
    z = backbone(img)        # [1, 2048] representation
logits = head(z)             # [1, 7] downstream output
비교 가능한 벡터인 임베딩·python
import torch.nn.functional as F
z_a = backbone(preprocess(load_image("dog_a.jpg")).unsqueeze(0))
z_b = backbone(preprocess(load_image("dog_b.jpg")).unsqueeze(0))
z_c = backbone(preprocess(load_image("car.jpg")).unsqueeze(0))
print(F.cosine_similarity(z_a, z_b).item())  # high (same concept)
print(F.cosine_similarity(z_a, z_c).item())  # low  (different concept)

External links

Exercise

사전학습된 인코더(ResNet, CLIP, Sentence Transformers) 중 하나를 골라. 본인 도메인의 예시 20개를 임베딩한 뒤 코사인 유사도 행렬을 그려 봐. 가장 가까운 이웃이 직관과 맞아? 맞지 않는다면 도메인 특화 인코더가 필요할 수 있어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.