본 포스팅은 충남대 고영준 교수님의 강의자료를 바탕으로 작성한 글입니다.
Attention
Attention에서는 query, key, value가 필수이다.
일단 key와 value는 pair한 관계이다.
attention은 우리가 어디에 집중해야할지를 알려준다.
그럼 그 가중치는 어떻게 구할까?
v의 중요도인 a를 계산하기 위해 우리는 v의 짝인 k를 사용한다.
input(query)와 key의 유사도에 기반해서, key가 query에 더 유사할 수록, attention 가중치는 커진다.
그럼 q와 k의 유사도를 고려하면 되는 것!
그럼 저 유사도는 어떻게 결정할까?
우린 저 둘의 내적을 계산한다.
이걸 기억하면 두 벡터의 방향이 비슷할 수록 내적이 커진다는 사실을 인지할 수 있다.
그럼 이제 attention scores를 다시 쓸 수 있다.
이렇게 말이다! 여기서 s, k, q는 모두 bold체이므로 벡터이다.
그런데 여기서 이 kq는 attention 가중치의 조건을 만족하진 않는다. 이건 단지 attention score!
attention weight의 조건은, 모든 가중치의 합이 1이며, 각 가중치는 0이상이어야 하는 것!
그럼 이걸 어떻게 바꿀까?
저 score에 softmax function을 적용하는 것이다!
이렇게 말이다. 여기서 저 t처럼 생긴 문자는 tau인데, 이는 softmax를 통제하기 위한 파라미터이며, 여기선 sqrt(d)로 정했다.
그럼 최종적으로 나타내면,
이게 될 것이고, 이를 다시 간단히 써본다면
가 될 것이다.
결과적으로 요약하여 표현하자면,
value에 대한 가중치 a를 구할 것인데, 이때 value의 쌍인 key를 사용할 것이다.
그 key와, 우리의 입력인 query 사이 유사도를 구하면 이게 attention score이고,
이를 가중치처럼 만들기 위해 softmax를 적용시켜 attention weight를 구한다.
그럼 이 attention weight와 value를 가중합하여 output을 구할 수 있다.
Self-Attention
위 attention 메커니즘에 기반해서, 새로운 작동을 정의한 것.
Xi를 input이라 하고, 우린 Q, K, V를 얻는다.
이 Q, K, V는 각각 Q=W_q*X, K = W_k*X, V=W_v*X 이다.
각 가중치들은 행렬로 나타나고, 이들은 선형 레이어들로 표현된다.
Linear classifier
Img -> f(x, W) -> #class 개의 class score
셀프어텐션은 입력을 출력으로 바꿀 때, 입력들 간의 유사성을 고려하는 과정으로 생각할 수 있다.
예를 들어 보겠다. 일단 각 Q, K, V를 모두 이렇게 생각해본다.
그 후, attention score의 계산을 위해 q와 k를 곱해서 a를 만든다.
이제 그럼 attention weight 계산을 위해 softmax를 하고, 이 가중치를 value와 곱해서 Y를 내놓는 것!
이는 RNN과는 다르게, 입력에 대한 의존성을 위한 많은 층이 필요하진 않다.
Multi-Head Self-Attention (MSA)
이건 집단 conv 기반 아이디어이다.
이렇게 쓰는 것~
어텐션 메커니즘의 확장성
- 인풋 크기가 커진다고 해서 파라미터 개수가 많아지진 않는다
- transformer 아키텍처를 이미지 및 오디오 같은 다른 도메인으로 확장 가능
Positional encoding
이건 데이터의 위치 정보를 더해주는 것인데,
장 : 위치와 상관없이 정보 전달 가능
단 : 입력 순서를 고려하지 않음 (위치정보가 중요함에도 불구하고) -> 입력 인덱스 나타내는 특징을 신경망에 제공하면 해결 가능
Transformer block
구조
멀티헤드 셀프어텐션이 입력의 가중합을 계산
입력의 가중합으로 MLP는 비선형 변환 수행
각 단계에서 residual connection과 layer 정규화 기술이 훈련 안정성을 위해 추가됨
종류
1. Post-norm transformer block
이게 보통 오리지널이고, residual connection 뒤에 층 정규화 위치
2. Pre-norm transformer block
층 정규화가 residual connection 안에 위치
실습에서 주로 쓰이고, 훈련이 더 안정적임.
그리고 이 transformer block들이 sequence로 연결된 것이 transformer!
block 개수가 깊이, Q, K, V의 차원이 width...
Cross Attention
두 개의 다른 입력의 상관관계 계산을 위해 사용. ex) 문장1, 문장2
하나의 입력은 Q로, 나머지 하나의 입력은 V&K
Self Attention과 다른 것은, Q에 들어오는 입력과 V&K에 들어오는 입력이 다르다는 것!
Vision Transformer
- input tensor : #token * hidden embedding dim
그럼 Img는 H*W*3인데, 이걸 어떻게 N*C로 바꿀까?
1. 일단 이미지의 token은, 이미지를 패치별로 나눠서 각 패치를 모두 token으로 볼 수 있다.
2. 그 패치를 가지고 네트워크 초기 단계 생성 (Patchify stem)
3. Input인 patch에 대해 이를 vector로 변경 (Token embedding)
4. 각 패치의 공간벡터 생성 (Position embedding)
5. Transformer Encoder
6. Class token 생성
7. Classification head로 예측 클래스 분류
8. 예측 결과 출력
이 비전 트랜스포머를 이용한 모델은 ViT인데, 관계는 아래와 같다.
이 ViT 모델은 ImageNet 데이터에선 과적합 됐지만, 더 큰 데이터에서는 훨씬 좋다.
저 ImageNet1K 데이터에서는 ViT보다 ConvNet(BiT)가 좋은데, 그 이유는 뭘까?
- ConvNet은 공간적 정보를 포함한다. ViT는 공간 정보가 없으므로 데이터로부터 그거까지 학습해야 하기에 큰 데이터셋 필요.
- ViT는 파라미터가 많아 작은 데이터셋에는 과적합되기 쉽다.
MLP Mixer
저 커다란 MLP 부분이 원래는 MSA인데, 그걸 MLP로 바꾼 것.
즉 모든 구조가 MLP로 이루어진 것!
원래 10*10*300 구조를 VGG 초창기 땐 (30000, )로 바꿨었는데, 이젠 100*300으로 바꾼다.
Vision Tasks
Two-stage detectors에선, box N개를 예측해서 그 box가 객체인지 아닌지 판별한다.
그치만 충분히 많은 고정 N예측을 높은 신뢰도로 생성할 수 있다면 region proposal이 필요할까?
Detection with Transformer(DETR)
1. 웬만하면 이미지에서 객체가 100개를 안 넘기 때문에, 일단 N=100으로 정한다.
2. 그리고 backbone을 CNN을 써서 이미지 특성을 추출하고,
3. positional encoding을 찾아서
4. backbone과 positional encoding을 합해서 Transformer encoder를 통과시킨다.
각 transformer block은 MSA와 FFN이 있다.
5. transformer decoder를 통과시킨다.
6. prediction head를 통과시킨다.
'AI > 컴퓨터비전' 카테고리의 다른 글
Object Detection (0) | 2024.12.16 |
---|---|
Image Warping (new!) (0) | 2024.12.16 |
Image Alignment (1) | 2024.12.16 |
SIFT (0) | 2024.12.16 |
Image Classification (0) | 2024.12.15 |