Transformer 큰 그림

transformerarchitecturemental-model

Transformer를 처음 볼 때 가장 먼저 잡을 구조는 세 덩어리다.

token ids
  -> embedding
  -> attention
  -> MLP/FFN
  -> output

여기서 각 덩어리는 하는 일이 다르다.

embedding : token id를 벡터로 바꾼다.
attention : 토큰들이 서로를 참고하게 만든다.
MLP/FFN   : 각 토큰의 벡터 표현을 깊게 변환한다.

Transformer block은 이 중 attention과 MLP/FFN을 반복하는 구조다.

Token IDs [B, T] 정수 id
Embedding [B, T, D] token vector
Attention [B, T, D] token mixing
MLP / FFN [B, T, D] feature transform
Logits [B, T, V] vocab scores
Transformer는 token id를 벡터로 바꾼 뒤, attention과 MLP/FFN을 반복해 같은 hidden shape을 유지하다가 마지막에 vocabulary 점수로 바꾼다.
embedding
  -> block 1: attention + MLP
  -> block 2: attention + MLP
  -> block 3: attention + MLP
  -> ...

이 관점이 중요한 이유는 attention과 MLP가 서로 다른 종류의 일을 하기 때문이다.

Attention은 토큰 사이를 섞는다. 예를 들어 “bank”라는 token이 “river” 근처에 있는지, “money” 근처에 있는지에 따라 다른 token을 참고해야 한다.

MLP/FFN은 각 토큰 내부의 feature를 바꾼다. attention으로 주변 문맥을 섞은 뒤, 그 토큰 위치의 벡터를 더 유용한 표현으로 변환한다.

먼저 외울 문장

Transformer = embedding + repeated(attention + MLP)

더 줄이면:

attention은 token mixing,
MLP는 feature transformation이다.

확인

  • Transformer를 세 덩어리로 나누면 무엇인가?
  • attention은 주로 토큰 사이와 토큰 내부 feature 중 어느 쪽을 섞는가?
  • MLP/FFN은 모든 토큰을 한꺼번에 서로 섞는가, 각 토큰 위치에서 따로 적용되는가?