Blackeyes0u0 / CLIP-PEFT

#CLIP #VQA #Embeddings

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Vector Universe


GitHub 로고

JoongHyun Shin


#CLIP #LoRA #Embeddings #Youtube Multimodal

Demo

huggingface space에 데모 버전을 올려놓았습니다.

Alt text

1. Datasets & DataLoader

youtube thumbnails data

$I^{(i)}$ : youtube thumbnail Image data $i$ $T^{(i)}$ : youtube Title data $i$


2. Model & Loss Architecture

Alt text

위 모델 아키텍쳐를 보면 Latent space 상에서 이미지 임베딩과 텍스트 임베딩의 거리를 가깝게 하는것을 alignment, 멀게하는것을 Uniform라고 정의하였습니다.


3. Objective function

$$ h_i = f(x_i) $$

$$ \mathcal{L_i} = - \log \frac{e^{sim(h_i,h_i^+) / \tau}}{\sum_je^{sim(h_i,h_j)/ \tau}} $$

$i$ 번째 데이터와 $N$개의 batch_size pair 대해서 위와 같이 표현 할 수있다.

$h_i$는 데이터의 임베딩에 해당하고, $z_i$는 각 데이터에 가한 augmentation에 해당한다. $\tau$는 하이퍼파라미터 temperature값이다.

$$ \mathcal{L} = \sum_{i=1}^{N} log \exp^ {-\frac{1}{\tau} sim(h_i,h_i^+)} (Alignment) $$

$$ +\sum_{i=1}^{N} log \sum_{j=1 }^{N} \exp^{\frac{1}{\tau} sim(h_i,h_j)} (Uniform) $$

여기서 나오는 sim은 similarity의 약자이고, cosine similarity를 사용하였습니다.

Notation

i번째 image embedding : $I_i$ 는 row vector

i번째 text embedding : $T_i$

(단, $I_i,T_j,I_i^+,T_j^+$는 1로 normalize)

코드 상에서는 cosine similarity를 사용해서 normalize하였습니다.

$$ I_i = \mathbb M(batchsize,d=512)[i] $$

Image Text Alignment & Uniform

$$ alignment = -\sum_i tr(II^{+T}+I T^T+ I^+ T^{+T}+TT^{+T}) $$

먼저 위 Object function에서 Uniform식이 아래와 같이 되기 위해서는 convex function라고 가정하고, jensen's inequality를 사용한 결과입니다.

땨라서 $F(E[x]) \leq E[f(x)]$가 됩니다.

$$ Uniform \leq \sum_i \sum_{j } \log \exp ( I_i \cdot T_j^T + \cdots )\\ = sum(II^{+T}+I T^T+ I^+ T^{+T}+TT^{+T}) $$

오른쪽 term이 uniform의 upper bound가 됩니다.

위 식을 분산과 평균 관점에서 다시 바라보았습니다. $I_i$가 한개의 임베딩 값이라고 하고, 이 값들은 각 평균과 분산을 갖는다고 하면, 적절한 임베딩은 어느 한 차원으로 쏠리지 않고 적절하게 분산되어서 표현되는것 입니다.

이것에 대한 솔루션으로는 PCA whitening과 batch normalization이가 생각이 납니다. 무엇을 사용해야할지는 알기 위해 수식을 전개해 보았습니다.

$$ I_i = \mu +\sigma_i \\ \mu = \frac{1}{N}\sum_{i \in \chi}^N I_i\\ \therefore \frac{1}{N}\sum_{i \in \chi}^N \sigma_i = 0 $$

$I$만 생각해보면,

$$ sum(I I^T) = \frac{1}{N^2}\sum_{i \in \chi}^N \sum_{j \in \chi}^N I_i \cdot I_j^T $$

$$ = \frac{1}{N^2}\sum_{i \in \chi}^N \sum_{j \in \chi }^N (\mu +\sigma_i ) \cdot (\mu +\sigma_j )^T $$

