Title Year Data/Exp Summary
CLIP 기존 분류 모델을 학습시키려면, 정해진 Label에 대해서 0,1로 이루어진 행렬을 만들어서 학습시키는데, 이를 one-hot encoding 이라고 합니다.
이를 활용하면 기존에 없던 label이 들어올 경우, 분류를 제대로 하지 못하는 문제점이 발생합니다.
이 때**, Label 대신 텍스트를 통해서 더 광범위한 시각적 개념을** 학습할 수 있는데요, CLIP은 인터넷에서 얻은 대규모 데이터셋을 이용하여**, 이미지와 연관된 caption으로 pre-training을 진행합니**다.
또한 자연어 지시문(reference)을 주면 zero-shot으로 모델을 downstream task에 적용할 수 있습니다.
Flamingo Flamingo는 Input Prompt를 입력으로 받아 Completion을 출력으로 내는 모델인데요
또 기존 Vision Model은 Image 만을 입력으로 받아 Label, Text 를 출력으로 낼 수 있었죠. 하지만 지금까지 Image와 Text를 모두 입력으로 받아 그에 해당하는 Text를 출력할 수 있는 모델은 없었습니다. Flamingo는 이를 가능하게 한 것이죠.

필연적으로 Image와 Text Feature의 차원을 동일하게 맞춰주어야 합니다. 이를 위해 사용하는 모듈이 Percervier입니다.

Image Features를 Perceiver라는 모듈을 사용해 Text Feature와 동일한 저차원 벡터로 변환해줍니다

Vision Feature 압축하기 Learned Latent Vector는 Query로, Vision Feature를 Key,Value로 하여 Cross Attention을 수행하는거죠. 그럼 최종적으로는 최종 Target Task를 학습하기에 가장 적합한 형태의 Vision Feature가 나오게 되는데요, 이때의 차원은 Learned Latent Vector와 동일한 차원을 갖게 되는것이죠

Vision & Language 정보 연산하기 Query 로는 Text Feature를 사용해줍니다. 여기에 Vision 정보를 추가해주는 것이죠. 그래서 Key, Value로는 Vision Feature를 사용해줍니다 | | U-net | 2015 | CNN과 달리 Fully Connected Layer 및 Padding을 쓰지 않는다.

sliding window 방식 대신 patch 방식 사용

Data augmentation 사용

Segmentation map의 크기는 input image 크기보다 작다. | Segmentation을 위한 구조 각 픽셀마다 각 클래스로 분류 (배경=0, 사람=1)를 통해 한 장의 segmentation map을 만든다. 특징 추출을 위한 Contracting path, 정확한 localization을 위한 expanding path

Architecture: Contracting path 3 x 3 convolution ReLu stride =2 , 2 x 2 max pooling (input tile size x, y가 짝수가 되게 만들어야됨) Down sampling 단계마다 feature channel 2배로 늘림 (64 —>128 —>256)

Expanding path: Upsampling과 채널 수를 반대로 절반으로 줄이는 과정 Upsampling은 주로 interpolation(확장 후 중간 값으로 메꿈) + deconvolution (파라미터를 이용해 확장, 겹치는 영역은 더한다) + localization을 잘 수행하기 위해 contracting path 에서의 feature map을 crop하여 더함

마지막 레이어에서는 FCL 가 아닌 Fully Convolution layer 1x1 convolution을 사용하여 각 64개 component 특징 벡터를 원하는 label class로 매핑한다

. | | BLIP2 | | Captions Dataset

Pretrained Vision model: ViT-L/14, Vit-g/14

실험은 3가지 Task: Visual Question Answering Image Captioning Image-Text Retrieval

| 기존 VL 모델: Frozen, Flamingo = Vision model, Language model Frozen 시켜놓고 두 모델의 Representations를 Align 하는 방식!

BLIP2는 Q-former라는 Vision-Language Alignment 모델을 학습 (LM이 이해할 수 있는 유의미한 Visual Features를 추출) Q-former는 Learnable Query Vector Set과 가벼운 Transformer로 구성되어 있다

cross attention: key, value를 같은 값을 사용하지만 query는 다른값을 사용 (query ≠ key = value) —> 트랜스포머 디코더에서 사용하는 어텐션 연산 self attention: query, key, value 같은 값 사용 —> 트랜스포머 인코더에서 사용하는 어텐션

