본문 바로가기
AI HW/Transformer

Training data-efficient image transformers& distillation through attention논문을 위한 사전 지식

by jyun13 2024. 1. 11.

"Training data-efficient image transformers & distillation through attention"

Training_data-efficient_image_transformers_and_distillation_through_attention.pdf
0.53MB

 

논문 제목
1. Training data-efficient image transformers:
   - "이미지 트랜스포머(Image Transformer)를 효율적으로 훈련시키기"
   - "데이터 효율적인 방법으로 이미지 트랜스포머를 훈련하는 것"을 나타냄.  이미지 트랜스포머는 컴퓨터 비전 작업에 사용되는 딥 러닝 모델로, 더 적은 양의 데이터를 사용하여 효율적으로 훈련시키는 방법에 대한 논문.

2. Distillation through attention:
   - "어텐션을 통한 지식 전달"
   - "어텐션(Attention)을 활용한 지식 전달 또는 축소"를 의미. 이 부분은 지식(모델의 학습된 정보)을 다른 모델에 전달하거나 축소하는 과정에 어텐션 메커니즘을 활용한다는 것을 시사.

 

배경지식

1. transformer

https://wikidocs.net/31379

 

16-01 트랜스포머(Transformer)

* 이번 챕터는 앞서 설명한 어텐션 메커니즘 챕터에 대한 사전 이해가 필요합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 Attention i…

wikidocs.net

 

- 트랜스 포머는 어텐션 기법만 쓰기 때문에  RNN, CNN은 전혀 사용하지 않음

- 그래도 기존의 seq2seq의 인코더 - 디코더 구조는 유지

- 인코더에서 입력 시퀀스를 입력받고, 디코더에서 출력 시퀀스를 출력

- 이전에는 하나의 RNN인 t개의 시점을 가지는 구조였는데, 이번에는 인코더와 디코더 단위가 N개로 구성되는 구조

인코더와 디코더가 6개씩 존재하는 트랜스포머

 

어텐션 과정 한번만 사용하는 것이 아니라 여러 레이어를 거쳐서 반복

인코더와 디코더 N 번 만큼 중첩되어 사용하도록 만듦. (동일한 인코더 레이어와 디코너 레이어가 N번 반복되어 stack)

디코더는 기존 seq2seq 구조처럼 시작 심볼 < sos > 을 입력으로 받아서 종료 심볼 < eos >가 나올 때 까지 연산

그리고 그 마지막 인코더레이어의 출력을 디코더에 보내게 된다.

단어들이 순차적으로 처리되는 것이 아닌 하나의 레이어에 병렬로 들어간다.

 

 

동작 원리 

1. 입력 값 임베딩 (embedding)

1) 어떤 단어 정보를 네트워크에 넣기 위해서는 '임베딩' 과정을 거침

2) 맨 처음에 들어가는 입력 차원 자체는 단어의 개수와 같기 때문

3) 이는 차원이 많을 뿐만 아니라 각각의 정보들은 원 핫 인코딩 형태로 표현되기 때문에 '임베딩' 과정을 거쳐 더욱 더 작은 차원으로 표현 - continuous 한 값 (실수 값) 으로 표현

4) 이 입력 임베딩 행렬은 단어의 개수만큼 행의 크기를 가짐 (즉, 여기선 4개의 행) 각각의 열 데이터는 임베딩 차원과 같은 크기의 데이터가 담긴 배열 사용

5) seq2seq 와 같은 RNN 기반 아키텍쳐를 사용한다고 하면, RNN 을 사용하는 것만으로도 각각의 단어가 RNN 에 들어갈 때 순서에 맞게 들어가기 때문에 자동으로 각각의 hidden state 값은 순서에 대한 정보를 갖게 됨. 

(  RNN 이 자연어 처리에서 유용했던 이유도 단어의 위치에 따라 단어를 순차적으로 입력받아서 처리하기 때문에, 각 단어의 위치 정보를 가질 수 있었기 때문이었음.)

 

2. 포지셔널 인코딩 (positional encoding)

 

트랜스포머에서는 단어 입력을 순차적으로 받는 방식이 아니다.

 

위치 정보를 다른 방식으로 알려줄 필요성이 있음. -> 단어의 임베딩 벡터에 위치 정보들을 더해 모델의 입력으로 사용. 이를 포지셔널 인코딩이라고 함.

 