$$ =\mu \mu^T + \frac{1}{N^2}\sum_{i \in \chi }^N \sum_{j \in \chi}^N \sigma_i \cdot \sigma_j^T $$

가 되어서 뜻을 해석해보면 임베딩의 평균값을 낮추고, 분산의 곱을 낮추는 식이다. 또한, 위 식은 symmetric matrix이기 때문에 항상 diagonalizable하고, 그 eigen vector는 orthogonal 합니다.

그러한 경우를 eigen decompositoin해서 생각해보자. $A=I \cdot I^T$라고 할때, $A$$A P_i = \lambda_i P_i$라고 생각해보자. 이때 $P_i$$\lambda_i$에 대한 eigen vector입니다.

$$ A = P DP^T $$

이때, $PP^T = E$ 즉, orthogonal하므로,

$$ A = \sum_i \lambda_i P_i \cdot P_i^T $$

$\lambda_i$의 어느 한값이 크다는 것은 데이터가 골고루 퍼져있기보단, 한 방향으로 치우쳐져있는것이다. 따라서 위 eigen value값을 골고루 만드느것이 여기서 나온 Uniform의 목적입니다.

Flatten Embedding

위 목적을 이루기 위해서 어떻게 해야할까요??

만약에 $I_i$가 normalize 되어있다고 한다면, $tr(A)$의 값은 sum of eigen value이고, constant할것이다. 왜냐하면 diagonal element가 모두 1이기 때문에. 그렇다면 largest eigen value의 값을 줄이고, smallest한 eigen value의 값을 키우면 됩니다.

만약에 , A의 값들이 모두 양수이고, $sum(P_i \cdot P_i^T)$가 양수라면 sum($A$)를 largest eigen value의 upper bound와 비례한다고 놓을 수 있다. 그래서 위 sum을 줄이는것이, flatten embedding을 하면서 negative pair끼리의 임베딩을 할 수 있습니다.

SimCSE 논문의 아이디어를 인용하였습니다. https://arxiv.org/abs/2104.08821

SimCSE 논문리뷰


Flatten different Embeddings

하지만 나는 그렇게 조건을 줄 수 없기에, 다른 방식을 생각해야 했습니다. 이유, 다른 임베딩끼리의 표현이기 때문에..

그래서 위처럼 negative pair loss와 Uniform를 하나의 식으로 보지않고, 따로 볼 생각입니다. 이제 I와 T에 대해서 생각해 봅시다.

negative pair loss

$$ \frac{1}{N^2}\sum_{i \in \chi }^N \sum_{j \in \Chi}^N I_i \cdot T_j^T $$

$$ = \frac{1}{N^2}\sum_{i \in \chi}^N \sum_{j \in \Chi}^N (\mu^{(Image)} +\sigma_i^{(Image)} ) \cdot (\mu^{(Text)} +\sigma_j^{(Text)} )^T $$

$$ =\mu^{(Image)} \mu^{(Text)T} + \frac{1}{N^2}\sum_{i \in \chi}^N \sum_{j \in \Chi}^N \sigma_i \cdot \sigma_j^T $$

직관적인 의미를 보자면, 이미지와 텍스트의 평균 값을 줄이고, 각 이미지와 텍스트 임베딩의 서로 다른 분산 임베딩을 줄이는 것입니다. 먼저 이걸로, negative pair끼리의 dot product값을 줄여, cosine similarity를 줄일 수 있습니다.


Installation

pip install transformers
pip install peft
pip install loralib
pip install wandb

file

/VectorUniverse Project X
├── README.md
├── Data
|  ├── VQA
|  └── Youtube_thumbnails
|       ├── images
|       └── metadata.csv
|
├── node_modules
|  ├── bluebird
|  ├── chalk
|  ├── cli-spinner
|  ├── meow
|  └── object-assign
├── package.json
└── tree.js

About

#CLIP #VQA #Embeddings


Languages

Language:Jupyter Notebook 99.6%Language:Python 0.4%