[Chen et al. 2020] Generative Pretraining from Pixels
2020, ICML 논문 기재
자연어처리로 유명한 OpenAIGPT를 만든 회사, OpenAI에서 쓴 논문입니다.
자연어처리에서 사용하는 GPT모델을 이미지에도 사용하였다는 신기한 내용의 논문이라서 읽어보고 리뷰해보았습니다.
'NLP의 단어들 = 이미지 픽셀' 이라고 생각하고 처리하였다고 보시면 됩니다. 자연어처리에서 단어들로 빈칸을 예측하여 채웠듯, 이미지 픽셀로 채운 것입니다.
"이미지GPT(Image GPT)"로 알려진 논문입니다.
GPT-3는 자연어처리에서 소설 쓰기, 이메일 답장, 가계부 완성, 자동 웹페이지 작성 등의 작업을 할 수 있다고 합니다.
이를 이미지에도 적용시킨 것이 재밌어서 리뷰해보았습니다.
"LanguageGPT를 ImageGPT로?"
맨 왼쪽 사진들이 model input이고, 맨 오른쪽 사진들이 오리지널 사진들,
그리고 그 사이에 있는 사진들이 모델로 생성한 재미있는 결과물들입니다.
모델 설명
모두 아시다시피 이미지는 굉장히 고차원의 데이터입니다.
이를 자연어처리 모델인 GPT에 적용하기 위해서는 Resizing을 필요로 합니다.
해당 논문에서는 224*224의 고차원 이미지 데이터를 그대로 넣으면 GPU 사이즈에 레이어가 맞지 않기 때문에
32*32, 48*48, 64*64 와 같은 lower resolution 낮은 해상도의 벡터로 이미지 resizing을 진행합니다.
언어 모델에서는 각 단어들의 토큰이, 이미지에선 이미지의 픽셀입니다.
단어들의 순서가 있듯이, 이미지 픽셀도 Raster order 혹은 Snake order와 같은 순서를 정해줍니다.
학습 방법 Train Method (Pre-training)
두 가지 train 모델을 사용하였는데, Autoregressive과 BERT모델입니다.
Autoregressive Model
AR모델은 단순한 모델로, 순차적 방향으로 학습을 진행하여, 앞의 문장들로 뒤의 문장들을 예측합니다.
'나는' -> '사람입니다' 예측과 같이 말이죠
BERT Model
BERT는 이전 리뷰를 참고하셔도 되는데,
NLP모델에서 뛰어난 성능을 보이는 모델로, 양방향적 방향으로 학습을 진행합니다.
토큰들을 무작위로 랜덤마스킹하여 학습하고, Next Sentence Prediction으로 Pretraining을 진행하는 모델입니다.
위는 순열 permutation 식인데요. figure 1-2의 Input(맨위)의 하얀색X의 픽셀들을 예측하는 작업을 합니다.
아는 픽셀들로 모르는 픽셀들을 예측하는 조건부확률을 극대화시키는 학습 방법을 나타낸 식입니다.
각 모델의 loss function 손실함수로, negative likelihood를 최소화하는 학습을 진행한다고 보면 됩니다.
BERT에서는 마스킹되지 않은 토큰들로 마스킹된 토큰들을 예측하는 것이죠.
(좌) AutoRegressive모델은 순차적 방향의 모델로 앞의 것으로 뒤의 것을 예측하며 나아갑니다.
(우) BERT는 양방향 모델로 앞뒤의 이미지 픽셀들을 모두 접근하여 예측해갈 수 있습니다. (masking token제외)
Model Architecture 모델 구조
자연어처리를 공부하신 분이라면 Attention 개념을 모르실 수가 없을 텐데요.
(여기서 설명하기에는 복잡하고 자세한 내용이기에,
Attention에 대해 자세히 아시고 싶은 분은 2017년도 구글논문 'Attention is all you need'를 참고하시기 바랍니다.)
[Vaswani et al. 2017] Attention Is All You Need
이 논문에서는 scaled-dot attention과 multi-head attention 중에서 multi-head attention을 사용하였습니다.
구조가
layer_norm + multihead_attention + mlp(multi layer perceptron)
순서로 이루어져있습니다.
Output(Feature) Evaluation 성능평가
그렇다면 생성하여 얻은 이미지 출력물들(feature output)의 품질은 어떤가요?
만들어낸 이미지의 품질 평가는 사실 기준잡기가 어렵습니다. 사람이 보기에 이상한지 아닌지 manual하게 확인을 해야할 때가 많죠.
그런데 이 논문에서는 Self Supervised Learning 방식을 사용하였습니다.
Self supervised learning에 대해 설명을 드리자면, unsupervised learning의 갈래 중 하나입니다.
라벨이 없는 것이 unsupervised(비지도적) learning인데,
목적은 다양한 task에서 모두 좋은 feature를 출력해내는 것입니다. (segmentation, augmentation 등 다양한 task..)
(반대개념인 supervised learning의 경우는 라벨링이 되어있어서 classification에 세부적으로 정해진 task에서 좋은 성능을 낸다.)
1단계. 라벨링이 없으므로 unlabeled data를 사용하고, 임의로 각 사진에 어떤 Pseudo-Label를 줍니다.
이 Psuedo-Label들은 사진마다 각 free task에 따라 다르게 줍니다.
Unlabeled Data->Feature Extractor->Classifier->Self Supervised Learning(Pseudo-Label)
2단계. 이 학습된 데이터를 Transfer Learning(정보 그대로 저장)하여 Classification에 원하는 학습에 맞게 학습합니다.
소규모의 데이터셋을 가지고 2단계를 실행합니다.
Labeled Data->Feature Extractor->Classifier->Supervised Learning(Label)
이 논문의 ImageGPT모델에서 성능 evaluation에 Self Supervised Learning 방식을 채택한 이유는 뭘까요?
애초에 GPT는 라벨이 없는 방식입니다.
ImageGPT모델에서 '2단계의 Classifier'에도 두 가지 종류가 있습니다.
Linear Probe와 Finetune인데요.
Linear Probe
좋은 Feature는 선형 분리가 쉽다는 가정 하에,
Feature를 고정시키고 선형 Classifier만 학습합니다.
물론, MLP를 쓰지 않고, 단순한 linear layer를 씁니다.
여러가지 layer의 Feature Vector들 중 가운데 middle layer만 씁니다.
그 이유는 뒤에 설명합니다.
Finetune
모델에 있는 모든 layer의 모든 Feature Vector를 사용하여 이를 AvgPool로 하나로 만들어 Projection하여 평가
Feature Extractor와 Classifier를 모두 학습시켜 성능 향상
Experiments and Results 실험과 결과
Linear Probe 실험
위 그림은 Linear Probe의 성능을 layer별로 나타내준 그래프입니다.
보시면 20층 정도까지 성능이 월등히 올라가다가, 점점 완만한 곡선이 됩니다.
이것이 Linear Probe가 중간층을 Evaluation 성능평가에 사용하는 이유인데요.
자연어처리 모델을 공부하신 분이라면, 자연어처리 모델이 Encoder-Decoder의 구조로 이루어진다는 것을 아실 겁니다.
Encoder는 What & How to train을, Decoder는 그 Encoder의 정보를 가지고 train을 수행하는 작업을 거치죠.
그래서 Encoder에서 Decoder로 가면서 데이터 생성에 주력하기에 저러한 형태의 성능 그래프의 모양을 띕니다.
20층 정도가 Encoder에서 Decoder로 넘어가는 시점의 페이지라고 볼 수 있겠네요.
Linear Probe의 성능(Accuracy)를 다른 모델들과 비교한 테이블입니다. (ImageGPT-L 기준)
기존의 Unsupervised나 Supervised 모델들과 비교했을때 좋은 성능을 보입니다.
이 모델들은 작은 데이터셋에서 진행하는 모델들로, 작은 데이터셋에서 좋은 성능을 나타냄을 보여줍니다.
여기서 이 성능평가는 참고로, 특정task에 적합한지를 보여주기보다는, 얼마나 선형분리를 잘하느냐를 보여주는 것이라고 합니다.
GPT모델들끼리의 성능 비교한 그래프입니다.
Validation Loss가 작아질수록 Feature 품질이 좋아집니다.
크기에 따라서 성능이 다르다는, 당연한 개념일 수 있지만, 큰 모델일수록 Feature 성능이 좋아집니다.
여기서의 Validation Loss(x축)는 위에 설명한 AR loss나 BERT loss (에러 최소화) 같은 것입니다.
linear probe accuracy(y축)는 선형 Classification의 성능입니다.
초반에 설명했듯이, 자연어처리 모델인 GPT에 이미지를 적용하기 위해 downgrade하는 resizing을 진행했습니다.
그래서 Context Reduction이 발생하여서 저렇게 파라미터와 연산량이 많게 나옵니다.
그래서 다른 CNN 모델들에 비해 성능이 조금 뒤쳐지는 것으로 나옵니다.
하지만 CNN을 사용하지 않고도 모두 Linear Layer로 구성되어 있음에도, 작은데이터셋(Low Resolution)에서 성능이 뛰어나다는 것에 유의미한 연구임을 보입니다.
Finetune 실험
다른 모델들은 Data augmentation과 ImageNet을 이용한 유명한 Pretrain모델들입니다.
이와 비교했을 때도 성능이 좋거나 비슷함을 보입니다.
Auto-regressive모델과 BERT모델의 성능비교를 보여주는 그래프입니다.
파란 바는 linear probe accuacy, 주황 바는 fine tune accuracy, 진한 색은 BERT Ensemble masks 성능을 나타냄.
진한색은 무엇을 의미하냐면, BERT는 masking토큰에 대해서는 접근을 못한다는 약점이 있기에, 이를 완화해주기에 넣은 지표입니다.
AR모델은 BERT모델에 비해 Linear Probe에서는 더 성능을 보이지만, Finetune에서 BERT가 바로 따라잡아서 비슷한 성능을 보여줍니다.
둘 다 비슷한 성능이라는 것을 보여주네요.
error rate를 보여준 그래프로, 라벨 당 데이터가 적을 때 ImageGPT가 뛰어난 성능을 보여줍니다.
얼마나 적은 데이터로, 얼마나 좋은 feature들을 출력해낼 수 있는지를 알려주기 위해 보여준 그래프로 보이네요.
FixMatch모델에는 뒤쳐지지만, 나름 괜찮은 성능을 보여줍니다.