-
TransformerCS 공부/AI 2023. 3. 22. 14:44
Sequential Model
- 길이가 달라지거나, 중간에 단어가 생략되거나, 밀리게 되면 모델링하기 힘듦
- 이 문제를 해결하기 위해 Transformer 제안
Transformer
- Attention 모델을 기반으로 한 첫번째 sequence 변환 모델
sequence to sequence 구조 Encoder: n개의 단어를 한꺼번에 처리
Encoder의 구조 - 각 단어를 기계가 해석할 수 있도록 특정 벡터로 표현
- Transformer가 각 단어를 특정 벡터로 인코딩함 (Self-Attention 사용)
- Self-Attention은 나머지 n-1개의 x 벡터도 고려함 -> dependencies가 있음
- Feed forward neural network는 dependency가 없고 평행함, 그냥 z1~z3를 한번 변환해주는 것에 불과함
Self-Attention 계산 방법
- 각 단어를 기계가 해석할 수 있도록 특정 벡터로 표현 (embedding)
- 하나의 단어가 주어졌을 때 (Query, Key, Value) 세개의 벡터를 만듦
- Score 벡터: 인코딩을 하고자하는 단어의 Query 벡터와 나머지 모든 단어에 대한 Key 벡터를 내적
- i번째 단어가 나머지 단어들과 얼마나 유사한지 측정하는 것과 같음
- Score 벡터를 normalize(정규화) 해줌
- Softmax 벡터: normalize 해준 score 벡터를 softmax를 취해줌
- Sum 벡터(최종 값): Softmax 벡터를 value 벡터와 weighted sum(가중치 합) 한다
Decoder
Decoder 하위계층(#1)은 encoder와 같음 - Transformer는 encoder의 가장 상위 layer의 K(key)와 V(value)를 decoder로 전송
- 출력 시퀀스는 자동 회귀 방식으로 생성됨
- Decoder의 self-attention의 softmax 단계 전에 미래 위치를 마스킹하여 미래의 정보를 활용하지 않도록 함
- Decoder의 Encoder-Decoder Attention layer은 아래 계층에서 Query 행렬을 만들고 인코더 스택에서 K,V를 가져온다는 점을 제외하고는 multi-head attention과 똑같이 작동
- Decoder 출력의 스택을 단어에 대한 분포로 변환
- softmax 계층은 점수를 확률로 바꿈. 확률이 가장 높은 셀이 선택되고 이와 관련된 단어가 출력이 됨
행렬에서 Q,K,V 계산하기
임베딩을 X에 압축하고 가중치 행렬( WQ,WK WV )에곱함 Score벡터부터 Sum까지 수식 한줄로 표현 가능 - Value의 차원이 Query 또는 Key의 차원과 달라도 됨
- 입력이 고정되더라도 주변 입력에 따라 많은 것이 달라질 수 있음 (많은 computation 필요)
- 단점: 입력이 길어질수록 처리하는데에 한계가 있음 + 메모리 차지
Multihead Attention
- 여러개의 attention
- input 문장이 들어옴
- 각각의 단어를 embedding함
- 8개의 head로 나눔 (self-attention 8번)
- Q,K,V 사용해서 attention 계산
- 결과 z 행렬 여러개를 쌓은 후 가중치 행렬과 곱해서 output layer 만듦
요약 Positional encoding을 해주는 이유?
- transformer의 특징상 같은 단어가 들어가면 순서가 바껴도 값이 똑같이 embedding 됨
- 하지만 언어는 순서가 중요하기 때문에 순서 정보를 부여해야함
positional encoding 방법 2가지
- 데이터에 0~1사이의 label을 붙인다. 0이 첫번째 단어, 1이 마지막 단어
- I 0 / love 0.5 / you 1
- 각 time-step마다 선형적으로 숫자를 할당 (첫번째 단어 는 1, 두 번째 단어는 2..)
- I 1 / love 2 / you 3
Vision Transformer
- 이전에는 언어적 측면에서만 Transformer를 사용했었는데 최근에는 vision에도 활용
- DALL -E: 텍스트만으로 이미지를 생성하는 OpenAI 머신러닝 모델
Further Questions
- 앞서 소개한 RNN 기반의 모델들이 해결하기 힘든 문제들을 Transformer은 어떻게 다루나요?
Sequential model이 길이가 달라지거나, 중간에 단어가 생략되거나, 밀리게 되면 모델링하기 힘든데 Transformer은 Attention 구조를 활용해 모든 단어를 한 번에 처리하고 다른 단어들과의 연관성까지 고려하기 때문에 이 문제를 해결할 수 있다.
- Transformer 의 Query, Key, Value 는 각각 어떤 기능을 하나요? NMT 문제에서의 예시를 구체적으로 생각해보세요.
하나의 문장을 번역하고자 할 때, encoder 내부의 attention 구조에서 번역하고자 하는 단어의 Query 벡터를 다른 단어들의 Key 벡터와 내적하여 유사도를 구하고 그 값을 정규화한 뒤 Value 벡터와 곱한 값을 모두 더해 다음 encoder로 넘긴다. 이런 식으로 반복하여 마지막 encoder 계층을 거친 값은 decoder를 통해 최종적인 값으로 생성된다.
참고 자료
The Illustrated Transformer
Discussions: Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments) Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Japanese, Korean, Persian, Russian, Spanish 1, Spanish 2, Vietnames
jalammar.github.io
'CS 공부 > AI' 카테고리의 다른 글
Auto-regressive model (0) 2023.03.23 Multi Head-attention 구조 파악하기 (0) 2023.03.22 torchvision에서 제공하는 transform 함수 (0) 2023.03.16 DataLoader (0) 2023.03.16 Dataset (0) 2023.03.15