[Tech +]의미상으로 접근한 ViT

여러분 반가워요!
알비언에서 AI, Vision 파트를 담당하고 있는 개발자 Kelly입니다.

우선 알비언 기업의 Tech 콘텐츠 스타트를 제가 끊게 돼 영광이에요! 

알비언에는 제가 소속한 AI팀 이외에도 AR, Client, Server, Metaverse, Technical Artist, DevOps 등 각 분야의 전문가들이 모여 우리만의 기술을 개발하고 있는 '테크 기업'이랍니다. 앞으로 저희 개발자들도 공유하고 싶은 기술 이야기, 하고 있는 업무에 대해 소개하려 하니 많은 관심 부탁 드립니다.

Tech 콘텐츠 첫 주제로는 ViT(Vision Transformer)에 대한 이야기입니다. 바로 시작해볼게요! 😀 



의미상으로 접근한 ViT


ViT 에 대해 작성하게 된 배경

  • 음식을 classification(분류)하는 모델을 개발하려다가 ViT 모델로 개발하게 되었습니다.
  • 기존 classification model 개발에 있어 주로 CNN 구조의 model로 접근한 반면 
    ViT의 개념이 생소했고 ViT의 등장배경이나 ViT가 가지는 구조와 매커니즘의 의미 등이 궁금했었습니다.
  • ViT 를 사용하기 전 ViT가 뭔지 이해하고 싶어서 조사하게 되었고 관련 글을 쓰게 되었습니다.

등장배경

  • 기존에는 Convolutional architecture(CNN 구조)가 Vision 분야 대부분을 차지해왔습니다.
  • NLP에서 Transformer 구조가 SOTA를 차지할 만큼 큰 성공을 거두었기에 연구자들은 Vision에 
    Transformer 구조를 적용하고자 하였고 standard Transformer를 도입하고자 한 게 바로 ViT 입니다.

용어 가이드

  • CNN 구조
    • CNN(Convolutional Neural Network) 구조는 convolutional layer로 이루어진 구조입니다.
  • Convolutional layer
    • 이미지의 feature(특징) 을 추출해주는 layer를 의미합니다.
    • Convolutional layer에는 많은 filter(nxn matrix)가 있어서 input으로 주어진 이미지를 순회하며 
      matrix 곱셈 연산을 해서 feature 추출이 가능합니다.
  • Transformer 구조
    • 원래 NLP에서 사용하던 구조이기 때문에 word embedding sequence라는 것을 사용했었습니다.
      • word embedding: 단어를 벡터로 표현하는 방법(실수로 표현됨)
    • 그렇지만 ViT는 vision Transformer 구조이므로 image를 patch단위로 쪼갠 sequence를 사용합니다.
    • 상세 구조는 ViT 간단 소개 쪽에 그림을 참고해주시기 바랍니다.

ViT 간단 소개


Input 만드는 과정

  • 일반적으로 Transformer에서는 input을 처리할 때, 
    시퀀스 데이터 → Embedding → Positional Encoding 과정을 거칩니다.
  • 이미지를 patch size로 쪼개어 나눈 이미지들을 flatten해서 N 차원으로 임베딩(=벡터화)시킵니다.
    • NLP에서 문장: 단어의 방식으로 접근했다면 Vision Transformer에서는 이미지:patch 의 방식으로 접근합니다.
      • 큰 것(ex. 문장, 전체 이미지)을 학습시키는 것이 목적이지만 잘게 나눠 학습시키는 방식은 동일하므로  
        단어→ patch 의 접근으로 접근한 것으로 보입니다.
  • classification 예측하는 Token을 하나 추가합니다.
  • 이미지를 patch 로 잘라서 넣었기 때문에 이미지 위치 정보가 소실되므로 이를 방지하기 위해 각 패치에 Position Embedding 정보가 붙게 되었습니다.

Output

  • Transformer Encoder를 L번 반복 → 입력값과 같은 크기의 출력값을 얻을 수 있습니다.
  • Encoder의 출력도 class token + vector로 구성됨. class token 만 사용해서 MLP Head  구성 가능함. 
    MLP Head를 통해 클래스 최종 분류 가능합니다.

Transformer

  • 위에서 처리된 input은 Embedded Patches로 Tansformer Encoder에 들어가게 됩니다.

  • Transformer Encoder는 Multi-Head Attention과 MLP 가 residual block  구조처럼 붙는 구조이며 Normalization이 해당 블록 전에 적용됩니다.

  • Attention이란?

    • Attention 은 사전적으로 ‘주의, 주목’  이라는 의미를 갖고 있습니다.
    • 위의 사전적 의미를 봐서 알 수 있듯이 Attention 매커니즘은 데이터 전체를 살펴보고 attention(주목)할 위치를 정하는 매커니즘입니다.
    • Attention 사용시 이미지 전체에서 학습시키고자 하는 class 에 해당하는 객체만 주목하게끔 효과를 나타낼 수 있습니다.

  • Q(query), K(Key), V(Value) 구성을 가집니다.

  • Norm: Layer Normalization 진행해서 각 feature에 대한 정규화를 진행합니다.

  • Multi-Head Attention:

    • 여러 개의 head에서 attention 연산을 처리해줍니다.
    • 각 head의 Q(query), K(Key), V(Value)  에 대한 연산을 한 번에 처리합니다.

  • MLP

    • MLP = Multi-Layer Perceptron
    • 여러 개의 perceptron 뉴런을 여러 층으로 쌓은 다층신경망 구조입니다.
    • 입력층 + 은닉층 + 출력층으로 구성됩니다.
    • 여기서는 Fully Connected Layer  2개, GELU(보통 Activation Function으로 ReLu 사용하지만 여기서는 이 함수를 사용합니다)
      • 왜 그럴까요?
        • GELU는 입력값 x가 다른 입력에 비해 얼마나 큰 지 비율로 조정 → 확률적 해석 가능합니다.

MLP Head

  • Transformer Encoder의 마지막 출력에서 class token만 분류 문제에 사용합니다.
  • 추가적으로 마지막에 MLP로 class 분류합니다.

결론

  • ViT의 등장 배경, Input 구조, Output 구조와 전체적인 구성요소들의 역할에 대해 알아보았습니다!
  • 다음에는 ViT로 food-101 dataset을 학습시켜 food classification 을 진행할 예정이니 기대해주세요!


참고

Social Media

 official@mergerity.com