[CS231n] 강의11 Attention and Transformers (2) 리뷰
본 글은 2022년 5월에 강의한 스탠포드 대학의 Attention and Transformers 2022년 강의를 듣고 정리한 내용입니다.
개인 공부 목적으로 작성되었으며, 설명이 맞지 않거나 글 오타가 있으면 알려주시길 바랍니다.
원본 링크 : cs231n.stanford.edu
한글 번역 링크 : aikorea.org - cs231n
강의 링크 : youtube - 2017 Spring (English)
Attention is all you need
- 2017년 google에서 발표한 transformer는 rnn이나 lstm을 사용하지 않고 attention 만으로도 자연어 처리 모델을 학습할 수 있음을 보여주었다.
- transformer 모델은 encoder-decoder 구조뿐만 아니라, self-attention, multi-head attention, positional encoding 등이 나오는데, 이전 글에서 다룬 적이 있다.
- “attention is all you need” 논문 리뷰는 추후에 올리도록 하겠다.
Image Captioning using Transformers
- attention 원리를 이해했다면 위 그림도 쉽게 이해가 될 것이다.
- one-to-many 모델로, encoder에서 입력은 이미지 $I$, 출력은 시퀀스 $y=y_1,y_2,…,y_T$가 될 것이다.
- $c=T_w(z)$은 encoder 식이다.
- $c$ : context vector의 약어
- context vector : 인코더가 입력 이미지 $I$를 받아 이해하고 만든 결과를 벡터화 1
- $T_w(.)$ : transformer encoder 모델
- $z$ : spatial CNN features
- $c$ : context vector의 약어
- decoder는 encoder에서 생성한 context vector와 출력 시퀀스 $y_t$ 정보를 이용해 새로운 시퀀스를 내보내는 과정이다.
- $y_t=T_D(y_{0:t-1}, c)$은 decoder 식이다.
- $T_D(.)$ : transformer decoder 모델
- 출력 시퀀스에서 [START]와 [END]를 지정해 한 블록 단위가 언제 시작하고 언제 끝나는지를 명시한다.
- [END] 표시가 나올 때까지 decoder가 작동된다.
The Transformer encoder block
- transformer의 encoder를 자세히 살펴본다.
- N개의 encoder 블록을 만들어 놓는다.
- In vaswani et al. 논문에서는 $N=6, D_q=512$로 설정했다.
- 입력 시퀀스의 벡터화는 위치 정보를 포함하기 위해 positional encoding를 거친다.
- Multi-head self-attention에서 Attention이 모든 벡터들을 어텐션한다.
- 이 방식은 학습 파라미터 수를 늘려 모델의 복잡도를 올리는 방법이다. 2
- Residual connection을 통해 computational cost를 줄이고, 속도도 빠르게 forward 한다.
- 각 벡터마다 레이어 정규화(Layer Normalization)를 적용한다.
- 다층 퍼셉트론(MLP)이 각 벡터마다 적용된다.
- 그 전에 다시 Residual connection을 거쳐 성능을 향상시킨다.
- transformer encoder block이 반복되는데, 여기서 각 레이어는 서로 다른 파라미터를 가진다.
- transformer encoder는 높은 확장성(scalable), 높은 병렬성(parallel), 그렇지만 높은 메모리 사용량(memory usage)이 특징이다.
The Transformer decoder block
- 다음은 트랜스포머의 decoder block 이다.
- 구조를 보면 알겠지만, 대부분의 레이어가 encoder와 거의 같다는 걸 확인할 수 있다.
- decoder에서 multi-head attention block은 transformer encoder에서 나온 출력값(output)들을 모두 어텐션한다.
- 출력값은 context vectors이다.
- 여기서, key(k), value(v), query(q)가 작동한다.
- 즉, decoder의 multi-head attention은 self-attention가 아니다.
이미지출처 3
- 위 그림은 multi-head attention 구조를 좀 더 구제적으로 나타낸 것이다.
-
scaled dot-product attendtion = $Attention(Q, K, V)=$$softmax(\sqrt{\frac{QK^T}{\sqrt{d_k}}})V$
이미지출처 3
Comparing RNNs to Transformer
- transformer를 RNN과 비교해보면 다음과 같다.
RNN
- Pros
- LSTM은 긴 문장인 입력에 잘 작동한다.
- Cons
- 순서가 지정된 입력의 순서를 예상한다.
- sequential computation : 이후의 hidden 상태는 이전 값이 끝난 후에만 계산할 수 있다.
Transformer
- Pros
- 긴 시퀀스에서 잘 작동한다. 각 attention 계산은 모든 입력을 살펴본다.
- positional encoding을 이용하여 순서가 정해져있거나 정해져있지 않은 시퀀스에서 잘 작동한다.
- parallel computation : 모든 입력에 대한 alignment와 attention은 병렬로 잘 수행된다.
- Cons
- 많은 메모리가 필요하다. NxM의 alignment와 attention 스칼라가 계산되어야 하고 단일 self-attention head가 저장되어야 한다.
- 하지만, GPU가 크면 클수록 이 단점을 보완할 수 있다.
- 많은 메모리가 필요하다. NxM의 alignment와 attention 스칼라가 계산되어야 하고 단일 self-attention head가 저장되어야 한다.
Image Captioning using ONLY transformers
- transformer를 사용하면 CNN을 굳이 안 써도 된다.
- 이미지 픽셀을 나눠 자연어 처리하듯이 하면 된다.
- 말 그대로 attention 만 사용하면 된다.!!
- 위 실험 결과를 봐도 알 수 잇듯이 이미 vision transformer(ViT)는 기존 CNN 아키텍처의 성능을 앞질렀다.
- Vision Transformer의 다양한 형태가 나오고 있으며, 굉장히 핫하게 연구되고 있다.
- 위 실험 결과는 ViT 중 SOTA를 기록한 DeiT이다. CNN의 SOTA인 EfficientNet보다 성능이 월등히 높은 걸 알 수 있다.
댓글남기기