지난 글에서 Transformer의 핵심적인 Building Block인 Attention을 정리해봤습니다. 이어서 Vaswani et al. (2017) 논문을 통해 현재 나오는 수많은 모델의 기반이 되고 있는 Transformer를 차근차근 이해할 수 있도록 정리해보았습니다.
이번 글에서는 Encoder에 이어서 Transformer를 구성하는 또 다른 Building Block인 Decoder의 구성 요소를 하나씩 살펴보겠습니다.
Revisit: Transformer의 전체 구조
지난 번에 보여드린 Transformer의 전체 구조 그림을 보면 Decoder가 대부분 익숙한 이름을 가진 요소들로 이루어져 있음을 알 수 있습니다. 하지만 조금 다른 부분도 존재합니다. 첫 번째 Multi-Head Attention 앞에는 Masked라는 생소한 단어가 붙어 있고, 두 번째 Multi-Head Attention은 Encoder의 출력값을 이용하는 것 같네요. 그럼 이어지는 글에서 기존과 다른 부분을 중점적으로 살펴보겠습니다.
다양한 Attention
Transformer에는 이미 Encoder에서 다룬 Self-Attention을 포함하여 총 3가지 종류의 Attention이 존재합니다. 이번 글에서 남은 2개의 Attention을 소개하겠습니다.
Masked Self-Attention
기존의 Encoder-Decoder 구조의 모델들은 순차적으로 입력값을 전달받기 때문에 $t+1$ 시점의 예측을 위해 사용할 수 있는 데이터가 $t$ 시점까지로 한정됩니다. 하지만 Transformer의 경우 전체 입력값을 전달받기 때문에 과거 시점의 입력값을 예측할 때 미래 시점의 입력값까지 참고할 수 있다는 문제가 있습니다. 이러한 문제를 방지하기 위해 나온 기법을 Look-ahead Mask라 하고, Look-ahead Mask를 이용하는 Attention을 Masked Attention이라 합니다. 그림을 통해 Look-ahead Mask가 동작하는 방식을 구체적으로 살펴보겠습니다.
3개의 입력값을 받았을 때 Self-Attention Value를 계산하는 상황을 가정하겠습니다. 그럼 Attention Score 행렬의 (i, j) 요소는 i번째 입력값(Query)와 j번째 입력값(Key, Value) 사이의 유사도를 의미한다고 볼 수 있습니다. 입력값이 순서를 가진 경우 i번째 입력값은 $1, 2, \cdots, i$까지의 값을 활용할 수 있기 때문에 행렬의 대각선 윗부분($i < j$)은 주어진 입력값이 볼 수 없는 미래 시점의 입력값과의 유사도일 것입니다. 따라서 해당 부분을 사용하게 되면 이미 미래를 모두 알고 있는 상황이 돼버리게 되는 것이죠.
이 문제를 해결하기 위해 Attention Score를 계산할 때 $i ≥ j$인 요소만 이용하도록 강제할 수 있지만, 이 방법은 행렬 연산의 이점을 충분히 누리기 어렵다는 단점이 존재합니다. 그래서 Transformer에서는 기존의 연산을 유지한채 Attention Value를 계산할 때 $i < j$인 요소들을 고려하지 않는 방법을 사용합니다. 구체적으로는 Attention Score 행렬의 대각선 윗부분을 $-\infty$로 변경(Look-ahead Mask)한 후 Softmax를 취하여 해당 요소들의 Attention Weight들을 0으로 만들어 Attention Value를 계산할 때 미래 시점의 값을 고려하지 않도록 만들어줍니다.
Encoder-Decoder Attention
Masked Self-Attention 이후에 나오는 Attention은 Query, Key, Value가 모두 같은 Self-Attention과 달리 Encoder의 출력값과 Decoder의 입력값을 이용하는 Encoder-Decoder Attention입니다. Bahdanau, Luong Attention에서와 같이 $t$ 시점의 예측에 도움이 되는 Encoder의 출력값들만 이용하고자 하는 것이 목적이므로 Query는 Decoder의 Masked Self-Attention을 거친 입력값이, Key와 Value는 Encoder의 출력값이 됩니다.
Encoder-Decoder
지금까지 Encoder, Decoder를 구성하는 모든 요소들을 다뤄봤습니다. (Decoder의 전체 연산 과정은 Encoder와 크게 다른 부분이 없어서 생략하였습니다 🙂 ) Transformer의 핵심적인 부분은 다 다룬 것 같은데 아직 하나의 글이 더 남아있습니다. 잘 생각해보면 Transformer는 순서가 있는 데이터를 다루기 위한 모델인데 지금까지 저희는 순서를 고려한 적이 없습니다. Attention과 Feed-Forward Network만 있는데 어떻게 순서를 고려할 수 있을까요? 다음 글에서 확인해보겠습니다!
잘못된 내용, 오타, 부정확한 문장 등 어떤 피드백이든 환영합니다. 감사합니다.
References
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30. [Link]
'Data Science > Maching Learning' 카테고리의 다른 글
Vision Transformer(1): Theory (2) | 2022.06.26 |
---|---|
차근차근 이해하는 Transformer(5): Positional Encoding (0) | 2022.05.18 |
차근차근 이해하는 Transformer(3): Multi-Head Attention과 Encoder (0) | 2022.05.06 |
차근차근 이해하는 Transformer(2): Single-Head Attention으로 이해하는 Encoder (2) | 2022.05.05 |
차근차근 이해하는 Transformer(1): Scaled Dot-Product Attention (2) | 2022.05.02 |