1. Transformer
2017년에 구글이 제안한 자연어처리 모델로, 컨볼루션 신경망과 순환 신경망 구성요소를 모두 사용하지 않고 Attention만으로 구현한 신경망 구조
•
Attention 만으로 구현한 모델
◦
인코더-디코더 구조이지만 RNN을 사용하지 않음
◦
문장의 모든 단어를 한꺼번에 입력으로 넣고, self-attention을 수행함
◦
단어는 임베딩을 통해서(Input Embedding Layer) 차원의 임베딩 벡터로 표현
→ T 개 단어를 가진 문장은 행렬이 되는 것!
◦
Position Encoding 을 추가해서 전체 문장 내에서 단어의 위치 정보를 추가
1.1 Model Architecture
인코더로부터 정보를 받아 디코더가 출력 결과를 만들어내는 구조
1. Input Embedding Layer
•
단어 임베딩을 통해서 입력 단어를 d_{model}의 차원 벡터로 변환
◦
T개 단어로 구성된 문장을 한꺼번에 입력할 때는 크기의 행렬 S를 입력
•
단어의 순서정보를 기억하기 위한 Positional Encoding 도입
◦
위치정보를 표현한 P를 입력 벡터 S에 더해 X행렬을 만듦
◦
각 임베딩 벡터에 Positional Encoding값을 더하면 같은 단어라도 문장 내 위치에 따라 Transformer의 입력으로 들어가는 임베딩 벡터의 값이 달라져서 순서 정보를 고려한 임베딩 벡터를 만들 수 있음
◦
삼각함수를 이용한 Positional Encoding 행렬 생성
▪
각 pos 별로 벡터의 각 차원 (2i, 2i+1)에 고유한 값을 생성하는 방식으로 position encoding 생성
•
i : 모델 차원에 대한 인덱스 값 ( 이면, i=0,1,….,7}
•
sin과 cos은 서로 다른 위상을 가진 함수이고, 서로 직교하는 성질이 있기 대문에 모델이 입력 벡터간의 상대적 위치 정보를 더 효과적으로 계산가능
2. Encoder -6 Encoder blocks
•
각 인코더는 Self Attention을 수행하는 Multi-head Attention(MHA)과 완전연결층인 Feed Foward(FF) 층으로 구성됨
◦
Encoder의 MHA 층
▪
self-attention을 담당하고, 문장을 구성하는 단어끼리의 attention을 처리
▪
인코더로 입력된 문장의 단어벡터들이 Query=Key=Value 역할을 함(Self-Attention)
◦
Self-Attention
한 문장의 길이가 T개의 단어여서 T개의 단어 각각이 Query이고 ,하나의 행렬 Q로 표현됨
▪
입력 임베딩 X가 Key, Query, Value 값으로 동일하게 사용되고, 자신의 가중치 로 X를 변환해서 사용
•
•
논문에서 는 로 지정
•
가중치 벡터 는 학습으로 알아냄 (trainable-parameters)
▪
Self-Attention 예시
◦
Multi-Head Attention(MHA)
▪
여러 개의 헤드를 가져서 병렬적으로 Self-Attention 연산을 수행
→ 논문에서는 헤드수가 8개여서 차원의 Q,K,V를 각 헤드에서 어텐션 수행
▪
각 헤드는 고유한 변환 행렬을 가지고 self-attention을 독립적으로 수행하고 추후 합쳐서 서로 상호보완적인 역할을 해 성능이 향상됨
•
•
◦
는 차원변환 행렬
3. Decoder - 6 Decoder blocks
•
각 디코더 블록은 2개의 MHA 층과 1개의 FF층으로 총 3개의 층으로 구성됨
◦
Decoder MHA 층
▪
인코더와 디코더 사이의 attention을 담당, Query, Key, Value가 동일하지 않아서 Self-Attention은 아님
•
디코더가 인코더의 정보를 기반으로 현재 출력 토큰을 생성할 수 있도록함
◦
Query : 디코더 출력데이터 벡터
◦
Key, Value : 인코더 벡터 → 인코더의 컨텍스트 정보 활용
▪
Decoder의 Masked MHA 층, Self-Attention 수행
•
디코더의 입력 시퀀스들(이전 시점에서 생성된 토큰들)이 Query=Key=Value 값으로 적용됨
•
Masking을 통해서 이전 시점의 토큰들만 참고해서 다음 출력을 생성할 수 있도록 함
→ Teacher forcing과 Self Attention 방식의 차이를 극복하기 위해 mask 적용
◦
학습 단계에서는 Self-Attention과 Teacher forcing 중 선택가능, 추론 단계에서는 Self-Attention 만 가능
◦
Transformer는 학습단계에서는 Teacher forcing(Masking), 추론에서는 Self-Attention을 사용
•
Masking은 QK^T 행렬의 대각선 위쪽에 있는 모든 요소를 아주 큰 음수로 설정
•
디코더는 시작 심볼인 <sos> 를 입력받아 종료 심볼 <eos>가 나올때 까지 연산을 진행
4. Add&Norm layer
각 층 사이에는 Add&Norm 층이 추가되어 있음
•
Add : residual connection 수행
◦
모델의 이전 레이어 or 입력 임베딩인 X와 MHA를 거친 컨텍스트 정보 C를 연결하는 잔차연결 수행
◦
X와 C를 더함으로써 원래의 입력정보를 유지하면서 어텐션 정보를 추가
•
Norm : layer normalization 정규화
•
5. FF layer (point-wise Feed-Forward Layer)
•
기존 완전연결층은 벡터와 벡터를 연결하는데 여기서는 크기의 행렬과 차원의 벡터를 연결
◦
▪
X’ : 크기의 행렬
▪
W_1 :
1.2 인코더, 디코더에서 학습 시 알아내야할 가중치
논문에서 주어진 파라미터
•
= 512
•
헤드 수 h = 8
→ = 512/8 = 64
→
Encoder
1.
MHA 층
•
가중치 집합은 로서 총 개
◦
: Multi-head Attention의 최종 출력 가중치
•
Q,K 와 관련된 가중치 행렬은
•
V와 관련된 가중치 행렬은
•
총 가중치 개수 = 8 * 3 * 512 * 64 + 512*512 = 1,048,776
2.
FF 층
•
개의 가중치 가지고, 의 크기는 , 의 크기는
•
•
한 블록 당 가중치 수 = 512*(2048+1)+2048*(512+1)
3.
인코더의 총 가중치 개수
6(1,048,576_2,099,712) = 18,889,728
Decoder
1.
두 MHA층의 각각의 가중치 개수는 인코더의 MHA와 같음
→ 2*1,048,576 = 2,097,152
2.
FF층 또한 인코더와 동일
→ 2,099,712
3.
디코더의 총 가중치 개수 = 6(2,097,152 + 2,099,712)= 25,181,184