self attention is for learnable query, input text cross attention is for learnable queries and frozen image features

Q-former는 Image Transformer, Text Transformer로 구성 Image Transformer: Learnable Query Vector Set을 입력으로 받아 Self-Attention Layer에 Feed하고, Cross-Attention Layer를 통해 Image Features를 Attend Text Transformer: Text 입력을 받아 Self-Attention Layer에 Feed, Text Encoder or Decoder로 모두 활용 가능

Learnable Query 란: 해변가 사진에서 “people”, “sand”, “water”, “swimming” 등 Image Query 가 이 쿼리를 사용해서 이미지의 특정 Area를 focus 및 extract features, then extracted features are sent to LLM

Q-former 학습단계는 두 단계로 구성

  1. VL Representation Learning: Image - Text 쌍을 활용 Image-Text Contrastive Learning: 동일한 쌍의 Image와 Text Representations가 유사한 값을 갖도록 학습 Image-grounded Text Generation: 주어진 Image를 기반으로 짝지어져있는 Text를 맞게 생성하도록 학습 Image-Text Matching: 주어진 Image와 Text가 Positve pair or negative pair인지 학습

  2. V-to-L Generative Learning: 주어진 이미지를 입력받아 Encoder로 만든 엠베딩을 LM에 넣어서 Text를 완성하게 학습 Decoder only 인 OPT와 Encoder-Decoder인 FlanT5 구조 2종류 사용가능

Ablation study를 통해 VL Representation learning이 성능에 크게 기여함 | | AlexNet | 2012 | | ReLU 를 사용함 Local Response Normalization: ReLU의 결과값이 너무 커져서 주변 뉴런에 영향을 주는 것을 방지하기 위한 normalization 기법으로 추후엔 Batch Normalization으로 대체됨 Overlap Pooling: 겹쳐서 pooling 연산 수행 5개의 convolution network and 3 fully connected network but there are no pooling and regulariztion in the 3,4,5th convolutional network

How to reduce overfitting: Data augmentation: horizontal reflections, change in RGB channel intensity Dropout | | GoogleNet | | | 22 layers deep network

NN은 Convolution layer, pooling , FC layer 계층들이 서로 Dense하게 연결 되어 있습니다. 이렇게 높은 관련성을 가진 노드끼리만 연결하는 방법인데, 연결을 Sparse 하게 바꾸어 연산량, 파라미트를 Computational Resource를 적게 사용하는 방법입니다. 이렇게 하면 Overfitting 또한 개선이 되는데, 이는 DNN에서 Drop out과 비슷한 방법입니다

하지만 sparse matrix 연산이 더 큰 resource를 사용하고 이를 해결하기 위해 Inception Module을 사용함

1x1 필터: 특성맵의 갯수를 줄이는 목적으로 사용됨. 특성맵의 갯수가 줄어들면 그만큼 연산량도 줄어듬 ex) 1. ( 14 x 14 x 480) 특성맵을 (5 x 5 x 480) 48개의 필터커널 —> (14 x 14 x 48) 이 생성됨 2. (14 x 14 x 480) 을 먼저 16 개의 (1 x 1 x480) 필터커널로 —> (14 x 14 x 16) 그 다음 (14 x 14 x 16)을 48개의 (5 x 5 x 16) 필터커널로 하면 —> (14 x 14 x 48) 이 생성됨 하지만 연산량은 훨씬 적음 | | ResNet | | | . |

Untitled

Untitled

Untitled

Attention 코드정리

BLIP2 코드 정리

