Adventure Time - Finn 3
본문 바로가기
AI/ML

디코더 (Decoder) 구조

by hyun9_9 2026. 4. 29.

 

위에서 구현된 인코더는 총 num_layers만큼의 층 연산을 순차적으로 한 후에

마지막 층의 인코더의 출력을 -> 디코더에서 전달한다.

인코더 연산이 끝났으면 디코더 연산이 시작되어 디코더 또한 num_layers만큼 연산을 하는데 이때마다 인코더가 보낸 출력을 각 디코더 층 연산에 사용한다.

 

디코더의 입력과 문제점

디코더의 입력 

디코더도 인코더와 동일하게 임베딩 층과 포지셔널 인코딩을 거친후의 문장 행렬이 입력된다.

트랜스포머 또한 seq2seq 와 마찬가지로 교사강요를 사용하여 훈련되므로

학습과정에서 디코더는 번역할 문자에 해당되는 <sos> je suis étudiant 의 문장 행렬을 한번에 입력 받는다

그리고 디코더는 이문장 행렬로 부터 각시점의 단어를 예측하도록 훈련된다.

 

여기서 문제점

seq2seq의 디코더에 사용되는 RNN계열의 신경만은 입력단어를 매시점마다 순차적으로 입력 받으므로 

다음단어 예측에 현재 시점을 포함한 이전 시점에 입력된 단어들만 참고할수있다.

반면 트랜스포머는 문장행렬로 입력을 한번에 받으므로

현재 시점의 단어를 예측하고자 할떄 입력 문장 행렬로 부터 미래 시점의 단어까지도 참고할수있는 현상이 발생한다.

 

디코더의 첫번째 서브층 : 셀프 어텐션과 룩-어헤드 마스크

이를 위해 트랜스포머의 디코더에서는 현재 시점의 예측에서 현재 시점보다 미래에 있는 단어들을 참고하지 못하도록 룩-어헤드 마스크를 도입

룩- 어헤드 마스크는 디코더의 첫번째 서브층에서 이루어진다.

디코더의 첫번째 서브층인 멀티 헤드 셀프 어텐션 층은 인코더의 첫번쨰 서브층인 멀티헤드 셀프 어텐션 층과 동일한 연산을 수행한다.

자기 자신보다 미래에 있는 단어들은 참고하지 못하도록 다음과 같이 마스킹합니다.

  • ↑ 마스킹 된 후의 어텐션 스코어 행렬의 각 행을 보면 '자기 자신과 그 이전 단어들만을 참고'할 수 있음을 볼 수 있습니다.
  • 그 외에는, 근본적으로 셀프 어텐션이라는 점과, 멀티 헤드 어텐션을 수행한다는 점에서 인코더의 첫번째 서브층과 같습니다.

디코더의 두번째 서브층 : 인코더-디코더 어텐션

디코더의 두번째 서브층은 멀티헤드 어텐션을 수행한다는 점에서는 이전의 어텐션들과는 공통점이 있으나 셀프어텐션이 아니다.

디코더의 두번째 서브층 : Query : 디코더 행렬 / Key = Value : 인코더 행렬

디코더의 두번째 서브층을 확대해보면, 다음과 같이 인코더로부터 두 개의 화살표가 그려져 있습니다.

  • 두 개의 빨간 화살표는 각각 Key와 Value를 의미하며 이는 인코더의 마지막 층에서 온 행렬로부터 얻습니다.
  • 반면 검정화살표인 Query는 디코더의 첫번째 서브층의 결과 행렬로부터 얻는다는 점이 다릅니다.