Visual Question Answering(VQA) Task에 관심이 생겨 현재 SOTA 모델인 BEiT-3을 찾아보았다.
BEiT v1, v2도 읽어볼 예정
크게 3가지에 집중할 예정이다.
1. Backbone architecture
2. Pretraining task
3. Model scaling up
이 3가지를 하기 위해서 Multiway Transformer
논문에서 제시한다.
이미지를 하나의 언어로 보고 ('Imglish'
), image-text pair에 마스크를 씌우는 학습방법을 활용하였다.
이렇게 했더니, 여러 데이터셋에서 Vision-Language multi-modal task 뿐만 아니라, Vision 단일 task에서도 좋은 성능을 보였다.
Abstract에서 제시한 3가지를 어떻게 할 것이냐
Vision-Language 모델링에 있어 다양한 방법들이 존재한다.
이런 모델들 대부분은 특정 task를 하기 위한 변형을 끝단에 붙여줘야 한다. 게다가 여러 modality에 parameter들이 효과적으로 공유되지 않는데,
Multiway Transformer
로 점들을 개선한다.
Pretraining 할 때 task마다 다른 기법으로 학습시키는데, 이건 scaling 하기에 안좋고, 비효율적이다.
General-purpose multi-modal 모델 학습으로 Mask-then-predict
이거 하나만 쓰자.
이미지도 text처럼 취급한다 했으니(Imglish
) modality는 다르지만 두 개의 문장이 들어간 것처럼 학습시켜줄 것이다.
모델 크기를 키우고, 데이터 크기를 키우는게 성능을 높이는데 보통 좋다.
이 논문에서는 private한 데이터를 쓰지 않고, 공개된 데이터만 사용해도 SOTA보다 성능이 좋음을 보였다.
그림에 있는 것 처럼, Multiway Transformer
는 각 modality 마다 shared self-attention module
, feed-forward network(FFN)
으로 구성되어 있다.
(a),(b) 를 보면 Self-attention module
위에 각 modality에 해당하는 FFN
이 올라가 있고,
(c)는 image와 text가 shared self-attention module
, FFN
을 거쳐 나온 결과를 다시 self-attention
, FFN
에 넣는데,
이렇게 하면 처음 shared self-attention
에서 다른 modality간의 alignment를 학습하는데 도움이 된다.
Vision task만, text만, multi-modal용이든 다 똑같은 구조로 이루어져 있어서 각종 downstream task에 활용하기에 좋다.
앞서 BEiT를 학습시킬 때 mask-then-predict
만 사용한다고 언급했다.
이렇게 하면 representation 뿐만 아니라 다른 modality간 alignment를 학습하는데에도 도움이 된다.
구체적으로, Text는 SentencePiece tokenizer
를 이용해서 토큰화 했고, Image는 BEiT v2에서 언급된 tokenizer를 이용했다. (찾아보자)
Text만 학습시킬땐 15%, Image-text pair로 학습할 땐 50%를 mask했다. 이미지는 40% image patch들을 BEiT논문에 등장하는 방식으로 block-wise masking 했다.(이것도 찾아보자)
각 Task마다 학습 방식이 달라지는 다른 Vision-language 모델들과의 차별점으로 똑같은 방식(mask-then-predict
)만 사용해서 pretrain 시켰고, Contrastive-based model(CLIP, CoCa 등)들 보다 더 작은 batch size로 학습시킬 수 있었다. -> GPU memory에 있어 좋다.
위의 그림에서 각 부분별 parameter수를 제시
데이터 크기 제시
학습때 사용한 hyperparameter, augmentation종류 제시
VQA v2.0 dataset
으로 finetuning해서 실험했다.
VQA를 일종의 Classification task처럼 해석하여, Trainset에 가장 자주 등장한 3129개의 대답 후보들 중 하나를 예측하도록 했다.
위 그림의 (c) Fusion Encoder
모양을 이용했고, Input으로 주어지는 Question에서 뽑은 embedding과, Image에서 뽑은 embedding을 concat하여 Multiway Transfomer
구조에 넣어 주었다.
이후 나온 output을 classifier layer에 넣어 최종 답을 예측하도록 하였다.