강의 / 우리는 모두 같은 AI를 쓰고 있다 / 3강
시작 …
구조도 목적도 다루는 자료도 다른 모델들이 데이터 사이의 거리를 점점 비슷하게 재고 있다는 주장입니다.
1강과 2강이 눈에 보이는 현상이었다면, 이번 편부터는 그 안쪽입니다.
논문의 주장은 세 가지입니다.
포지션 페이퍼입니다. 새 방법을 제안하는 논문이 아니라 관점을 내놓고 증거를 모아 놓은 글이라는 점을 염두에 두고 읽으시면 됩니다.
모델 두 개에 같은 고양이 사진을 넣습니다. 나오는 벡터의 숫자는 완전히 다릅니다. 차원 수부터 다를 수 있습니다.
그런데 이 사진의 이웃을 물어보면 두 모델이 비슷한 답을 내놓습니다. 다른 고양이 사진, 털 있는 동물, 비슷한 자세의 사진이 앞자리에 옵니다.
숫자는 달라도 이웃은 같습니다. 이것이 논문이 말하는 수렴입니다. 가중치가 닮는 것이 아니라 거리를 재는 방식이 닮는 것입니다.
세 용어를 정리하고 넘어가겠습니다.
| 용어 | 뜻 |
|---|---|
| 표현 | 모델이 데이터를 담는 벡터 공간 |
| 커널 | 데이터 쌍 사이의 유사도를 모은 표 |
| 정렬 | 두 모델의 커널이 얼마나 닮았는지 |
정렬은 가중치끼리 비교하는 것이 아닙니다. 커널 사이에서 잽니다. 모델 구조가 완전히 달라도 비교할 수 있는 이유가 여기 있습니다.
# 상호 최근접 이웃으로 두 모델의 정렬을 잽니다.
# 데이터 하나에 대해 양쪽 모델에서 이웃 k 개를 뽑고
# 그 교집합의 크기를 봅니다.
import numpy as np
def knn(emb: np.ndarray, k: int) -> np.ndarray:
norm = emb / np.linalg.norm(emb, axis=1, keepdims=True)
sim = norm @ norm.T
np.fill_diagonal(sim, -np.inf) # 자기 자신은 제외합니다
return np.argsort(-sim, axis=1)[:, :k]
def alignment(a: np.ndarray, b: np.ndarray, k: int = 10) -> float:
ka, kb = knn(a, k), knn(b, k)
hits = [len(set(ka[i]) & set(kb[i])) for i in range(len(a))]
return float(np.mean(hits)) / k
# 논문 기준: 이웃 수 10개, Places-365 이미지 1,000장비전 모델 78개를 VTAB 19개 과제 기준으로 묶었을 때 정렬이 약 0.04에서 약 0.40까지 올라갑니다.
논문은 세 가지 압력을 듭니다.
세 가지가 겹치면 서로 다른 출발점에서 시작해도 비슷한 곳에 닿습니다.
로그인하시면 댓글을 쓰실 수 있습니다.
아직 댓글이 없습니다. 첫 댓글을 남겨 주시면 됩니다.