DataScience
article thumbnail
728x90

Transformer

기존 sequence transduction model들은 인코더와 디코더를 포함한 복잡한 recurrent 나 cnn에 기반함

가장 성능이 좋은 모델 또한 attention mechanism으로 인코더와 디코더를 연결한 구조임

"Transformer" : 온전히 attention mechanism에만 기반한 구조. (recurrence 나 convolution은 사용하지 않음)

- 더 parallelizable하고, 훨씬 적은 학습 시간이 걸림

 

Vision Transformer

Transformer 가 원래는 언어 모델인데 언어모델에 이미지를 분할해서 input으로 넣어준게 Vision Transformer입니다. 줄여서 ViT라고 합니다.

 

ViT의 특징

- 기존 CNN 기반 SOTA 모델보다, 성능이 좋다. Fine-Tuning 과정에서 적은 리소스로도 더 좋은 성능을 보여준다.

- 기존 Transformer 모델처럼 Parameter에 한계가 아직 없다. 더 많은 데이터와 더 많은 Parameter로 더 좋은 성능을 보여줄 수 있다. 

- CNN, RNN과 다르게, 공간에 대한 bias가 없다. 따라서 많은 사전 데이터 학습이 필요하다.

- 많은 데이터를 사전 학습 해야 된다. 적은 데이터로 사전 학습 시, 성능이 나빠진다.

 

 

이미지를 텍스트 sequence처럼 사용하는 구조를 가지고 왔습니다. 먼저, 이미지를 고정된 크기의 patch로 나눠줍니다. 각각의 patch를 linearly embedding하고 position embedding을 하여, Transformer 인코더에 Input 값으로 넣습니다. 거기에 classification token을 더해줍니다. 이미지를 Classification하기 위해서, 어떤 이미지인지, 알려주는 과정을 추가한 것입니다. 해당 정보를 이용해서 이미지 Class를 예측합니다.

ViT의 흐름을 잘 표현해 줍니다. 아래의 각 수식의 (1), (2), (3)을 Embedding, MSA, MLP 부분으로 생각할 수 있습니다.

Before Input

  • 크기의 이미지를 크기가 인 패치 N개로 자른 후, N개의 1-D 벡터 (차원)로 flatten
  • 로 계산되며, 는 하이퍼 파라미터.
  • 위의 예시는 참고용이며, 실제 실험에서는 모델 크기에 따라 =14,16,32 등 다양
  • 이후, Linear projection을 수행하여 크기가 D인 벡터의 시퀀스로 차원 변경.
    • 이때, D는 모든 레이어 전체에 고정된 값.

Embedding (P=16, H=W=224, N=196, D=768)

  • 가장 첫번째 패치 임베딩 앞에 학습 가능한 임베딩 벡터를 붙여줌. 이는 추후 이미지 전체에 대한 표현을 나타내게 됨.
  • N+1개의 학습 가능한 1D 포지션 임베딩 벡터 (이미지 패치의 위치를 특정하기 위함)를 만들어준 후, 이를 각 이미지 패치 벡터와 합해줌. (두 Matrix의 합)
  • 만들어진 임베딩 패치를 Transformer Encoder에 입력으로 넣어줌.

MSA(multi-head self-attention)

milti-head부분과 self attention의 부분으로 설명해 보겠습니다.

multi-head 의 개념의 핵심은 D(e.g.192)의 차원의 token을 head의 갯수로 나누어 head수 만큼 한 이미지(token)에 대하여 여러 관점을 볼 수 있다는 점 입니다.

이는 convolution 의 channel 처럼 생각 할 수 있습니다. 다음 그림은 convit에서 여러 head간 attention map을 시각화 한 것입니다.

 

Multi-head로 각각 나눠진 token들 () 은 각각 self-attention 을 통과해서 (k는 head의 index)로 연산됩니다.

multi-head self attention 1 (multihead and self attention)

이후 Self Attention을 통과한 각 head의 값들은 concat이 되어서 마지막 linear projection()를 통해서 msa의 값이 나오게 됩니다.   

multi-head self-attention 2 (concatenate and projection)

 

Self-Attention 부분입니다.

input token에 대하여  의 projection matrix를 곱해서 Q, K, V 를 만들고 Q와 K를 dot product 한 부분에 K의 dimension으로 나누는 sclaed dot product 를 진행합니다.

