
Google의 Vision Transformer 이해하기
요약
Google이 발표한 Vision Transformer(ViT)는 이미지를 작은 패치 단위로 분할하여 Transformer 구조에 적용한 모델입니다. 대규모 데이터셋으로 사전 학습 시 기존 CNN 기반 모델을 능가하는 성능을 보여줍니다.
핵심 포인트
- 이미지를 16x16 픽셀 패치로 나누어 Transformer 입력으로 사용
- ImageNet 등 주요 벤치마크에서 최첨단 CNN 성능 상회
- 대규모 데이터셋(JFT-300M 등) 활용 시 전이 학습 효과 극대화
- 계산 리소스 효율성을 유지하며 높은 성능 달성
Google사에서 발표한 '이미지 전체를 한 번에 보는 것이 아니라, 16×16 픽셀의 작은 블록(Patch)을 문장의 '단어(Word)'처럼 나열하여 Transformer로 이해하는' 논문을 질문 형식으로 제시받아 이해하고 싶습니다.
Q. 실험 결과를 알려주세요.
A.
Google의 이미지 Transformer 관련 논문에서는 Vision Transformer (ViT)의 실험 결과가 보고되었습니다. 주요 내용은 다음과 같습니다:
- 성능 평가:
・ ViT는 ImageNet, CIFAR-100, VTAB 등 중규모에서 소규모의 이미지 인식 벤치마크에서 최첨단 CNN과 비교하여 우수한 성과를 달성했습니다.
・ 특히, ImageNet에서 88.55%, ImageNet-ReaL에서 90.72%, CIFAR-100에서 94.55%, VTAB 스위트에서 77.63%의 정확도를 달성했습니다. - 사전 학습 및 전이 학습:
・ 대규모 데이터셋으로 사전 학습을 수행한 후, 중규모에서 소규모 데이터셋으로 전이 학습을 진행함으로써 우수한 성능을 발휘했습니다.
・ 공개된 ImageNet-21k 데이터셋이나 사내 JFT-300M 데이터셋으로 사전 학습을 진행한 결과, 여러 이미지 인식 벤치마크에서 최첨단 기법에 필적하거나 능가하는 성능을 보였습니다. - 계산 리소스의 효율성:
・ ViT는 학습에 필요한 계산 리소스를 대폭 줄이면서도 높은 성능을 발휘할 수 있음이 입증되었습니다.
이러한 결과들을 통해, ViT는 이미지 분류 작업에서 매우 높은 성능을 보이며 기존 CNN에 의존하지 않는 새로운 접근 방식으로서 유망하다는 것이 제시됩니다.
Q. 대규모 학습을 통해 상황이 일변하고 우수한 결과를 가져온다고 언급되는데, 그 학습에는 어느 정도의 이미지가 사용되었나요?
A.
Google의 이미지 Transformer 관련 논문에서는 대규모 학습에 사용된 이미지 수로 1400만 장에서 3억 장의 이미지가 언급되었습니다.
Q. 입출력 과정에서 이루어지는 데이터 변환에 대해 설명해 주세요.
A.
Google의 이미지 Transformer 관련 논문에서는 이미지 데이터의 입출력 과정에서 다음과 같은 데이터 변환이 이루어집니다.
- 입력 이미지 분할:
・ 원본 이미지는 고정 크기의 작은 블록(패치)으로 분할됩니다. 구체적으로, 이미지 $x ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ } ext{ }
Google의 Vision Transformer(ViT)에 관한 논문에 따르면, Vision Transformer의 출력은 Transformer 엔코더(Encoder) 출력 중 "분류용 토큰"의 상태입니다. 이 출력은 이미지 표현으로서 기능합니다. 구체적으로는, Transformer 엔코더 출력의 맨 앞에 있는 학습 가능한 임베딩(분류용 토큰)의 상태가 이미지의 특징을 나타내는 벡터로 사용됩니다.
이 출력은 사전 학습(Pre-training) 시와 파인튜닝(Fine-tuning) 시 모두 분류 헤드(Classification head)에 연결됩니다. 분류 헤드는 사전 학습 시에는 하나의 은닉층을 가진 다층 퍼셉트론(MLP)으로, 파인튜닝 시에는 단일 선형층(Linear layer)으로 구현되어 최종적인 분류 결과를 생성합니다.
Q. 이미지를 Transformer에 입력하기 위해 수행하는 패치 임베딩(Patch embedding) 식을 알려주세요.
A.
Google의 이미지 Transformer에 관한 논문에서, 이미지를 Transformer에 입력하기 위해 수행하는 패치 임베딩 식은 다음과 같습니다:
$$
z_0=[x_{\mathrm{class}};x_{p}^{1}E;x_{p}^{2}E;\cdots;x_{p}^{N}E]+E_{\mathrm{pos}},
\quad
E\in\mathbb{R}^{(P^{2}\cdot C)\times D},
\quad
E_{\mathrm{pos}}\in\mathbb{R}^{(N+1)\times D}
$$
이 식에서는 이미지를 작은 패치로 분할하고, 각각의 패치를 선형 투영(Linear projection) $E$를 사용하여 임베딩 벡터로 변환합니다. 여기에 위치 임베딩(Positional embedding) $E_{\mathrm{pos}}$를 더하여 Transformer 엔코더의 입력으로 사용합니다.
Q. 위치 임베딩(Positional Embedding)의 역할과 1차원·2차원·상대 위치 임베딩의 차이점에 대해 설명해 주세요.
A.
Google의 이미지 Transformer에 관한 논문에서, 위치 임베딩(Positional Embedding)은 이미지의 공간 정보를 부호화(Encoding)하기 위해 사용됩니다. Transformer는 본래 토큰의 시퀀스(Sequence)를 다루도록 설계되었기 때문에, 이미지와 같은 2차원 데이터를 다룰 때는 위치 정보를 모델에 명시적으로 포함시켜야 합니다. 다음은 1차원, 2차원, 그리고 상대 위치 임베딩의 차이점입니다.
1차원 위치 임베딩:
・ 이미지를 래스터 순서(Raster order)로 나열한 패치 열로 취급하며, 각 패치에 1차원 위치 정보를 부가합니다.
・ 이는 Transformer의 기본 설정이며, 다른 실험에서도 사용되었습니다.
2차원 위치 임베딩:
・ 이미지를 2차원 패치 그리드(Grid)로 취급하며, X축과 Y축 각각에 대해 위치 임베딩을 학습합니다.
・ 각 패치의 좌표를 기반으로 X 임베딩과 Y 임베딩을 결합하여 최종적인 위치 임베딩으로 만듭니다.
상대 위치 임베딩:
・ 절대 위치가 아니라 패치 간의 상대적 거리를 고려하여 공간 정보를 부호화합니다.
・ 1차원 상대 어텐션(Relative attention)을 사용하여 모든 패치 쌍에 대해 상대적 거리를 정의하고, 상대 위치 임베딩을 이용한 어텐션 계산을 수행합니다.
논문의 어블레이션(Ablation) 실험에서는 위치 임베딩을 사용함으로써 모델의 성능이 향상됨을 보여주었으나, 1차원, 2차원, 상대 위치 임베딩 기법 간의 성능 차이는 거의 나타나지 않았습니다. 이는 Transformer가 패치 단위로 입력을 처리하기 때문에 공간 정보 부호화 기법의 차이가 그리 중요하지 않기 때문인 것으로 생각됩니다.
Q. 파인튜닝에서는 어떤 학습 설정이나 절차가 채택되고 있습니까?
A.
Google의 이미지 Transformer에 관한 논문에서는 파인튜닝 시 다음과 같은 학습 설정 및 절차를 채택하고 있습니다.
파인튜닝 기법:
ViT 모델을 다른 데이터셋으로 전이(Transfer)할 때, 사전 학습된 예측 헤드를 제거하고 타겟 데이터셋에 필요한 클래스 수만큼 출력하는 제로 초기화(Zero-initialized)된 단일 선형층으로 교체합니다.
학습률과 하이퍼파라미터:
모멘텀(Momentum) 0.9의 SGD를 사용하며, 학습률은 데이터셋마다 다른 범위로 설정됩니다 (예: ImageNet의 경우 0.003에서 0.06 범위).
코사인 학습률 감쇠(Cosine learning rate decay), 배치 사이즈(Batch size) 512, 웨이트 디케이(Weight decay) 없음, 글로벌 노름(Global norm) 1에서의 그래디언트 클리핑(Gradient clipping)을 사용합니다.
해상도:
해상도:
파인튜닝 (Fine-tuning) 시의 해상도는 384로 수행되는 것이 일반적입니다. 사전 학습 (Pre-training) 시보다 높은 해상도로 파인튜닝을 수행하는 것이 유익한 경우가 있습니다.
데이터셋과 스텝 수:
데이터셋마다 서로 다른 스텝 수로 파인튜닝이 수행됩니다 (예: ImageNet에서는 20,000 스텝, CIFAR100에서는 10,000 스텝).
정규화와 보간:
소규모 데이터셋에 대해서는 가중치 감쇠 (Weight decay), 드롭아웃 (Dropout), 레이블 평활화 (Label smoothing)와 같은 정규화 (Regularization) 파라미터를 최적화합니다.
고해상도화에 따라, 사전 학습된 위치 임베딩 (Position embedding)에 대해 2차원 보간 (Interpolation)을 수행합니다.
이러한 설정들을 통해 ViT 모델은 서로 다른 데이터셋에 대해 효과적으로 파인튜닝되며, 성능을 향상시킬 수 있습니다.
- State of the Art (SOTA)
- 최첨단 기술의
- 하이퍼파라미터 (Hyperparameter)
- 머신러닝 모델의 학습을 시작하기 전에 사람이 설정하는 값. 학습 중에는 모델이 내부 파라미터를 자동으로 학습함
- 어블레이션 실험 (Ablation study)
- 모델을 구성하는 각 요소를 하나씩 제거하거나 변경하여, 그 요소가 성능에 어느 정도 기여하고 있는지를 조사하는 실험. 어떤 요소가 성능 향상에 효과적인지 조사함. 하나씩 제거하여 비교: Transformer w/ aux LM (full) (전체 포함), Transformer w/o pre-training (사전 학습 제외), Transformer w/o aux LM (보조 언어 모델 제외), LSTM w/ aux LM (Transformer를 LSTM으로 교체)
- CNN (합성곱 신경망, Convolutional Neural Network)
일반적인 신경망에서는 이미지를 단순한 수치의 나열로 취급합니다. 하지만 이미지에는 "인접한 픽셀은 서로 연관되어 있다"라는 공간적인 특징이 있습니다.
CNN은 이 공간적인 특징을 활용하기 위해,
**합성곱 (Convolution)**이라는 처리를 사용합니다. 예를 들어, 고양이 이미지에서는,
・초기 층에서는 "선"이나 "에지 (Edge)"
・중간 층에서는 "눈"이나 "귀"
・깊은 층에서는 "고양이 얼굴"이나 "몸"과 같은 특징을 단계적으로 학습합니다.
- NLP (자연어 처리)에서의 Transformer 스케일링 성공
- Transformer 모델은 모델의 규모나 학습 데이터를 크게 할수록 성능이 향상된다는 것이 입증되었으며, 자연어 처리 분야에서 비약적인 성공을 거두었다는 것을 의미합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기