출처 : 실무 사례로 배우는 컴퓨터 비전 논문 구현과 알고리즘 성능 최적화
패스트캠퍼스
비전 훈련중에 transformer을 사용한 모델 입니다.
Transformers for image recognition at scale
ViT
이미지를 어떻게 시퀀시로 만들 수 있을까? (Input)
CNN에서의 이미지 입력으로 (공간정보를 학습) 모델을 학습시켜서 Classification(분류)문제.
Fully Connected layer의 경우, 모든 입력들이 output에 영향을 미치고 있기에, inductive bias는 약하다.
하지만 CNN은 컨볼루션 필터(지역적인 정보)를 적용하며, RNN또한 시간의 개념(순차적 특징)을 반영한다. 따라서 inductive bias를 가진다고 볼 수 있음.
추가로 Transformer는 self Attention을 통하여 layer를 진행하기에, 인풋(이미지)vector에 따라 weight가 각각 달라짐. 이는 지역적인 정보를 가정할 수 없다. 즉, 다시 말하면 locality를 가정할 수 있는 CNN보다 inductive bias가 적은 모델이다.
예측은 잘하지만, 학습을 잘하기 위해선 데이터셋이 커야한다는 단점을 가지고 있음.
ex) ViT/16
우리는 여기서 D차원으로 임베딩된 patch 임베딩에 + <class의 token 0 index로>를 부여하고 추가적으로 positional 임베딩을 sum을 취한다.
positional 임베딩의 경우, 주기함수에서 i가 patch순서의 index를 넣고, D차원의 임베딩된 patch를 넣어서 나온 결과값을 적용한다.
이미지의 예측이 목표이다. (실제 코드에서는 이미지 class 예측 + 포함된 문맥도 output이 나와야 하는데, 예측만 진행함.)
인코더는 개 만큼 이용함.
q, k, v를 계산함. matrix multiple로 , , 를 곱함.
계산한 Q와 를 곱하고, head의 차원의 루트로 나눠서 softmax후 V를 곱함.
Q와 의 값이 너무 커지면 softmax의 값이 발산될 수 있어서, head로 나눠준다.
Scaled Dot-product Attention에서는 head의 개수만큼 concat하여, linear layer로 하나의 head처럼 나오도록 계산함.
multi layer perceptron를 사용하여 업데이트 함. mlp의 아웃풋은 transformer 인풋과 동일한 크기임.
추가로, skipped connection(Resnet배경)을 추가함.
MLP Head에서는 class 토큰으로 나온 값을 normalization후에 class의 예측을 하는 것으로 진행하게 됨. 즉 patch 9개의 결과들을 사용하는 것이 아니라 0번 인덱스가 class의 예측으로 사용한 것이다.