입력으로 사용되는 임베딩 벡터들이 트랜스포머의 입력으로 사용되기 전에 포지셔널 인코딩 값이 더해진다. 

 

각 단어들의 위치가 반영된 포지셔널 인코딩값이 더해지는 것

 

트랜스 포머는 위치 정보를 가진 값을 만들기 위해서 위 함수를 사용

임베딩 벡터와 포지셔널 인코딩의 덧셈은 임베딩 벡터가 모여서 만들어진 문장 벡터 행렬포지셔널 인코딩 행렬의 덧셈 연산을 통해 이루어진다. 

pos : 입력 문장에서 임베딩 벡터 위치

i : 임베딩 벡터 내 차원의 인덱스

임베딩 벡터내 각 차원의 인덱스가 짝수인 경우 (pos,2i)사인 함수 값을, 홀수인 경우 (pos,2i+1) 코사인 함수 값을 사용

 

 

2. attention 메커니즘

https://wikidocs.net/48948

 

15. 어텐션 메커니즘 (Attention Mechanism)

이번 챕터에서는 신경망들의 성능을 높이기 위한 메커니즘이자, 이제는 AI 분야에서 대세 모듈로서 사용되고 있는 트랜스포머의 기반이 되는 어텐션 메커니즘에 대해서 학습합니다.

wikidocs.net

 

신경망들의 성능을 높이기 위한 메커니즘

AI 분야에서의 대세 모듈로서 사용되고 있는 트랜스포머의 기반이 되고 있음. 

 

어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점마다 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 점. (단, 동일 비율리 아닌 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중해서 보게 된다.)

어텐션을 함수로 표현하면 다음과 같다. 

Attention(Q, K, V) = Attention Value

어텐션 함수는 주어진 쿼리에 대해서 모든 키와의 유사도를 각각 구한다. 

그리고 구해낸 유사도를 키와 맵핑되어 있는 각각의 값에 반영해준다. 

그리고 유사도가 반영된 값을 모두 더해서 리턴한다. 여기서는 이를 어텐션 값이라고 한다. 

 

닷-프로덕트 어텐션(Dot-Product Attention)

 

위의 그림은 디코더의 세번째 LSTM 셀에서 출력 단어를 예측할 때 어텐션 메커니즘을 사용하는 모습을 보여줌.

디코더의 1, 2번째 LSTM 셀은 이미 어텐션 메커니즘을 통해  je와 suis를 예측하는 과정을 거쳤다고 가정.

 

디코더의 세번째 LSTM 셀은 출력 단어를 예측하기 위해서 인코더의 모든 입력 단어들의 정보를 다시 한번 참고하고자 함. 중간 과정에 대한 설명은 현재는 생략하고 여기서 주목할 것은 인코더의 소프트맥스 함수.

 

소프트맥스 함수를 통해 나온 결과값은 I, am, a, student 단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값. -> 빨간 직사각형의 크기로 소프트맥스 함수의 결과값의 크기를 표현 (직사각형의 크기가 클 수록 도움이 되는 정도의 크기가 큽니다)

 

각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이를 하나의 정보로 담아서 디코더로 전송

위의 그림에서는 초록색 삼각형이 이에 해당. 결과적으로, 디코더는 출력 단어를 더 정확하게 예측할 확률이 높아짐.

 

1) 어텐션 스코어(Attention Score)를 구한다.

 

인코더의 시점을 각각 1,2,3...,N이라고 하였을 때 인코더의 은닉상태를 각각 h1, h2, h3,,,,라고 하자.

디코더의 현재 시점 t에서의  디코더의 은닉상태를  St라고 하자.  

 

여기서는 인코더의 은닉 상태와 디코더의 은닉 상태의 차원이 같다라고 가정

(위의 그림의 경우 인코더의 은닉 상태와 디코더의 은닉 상태가 동일하게 4차원)

 

시점  t에서 출력 단어를 예측하기 위해서 디코더 셀은 두 개의 입력값을 필요로 한다. (바로 이전 시점인 t-1의 은닉상태, 이전 시점  t-1에 나온 출력 단어) 

 

어텐션 메커니즘에서는 출력 단어 예측에 또 다른 값을 필요로 한다. 바로 attention값이라는 새로운 값.

