본문 바로가기

AI상식 w.GPT

SigLIP 리뷰

알아야하는것만 알고가자. 

https://taewan2002.medium.com/siglip-sigmoid-loss-for-language-image-pre-training-aa68fedaa080

 

SigLIP: Sigmoid Loss for Language Image Pre-Training

SigLIP는 비대칭적이지 않으며 전역 정규화 인자도 필요하지 않습니다. SigLIP는 시그모이드 연산을 사용하고 각 이미지-텍스트 쌍(양수 또는 음수)은 독립적으로 평가됩니다. 따라서 모든 GPU가 모

taewan2002.medium.com

 

 

CLIP의 loss를 softmax->sigmoid로 바꾼게 SigLIP이다.  

이때, 학습시 같은 능력치 도달하는데 획기적으로 시간이 줄었다고 한다. 

   CLIP: requires approximately 5 and 10 days, respectively on 256 TPUv3 cores

   SigLIP: training reaches 73.4% zero-shot accuracy in 5 days with 32 TPUv4 chips.

 

Contrastive Learning은 큰 배치사이즈가 필요-> GPU도 많이 필요 -> GPU간 통신 -> Bottleneck

 

왜 배치가 커야하나? 

더보기

CL은 많은 샘플 쌍에서 올바른 쌍과 잘못된 쌍을 비교하여 학습하는 방법입니다. 배치 크기가 클수록 더 많은 비교를 할 수 있어, 손실 함수가 더 풍부한 정보를 바탕으로 gradient를 계산할 수 있습니다. CLIP에서는 softmax 함수를 사용하여 이미지와 텍스트 쌍 간의 유사도를 확률로 변환합니다. 이때 큰 배치 크기는 softmax 계산의 분모를 크게 만들어, 각 샘플 간의 유사도 차이를 더 명확하게 구분할 수 있습니다.

 

따라서 CLIP의 배치 크기 요구 사항을 줄이기 위한 방법인 SigLIP이 제안됐습니다.

 

원래 CLIP코드는 아래와 같다. 

 

 

이때, softmax를 쓰는 cross_entropy_loss 가 비효율적임

왜 비효율적이냐? 아래 gpt 답변을 참고하자. 

 

InfoNCE:https://junia3.github.io/blog/InfoNCEpaper

더보기

1. 계산 비용이 높음

(a) 전체 샘플 간 관계를 계산해야 함

  • softmax는 입력값(로짓)을 확률로 변환하기 위해 **모든 클래스(또는 쌍)**의 유사도를 계산한 뒤, 이를 정규화합니다.
  • OpenCLIP의 경우, 이미지와 텍스트 간의 모든 쌍에 대해 유사도를 계산해야 하므로, 배치 크기가 N일 때 N x N 크기의 유사도 행렬(logits)을 처리해야 합니다.
    • 유사도 계산(dot product): O(N2×d)O(N^2 \times d) (d는 임베딩 차원)
    • 소프트맥스 계산: O(N2)O(N^2)
    이는 대규모 배치나 데이터셋에서 계산 비용을 급격히 증가시킵니다.
  • 계산 복잡도:

(b) Softmax의 분모 계산

  • 소프트맥스의 분모는 모든 로짓의 지수 합 (∑exp⁡(logits)\sum \exp(\text{logits}))으로 계산됩니다. 이 과정에서 모든 샘플 간의 유사도를 합산해야 하므로, 큰 행렬을 반복적으로 연산해야 합니다.

2. 메모리 사용량이 큼

  • logits는 배치 크기가 NN일 때 N×NN \times N 크기의 행렬입니다.
    • 대규모 배치에서는 메모리 사용량이 급격히 증가하여 GPU 메모리에 부담을 줍니다.
    • 예: 배치 크기 N=10,000N = 10,000이면 10,000×10,000=100,000,00010,000 \times 10,000 = 100,000,000개의 요소를 저장해야 합니다.
  • 특히 고해상도 이미지를 처리하거나 큰 임베딩 차원을 사용할 때, 메모리 문제가 심각해질 수 있습니다.

3. 샘플 관계의 비효율적인 사용

(a) 양성-음성 비율이 매우 불균형

  • 대부분의 경우, 하나의 이미지는 특정 텍스트와만 연결되고 나머지 N−1N-1개의 텍스트는 음성(negative)입니다.
  • 하지만, softmax cross-entropy loss는 모든 NN개의 텍스트를 고려하므로, 음성 샘플이 지나치게 많아 양성 신호가 희석됩니다.

(b) 음성 샘플에 대한 중요도 낮음

  • 소프트맥스는 모든 음성 샘플을 비교하지만, 실제로는 상위 몇 개의 음성 샘플(가장 유사한 음성)만이 학습에 중요한 역할을 합니다.
  • 나머지 음성 샘플은 학습에 기여하지 못하고, 오히려 계산만 낭비됩니다.

4. 샘플 간 독립성을 무시

softmax cross-entropy loss는 각 샘플 간의 관계를 직접적으로 학습하지 않습니다.

  • 예를 들어, 이미지 A와 텍스트 B가 양성 관계라면, 텍스트 B와 다른 이미지 C의 관계도 약간은 학습될 수 있지만, 이런 간접적 관계를 충분히 반영하지 못합니다.

해결 방법: 대안적인 접근법

(a) 대체 손실 함수

  • InfoNCE Loss: 양성 샘플의 점수와 음성 샘플의 점수를 비교하여 직접적인 대조 학습(contrastive learning)을 수행합니다.
  • Triplet Loss: 앵커(anchor), 양성(positive), 음성(negative)의 관계를 삼중항으로 학습합니다.

(b) 효율적인 샘플링

  • Hard Negative Mining: 학습에 중요한 "hard negatives" (양성에 가까운 음성 샘플)만 선택하여 효율성을 높입니다.
  • In-batch Negative Sampling: 배치 내의 음성 샘플만을 활용하여 연산량을 줄입니다.

(c) 효율적인 소프트맥스

  • Hierarchical Softmax: 클래스가 많은 경우, 계층적 구조를 사용해 계산량을 줄이는 방법.
  • Approximate Softmax: 정확도를 조금 희생하고, 일부 샘플에 대해 근사 확률 분포를 계산.

결론

softmax cross-entropy loss는 모든 샘플 간의 관계를 정밀하게 계산하지만, 계산 비용과 메모리 사용량이 크고, 양성-음성 불균형으로 인해 학습 효율이 떨어질 수 있습니다. 대체 손실 함수와 효율적인 샘플링 기법이 이러한 비효율성을 완화하는 데 도움을 줄 수 있습니다.

 

softmax와 비슷하게 생긴 sigmoid loss를 쓰면 효율적이다.

 

softmax function

 

 

** img_emb 나 txt_emb 노멀라이제이션은 그 이미지(객체)의 단위 벡터를 의미한다고 볼수 있다. 

 

- 단위 벡터 끼리의 내적은 유사도를 의미한다 (각 단위 벡터 사이의 각도에 따라, 두 벡터의 방향이 같으면 최대 1, 방향이 다르면 최소 -1, cos 값이니까~ ) 

 

- cos simliarity 

임베딩 두개에 대해서 l2 norm -> 내적 을 하는게, == cos similarity의 정의 이다.