먼저 인코더 블록 구조를 살펴보겠습니다. 참고로 모든 블록 구조는 동일합니다. 하나의 인코더는 셀프 어텐션(self-attention)과 전방향 신경망(feed forward neural network)으로 구성되어 있습니다. 인코더에서는 단어를 벡터로 임베딩하며, 이를 셀프 어텐션과 전방향 신경망으로 전달합니다. 이때 셀프 어텐션은 문장에서 각 단어끼리 얼마나 관계가 있는지를 계산해서 반영합니다. 즉, 셀프 어텐션으로 문장 안에서 단어 간 관계를 파악할 수 있습니다. 셀프 어텐션에서 파악된 단어 간 관계는 전방향 신경망으로 전달됩니다.
▲ 그림 10-11 어텐션의 인코더 상세 구조
이번에는 디코더를 알아보겠습니다. 디코더는 층을 총 세 개 가지고 있는데, 인코더에서 넘어온 벡터가 처음으로 만나는 것이 셀프 어텐션 층입니다. 즉, 인코더와 동일하다고 이해하면 됩니다. 셀프 어텐션 층을 지나면 인코더-디코더 어텐션(encoder-decoder attention) 층이 있습니다. 인코더-디코더 어텐션 층에서는 인코더가 처리한 정보를 받아 어텐션 메커니즘을 수행하고, 마지막으로 전방향 신경망으로 데이터가 전달됩니다.
▲ 그림 10-12 어텐션의 디코더 상세 구조