t번째 단어를 예측하기 위한 어텐션 값을 at라고 한다. 

 

어텐션 값이 현재 시점 t에서의 출력 예측에 구체적으로 어떻게 반영되는 지를 설명해야 함. 

지금부터 배우는 모든 과정은 at를 구하기 위함.

 

어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 st와 얼마나 유사한지를 판단하는 스코어값

 

-> 이 스코어 값을 구하기 위해 st를 전치(transpose)하고 각 은닉 상태와 내적(dot product)을 수행

-> 모든 어텐션 스코어 값은 스칼라

-> 예를 들어 st과 인코더의 i번째 은닉 상태의 어텐션 스코어의 계산 방법

2) 소프트맥스(softmax) 함수를 통해 어텐션 분포(Attention Distribution)를 구한다.

e^t에 소프트 맥스 함수를 적용하여 모든 값을 합하면 1이 되는 확률 분포를 얻음 -> attention 분포

각각의 값은 어텐션 가중치라고 한다.

 

예를 들어, 소프트 맥스를 통해 얻은 출력 값인  I, am, a, student의 어텐션 가중치를 각각 0.1, 0.4, 0.1, 0.4라고 합시다.

이들의 합은 =1 

각 인코더의 은닉 상태에서의 어텐션 가중치의 크기를 직사각형으로 시각화 함.

 

3) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값(Attention Value)을 구한다.

 

 

 

<트랜스 포머에서 사용되는 3가지 어텐션>

 

첫번째 그림은 셀프어텐션으로, 인코더에서 이루어지고,

두번째 그림의 셀프어텐션과 세번째 그림의 인코더-디코더 어텐션은 디코더에서 이루어진다.

 

https://velog.io/@nayeon_p00/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8-%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%EB%A8%B8-Transformer

 

[딥러닝 모델] 트랜스포머 (Transformer)

https://wikidocs.net/31379트랜스포머는 RNN을 사용하지 않지만, 기존 seq2seq 처럼 인코더에서 입력시퀀스를 입력받고, 디코더에서 출력시퀀스를 출력하는 인코더-디코더구조를 가진다. 이전에는 하나

velog.io

 

 

https://light-tree.tistory.com/196

 

딥러닝 용어 정리, Knowledge distillation 설명과 이해

이 글은 제가 공부한 내용을 정리하는 글입니다. 따라서 잘못된 내용이 있을 수도 있습니다. 잘못된 내용을 발견하신다면 리플로 알려주시길 부탁드립니다. 감사합니다. Knowledge distillation 이란?

light-tree.tistory.com

* Knowledge Distillation
- 목적 : 미리 잘 학습 된 큰 네트워크 (teacher network)의 지식을 실제로 사용하고자 하는 작은 네트워크 (student network)에게 전달하는 것
- 딥러닝 모델은 보편적으로 넓고 깊어서 파라미터의 수가 많고 연산량이 많으면 feature extraction이 더 잘 되고, 그에 따라서 모델의 목적인 classification이나 object detection 등의 성능 또한 좋아질 것
- 그러나, 작은 모델로 더 큰 모델만큼의 성능을 얻을 수 있다면, Computing resource(GPU 와 CPU), Energy(배터리 등), Memory 측면에서 더 효율적
- 작은 네트워크도 큰 네트워크와 비슷한 성능을 낼 수 있도록, 학습과정에서 큰 네트워크의 지식을 작은 네트워크에게 전달하여 작은 네트워크의 성능을 높이겠다는 목적

=>
Knowledge distillation 은 미리 학습시킨 Teacher network 의 출력을 내가 실제로 사용하고자 하는 작은 모델인 Student network 가 모방하여 학습함으로써, 상대적으로 적은 Parameter 를 가지고 있더라도 모델의 성능을 높이는 방법론

 

이미지 출처: https://nervanasystems.github.io/distiller/knowledge_distillation.html

 

 

 1. Loss function의 수식

Loss function의 왼쪽항은 아래 그림의 파란색 영역에 해당함. 

 

이는 student network의 분류 성능에 대한 Loss

ground truth와 student의 분류 결과와의 차이를 cross entropy loss로 계산함.

 

 

 

https://www.thedatahunt.com/trend-insight/vision-transformer

그래서 Vision Transformer (ViT)가 뭔데?

