🔗 관련 문서: Wikipedia - Transformer Model
디코더(Decoder)는 인코더에서 추출된 특징을 기반으로 원하는 형태의 출력을 생성하는 모듈이다. 자연어 처리, 이미지 캡셔닝, 음성 합성 등 다양한 분야에서 결과 생성에 필수적인 역할을 한다.
디코더는 인코더의 출력을 바탕으로 최종 결과를 생성하는 신경망 구조이다. 입력 데이터의 종류(텍스트, 이미지, 음성 등)와 태스크에 따라 다양한 구조로 설계된다.
일반적으로 Encoder-Decoder 구조에서 사용되며, 언어 모델에서는 이전 출력과 인코더 정보를 조합하여 다음 출력을 예측한다.
어텐션 메커니즘은 디코더에서 매우 중요한 역할을 하며, 입력의 어느 부분에 집중할지 결정한다.
다음 문장이 우리가 번역하고자 하는 입력 문장이라고 가정해 보자.
"The animal didn't cross the street because it was too tired."
이 문장에서 "it"은 무엇을 의미하는가? street를 의미하는가? 아니면 animal을 의미하는가?
인간에게는 간단한 질문이지만, 알고리즘에게는 간단하지는 않다.
모델이 "it"이라는 단어를 처리할 때,
자기 주의(self-attention)는 "it"을 "animal"과 연관시킬 수 있게 한다.
모델이 각 단어(입력 시퀀스의 각 위치)를 처리할 때,
자기 주의를 기울이면 입력 시퀀스의 다른 위치에서
이 단어를 더 잘 인코딩하는 데 도움이 되는 단서를 찾을 수 있다.
RNN에 익숙하다면 숨겨진 상태를 유지하면
RNN이 처리 중인 현재 처리 중인 단어/벡터의 표현을 통합할 수 있는 방법을 생각해 보라.
자기 주의(self-attention)은 트랜스포머가 다른 관련 단어의 '이해'를 현재
처리 중인 단어로 굽는 데 사용하는 방법이다.