- 최근 computer vision domain에서도 transformer backbone이 주류
![](https://velog.velcdn.com/images/pluto_0905/post/c84bd0bc-9cec-4ad3-bff5-6ab9644662a6/image.png)
-
Natural Language Processing (NLP)에서 생기는 문제점을 해결하기 위해 고안
-
Long-term dependency
- 기존 모델들은 sequence data를 처리할 때 데이터를 순차적으로 처리함
- 데이터 길이가 길어지면 정보 손실이 발생함
-
Attention: Next token을 예측할 때, sequence 내의 다른 위치에 있는 정보들과의 상관 관계가 중요함
- a) The animal didn’t cross the street because it was too tired.
- b) The animal didn’t cross the street because it was too wide.
CNN 한계점
- Computer vision 분야에서도 NLP와 같은 문제에 발생
- Long-range dependency: 멀리 떨어진 두 물체에 대한 context를 학습하기 힘듦
- Attention: 이미지 내의 여러 object들에 대한 상관 관계를 알 수가 없음
- Transformer가 기존 NLP의 문제점을 어떻게 해결했는지 분석
- 이후, 동일한 메커니즘을 computer vision에도 적용 (ViT)
![](https://velog.velcdn.com/images/pluto_0905/post/d87cda99-bf49-41f9-a753-d908cec5f229/image.png)
Sentence to Embedding
Tokenization
-
문장을 토큰 단위로 분할
- Token은 단어, 구두점 등 ‘의미 있는 단위'를 나타냄
- 문장의 시작이나 끝을 나타내는 token도 추가
- 각 token에 사전에 정의된 단어번호 할당
![](https://velog.velcdn.com/images/pluto_0905/post/be665ff8-87b0-46f1-99e8-5331aa002505/image.png)
Word Embedding
![](https://velog.velcdn.com/images/pluto_0905/post/334d5836-0144-4ca7-8eac-b9db5f4f5e38/image.png)
- Sentence: “Write a story”
- Token: [“Write”, “a”, “story”]
- Embedding w/ hidden_size 4: [[0.5, 0.1, 0.2, 0.9], [0.7, 0.12, 0.35, 0.9], [0.1, 0.12, 0.56, 0.99]]
- Shape
- () → (num_tokens) → (num_tokens, hidden_size) or (num_words, hidden_size) or (seq_len, hidden_size)
Positional Encoding
- Word embedding은 단어의 위치까지 반영하지는 않음
- 그러나 다른 위치에 있는 같은 단어는 다른 의미를 가질 수 있음
- 위치 정보(positional encoding)를 word embedding에 더하여 위치 정보를 추가
- 최근에는 위치 정보 역시 학습 가능한 파라미터로 두는 경우가 많음
- 즉, nn.Embedding을 정의하고, 모델 업데이트 과정에서 이를 학습
import torch
import torch.nn as nn
seq_len =10
embedding_dim = 768
embeddings = nn.Embedding(seq_len, embedding_dim)
print(embeddings(torch.LongTensor([0,1,2,3])))
print(embeddings(torch.LongTensor([0,1,2,3,])).shape)
![](https://velog.velcdn.com/images/pluto_0905/post/8eb3f354-cb15-4c52-ae95-78d8c2828e8e/image.png)
여기까지 Recap
![](https://velog.velcdn.com/images/pluto_0905/post/5ba89322-ca39-44d8-80bf-2234cbbeb802/image.png)
Self Attention
![](https://velog.velcdn.com/images/pluto_0905/post/5d2f9b76-25d5-4b47-a987-a835fb008b1a/image.png)
여기까지 Recap
![](https://velog.velcdn.com/images/pluto_0905/post/c0301eb6-0cd2-42ac-ac3b-fe2a18933f1b/image.png)
Feed forward
![](https://velog.velcdn.com/images/pluto_0905/post/77442d1f-9bd9-49a5-a9f9-408587bec5d3/image.png)
- Add & Norm: Attention이 반영된 embedding + 반영되기 전 embedding
- 이후, sequence context가 반영된 embedding을 fully connected layer에 통과
- Multi-head attention과 feed forward를 합하여 encoder라고 정의함
- Encoder를 여러개 쌓아 깊은 네트워크를 만들 수 있음
![](https://velog.velcdn.com/images/pluto_0905/post/45c529e1-d651-4c1a-8031-19d2aa3e7912/image.png)