이미지 인식 및 처리 작업에서 높은 성능을 발휘하는 딥러닝 모델로, 자연어 처리(NLP) 분야에서 성공을 거둔 Transformer 구조를 컴퓨터 비전 분야에 적용한 모델

기존의 Convolutional Neural Networks(CNNs) 대신 Transformer 구조를 사용함으로써, 전역적인 이미지 정보를 적절하게 포착하고 처리

 

Vision Transformer는 이미지에서 전역적인 정보와 상호작용하는 요소들을 포착

다양한 컴퓨터 비전 작업에 높은 성능을 발휘

 

ViT는 이미지를 작은 패치로 분할하고, 패치를 벡터화한 뒤, Transformer의 인코더를 사용하여 이미지 내의 문맥 정보를 추출 ->  ViT와 CNN은 기본적인 구조와 작동 방식에서 차이

 

1.

- CNN은 지역 특징 추출에 적합한 구조를 가지며, 이미지의 공간적 정보를 보존하면서 인접한 픽셀 간의 관계를 탐색

- ViT는 패치 단위로 이미지의 전역적인 정보를 고려합니다. 이를 위해 Transformer의 어텐션(Attention) 메커니즘을 통해 문맥 정보를 학습하고, 이미지 분류와 같은 작업에 적용

 

2. 

CNN 모델은 컴팩트한 크기와 효율적인 메모리 활용 구조를 가지고 있어, 리소스가 제약된 환경에 적합한 모델

-> 가볍고 빠른 이미지 처리 시스템을 구축할 수 있으며 다양한 컴퓨터 비전 애플리케이션에서 우수한 정확도

 

Vision Transformers는 글로벌 의존성과 상황에 따른 이해를 이미지로 캡쳐할 수 있는 강력한 접근 방식을 통해 특정 작업에서 성능 향상 -> 모델 크기가 크고, 메모리 요구 사항이 높다는 단점

 

Vision Transformer 원리와 구조

08. PyTorch Paper Replicating - Zero to Mastery Learn PyTorch for Deep Learning

 

이미지 패치화: Vision Transformer는 입력 이미지를 고정 크기의 작은 정사각형 패치로 나눕니다.

 

일반적으로, 이미지는 (224 x 224)의 크기로 전처리되며, 그렇게 되면 16 x 16의 크기의 패치로 나뉩니다.

이렇게 자른 패치들을 신경망에 입력합니다.

 

  1. 패치 벡터화 및 위치 정보: 각 패치는 Flat한(1차원) 벡터 형태로 변환되며, 동시에 각 패치의 위치에 대한 정보가 추가됩니다. 이를 통해 Transformer는 이미지의 각 부분에 대한 위치 정보를 이해할 수 있게 됩니다.
  2. Transformer 인코더: 벡터화하고 위치 정보를 적용한 패치들을, Transformer 인코더의 입력으로 사용합니다. 인코더는 Self-Attention 및 Feed-Forward 신경망을 사용하여 이미지에서 복잡한 패턴과 문맥 정보를 추출합니다.
  3. 분류 토큰 및 MLP 헤드: 패치 벡터화 과정에서 특별한 분류 토큰(Classification Token)을 입력에 추가합니다. 이 토큰은 인코더를 거치면서 각 패치의 정보가 포함된 벡터로 변형되며, Transformer 인코더의 출력에서 이 토큰 부분을 사용하여 분류 작업을 수행하는 데 쓰입니다. 이를 위해 MLP 헤드가 사용되며, 벡터를 소프트맥스 활성화 함수가 적용된 최종 분류 결과로 변환합니다.

 

그러나

이러한 과정으로 중간 사이즈의 데이터셋에 학습을 시킬 경우, 별도의 강력한 Regularization 없이는 기존의 ResNets 대비 훌륭한 성능을 보여주지는 못한 것으로 밝혀졌습니다.

이는 Transformer 구조 자체가 앞에서 언급한 CNN에 비해 inductive bias가 부족한 한계로 지목되었는데요.

많은 양의 데이터가 없으면 일반화가 제대로 이루어지지 않는다는 특징이 있습니다.

-> 그러나 크고 방대한 양의 (약 1,400만~3억 장) 데이터를 가지고 학습을 시킬 경우, 위의 구조적 한계를 극복

 

https://www.learnpytorch.io/08_pytorch_paper_replicating/