(512) : transformer의 encoder와 decoder에서 정해진 input/output 크기(임베딩 벡터의 차원), 다음층의 인코더와 디코더로 값을 보낼 때에도 차원 유지
(6) : transformer에서 하나의 encoder와 decoder를 층으로 생각 했을 때, 몇 층으로 구성된지를 의미
(8) : 어텐션 사용시 여러 개 분할 후 병렬로 어텐션 수행하고 결과값을 하나로 합치는 방식에서 병렬 갯수
(2048) : transformer 내부 feed forward 신경망에서의 은닉층 크기
cf) RNN 에서는 encoder, decoder 에서 각각 하나의 RNN이 t개의 time-step을 가지는 구조
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/07ef4b52-8aee-440c-bc6f-d2a66bd7a144/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/07ef4b52-8aee-440c-bc6f-d2a66bd7a144/Untitled.png)
RNN과 다른 방식으로 단어의 위치정보를 알려줌
각 단어의 임베딩 벡터에 위치 정보들을 더해 모델의 입력으로 사용(positional encoding)
encoder에 입력된 벡터들에서 각 3개의 벡터를 만듦(Query, Key, Value)
이 벡터들은 입력 벡터에 대해 세 개의 학습 가능한 행렬들을 각각 곱해 만들어짐
이 새 벡터들이 기존 벡터들 보다 더 작은 사이즈를 가짐
반드시 작은 것은 아니지만 multi-head attention의 계산 복잡도를 일정하게 만들고자한 구조적 선택
self-attention 계산 시 단어와 입력 문장 속 다른 모든 단어들에 대해 각각 점수를 계산해야함
score = query vector key vector
#1 에 있는 단어의 self-attention의 첫 번째 점수 :
두 번째 점수 :
3,4 단계 : 점수들을 8(key vector size인 64의 제곱근)로 나눔
softmax : 각 단어의 표현들이 얼마나 들어갈 것인지 결정
5단계 : 입력 각 단어의 value vector에 이 점수를 곱하는 것(무관한 단어는 지우는 단계)
6단계 : 이 점수로 곱해진 weighted value vector 들을 다 합해버림, 이 단계의 출력이 현재 위치에 대한 self-attention layer의 출력
이 결과로 나온 벡터(실제로는 행렬 형태)를 feed-forward 신경망으로 보냄
https://blog.promedius.ai/transformer/