이후 이 값에 softmax를 취하고 V를 곱해줍니다.

 

여기서 주목할 부분은 softmax의 dim이 -1입니다. 즉, 가로줄의 방향으로 softmax가 진행이 되고, V를 곱해줄 때, 각 token에 대한 normalization된 score를 곱해줄 수 있게 됩니다.

 

그렇다면, 연산 이후의 값은 softmax(QK/d_k)를 통해서 확률적 score부분이 normalized된 attention 정보를 주게되고, 그 종합적인 정보를 V에 곱하면서 전체 token의 중요성을 고려한 token 값으로 학습되게 하는것 입니다.     

MLP & Block(Transformer Encoder)

Transformer Encoder 부분은 MSA와 MLP로 이루어져 있고, 이것이 L층 쌓여져 있습니다.

여기서는 Normalization 과 Residual connection 이 사용되었습니다. 

 

Inductive Bias

CNN의 경우에는 다음과 같은 image-specific한 Inductive Bias가 존재합니다.

  • Locality
  • Two-Dimensional neighborhood structure (2차원적으로 이웃하는 구조)
  • Translation equivariance

위의 가정이 ViT에서는 훨씬 약하게 작용합니다. (이러한 부분을 ViT에서는 data-driven training으로 해결 & 오히려 inductive bias가 없는 부분을 ViT에서는 보다 task-agnostic unified structure로 보는 관점을 갖고 있는 듯합니다)

How Inductive Bias operates on ViT

  • MLP layers: Locality and translation equivariance
  • 2D neighborhood structure: 입력 패치로 자르는 과정 (학습), position embedding 조정 (fine-tuning)

Locality (=Locality of Pixel Dependencies)

이미지를 구성하는 특징들은 이미지 전체가 아닌 일부 지역들에 근접한 픽셀들로만 구성되고 근접한 픽셀들끼리만 종속성을 갖는다는 가정.

위의 사진을 보았을 때, 코라는 특징은 파란색 사각형 안에 있는 픽셀값에서만 표현되고, 해당 픽셀들끼리만 관계를 가집니다. 빨간색 사각형 안의 픽셀들은 파란색 사각형 안의 픽셀과는 종속성이 없습니다. 즉, 종속성을 갖는 픽셀들은 local하게 존재하지, 전역적으로 종속성이 있다고 보기는 어려습니다. Convolution 연산은 이러한 이미지의 locality 특징에 잘 부합하는 방식으로 동작합니다.

 

ViT 사용에 유의할 점

당연한 이야기지만, ViT도 Transformer 답게 많은 데이터로 Pre-Training 하지 않으면, 좋은 성능을 기대하기 어렵습니다. ViT 모델은 구글 내부 이미지 6억장 정도로 Pre-Training 됐다고 합니다. 따라서 공개된 모델을 Fine-Tuning하여, 사용하는 것이 좋습니다.

Fine-Tuning시에는 Pre-Training prediction head를 제거하고, 0으로 초기화된 D x K 차원의 feedforward layer를 연결하여, 사용하면 됩니다. 여기서 K는 우리가 풀려는 테스크의 Class 개수입니다.

재밌게도 Fine-Tuning할 때는 Pre-Training 이미지보다 높은 해상도의 이미지를 쓰는 것이, 성능 향상에 좋다고 합니다. 그럼, patch 크기를 동일하게 유지하고 더 큰 시퀀스 수를 사용할 수 있습니다. N x (P x P x C)에서 N이 늘어날 수 있는 거죠. (데이터가 많아지니, 성능이 높아지는 걸까요?)

ViT는 메모리의 한계까지, N의 길이를 늘릴 수 있습니다. 당연한 말이지만, N의 길이가 늘어갈 경우, Pre-Training 모델의 position embedding은 더 이상 의미가 없을 수도 있습니다. 이럴 때만 2차원 구조를 사용하여, position embedding을 조정합니다.

 

'영상처리 > 기초' 카테고리의 다른 글

YOLOv8 imagesegmentation  (50) 2023.02.26
영상 요약해주는 Vision Transformer 모델  (30) 2023.02.26
GAN(Generative Adversarial Networks)  (92) 2023.02.15
VGG-Net 리뷰  (60) 2023.01.25
ResNet 리뷰  (10) 2023.01.24
profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!