질문

  1. cross-attention layer inserted every other transformer block의 의미?

    1. bert에서 트랜스포머 층 자체가 여러 겹으로 되어있다. (self-attention, cross attention, feed forward ) x n 개
  2. q-former training은 그냥 torch.optimizer를 이용해서?

    1. 맞음. itm, itc, lm loss 를 optimize
  3. 그리고 ITG에서 Qformer를 통과시킬때는 image_emb가 따로 input으로 들어가진 않는 것 같은데 앞의 과정에서 이미 image data들이 bert 모델에 들어가 있어서 decoder_input_id를 통해 이미지 정보를 사용하는 것 인가요? lm_output = self.Qformer( decoder_input_ids, attention_mask=attention_mask, past_key_values=query_output.past_key_values, return_dict=True, labels=labels, )

    1. BERT에 image data가 들어가 있는 것이 아니라 BERT를 지난 query_output이 query_input과 image가 cross-attention 되서 나온 결과이기 때문에 query_output 내에 image정보가 들어가있다.
  4. 학습 시에 pretrained 된 BERT 모델의 파라미터가 업데이트 되는 것인지 아님 다른 부분에서의 파라미터가 업데이트 되는 것 인지 궁금합니다. 아 혹시 주요하게 학습되어서 바뀌는 부분이 item 에 따른 ID 및 representation을 나타내는 item embedding vector들 일까요?

    1. 파라미터 업데이트는 pretrained 된 BERT 모델과 Input Learnable Query의 parameter가 업데이트 된다. 하지만 item embedding의 경우는 BLIP에서도 pretrained image encoder를 학습 없이 진행하고자 하니 image embedding을 업데이트하지 않는 것처럼 pretrained recommender에 있는 item embedding도 업데이트하지 않는다.
    2. the model updates the weights associated with the learnable queries to improve their ability to capture relevant visual information for the caption generation task.
  5. Second stage vision-to-language generative pre-training에서 boostrap from frozen LLM에 의미가 헷갈리는 것 같습니다. 본 논문에서는 "pre-train with the prefix language modeling loss"라고 나와있는데 여기서 "pre-train" 의 의미는 LLM 파라미터가 바뀌는 "train"의 의미랑 다른 의미인가요? Frozen LLM을 연결하는데 추가적으로 prefix, suffix를 이용해 "학습"시킨다는 의미를 잘 모르겠습니다 ㅜ.

    1. second stage에서 loss는 그냥 query output과 LLM input dimension간의 dimension을 맞춰주기 위한 projection layer 를 학습시키는 것.
  6. 사수님 모델에선 주로 second stage 보다 first stage pre training q-former 구조를 착안하신 것 인지 궁금합니다. q-former에서 사용되는 image_embeds 대신 user/item_embeds를 이용하신 것 이라고 이해하면 될까요?

    1. q-former를 사용하려고 했지만 잘 안되서 recommender 상황에서의 input prompt가 item embedding과 직접적으로 잘 interact하게 하는게 목표. 마치 q-former에서 input text가 cross attention으로 image embedding과 잘 interact 한 것 처럼.
  7. 마지막으로 Q-former에 대한 내용은 아닌데 zero shot learning에 관해 질문이 있습니다. BLIP2 논문에서는 만리장성 그림을 처음 봄에도 불구하고 만리장성에 대한 text를 도출하였는데 이는 만리장성 이미지를 학습시키진 않았지만 Frozen LLM에 만리장성에 대한 정보가 내재되어 있어서 맞출 수 있었던 것 인가요?

    1. 아마 ViT 모델 자체가 많은 image를 학습하였고 LLM도 만리장성을 포함한 많은 text를 학습해서 가능할 것.
  8. LLaRA에서는 user/item 이외에 description 에 해당하는 text token들은 "This", "user", "has", "watched" 와 같이 그대로 hard prompt에 들어가는 것 같은데 CoLLM에서는 text token도 user/itemID token과 함께 embedding lookup을 통해 d2 dimension의 token embedding으로 입력 된다고 표현되어 있습니다. 그럼 LLaRA는 prompt가 hard +soft로 구성되어 있고 CoLLM prompt는 모두 soft prompting 방식으로 입력된다고 이해하는게 맞을까요?

    1. LLaRA 와 CoLLM 둘다 hard + soft prompt 로 이루어져있습니다. Language model 이 돌아가는 것 자체가, "This", "user", "has" 등 과같은 tokenized 된 단어를 embedding lookup 을 사용하여 text embedding 으로 변환해서 사용합니다. 즉, hard prompt 는 LM/LLM 이 가지고 있는 pretrained 된 token embedding 을 사용하는 것이고, soft prompt 는 tuning 가능한 (어떤 방식으로든 만들어낸) 새로운 token embedding 이라고 보면 됩니다.
  9. 혹시 두 방식이 다른게 맞다면 사수님은 어떤 방식을 사용하셨는지 궁금합니다!

    1. 그래서 사수님것도 soft+hard prompt