트랜스포머 살펴보기

1 분 소요

Transformer

트랜스포머(Transformer)은 기계 번역(machine translation) 등 시퀀스-투-시퀀스(sequence-to-sequence) 과제를 수행하기 위한 모델입니다. 여기에서 시퀀스란 단어(word) 같은 무언가(something)의 나열의 의미합니다.

시퀀스-투-시퀀스 과제를 수행하는 모델은 대개 인코더(encoder)와 디코더(decoder) 두 개 파트로 구성됩니다. 인코더는 소스 시퀀스의 정보를 압축해 디코더로 보내주는 역할을 합니다. 그리고 디코더는 인코더가 보내준 소스 시퀀스 정보를 받아서 타깃 시퀀스를 생성합니다. 예를 들어 기계번역에서는 인코더가 한국어 문장을 압축해 디코더에 보내고, 디코더는 이를 받아 영어로 번역합니다.

트랜스포머의 최종 출력, 즉 디코더 출력은 타깃 언어의 어휘 수만큼의 차원으로 구성된 벡터(vector)입니다. 이 벡터의 특징은 요솟(element)값이 모두 확률이라는 점입니다.

트랜스포머의 학습(train)은 인코더와 디코더의 입력이 주어졌을 때 정답에 해당하는 단어의 확률 값을 높이는 방식으로 수행됩니다. 학습 과정 중 인코더, 디코더 입력이 이번 시점의 정답에 해당하는 단어의 확률은 높이고 나머지 단어의 확률은 낮아지도록, 모델 전체를 갱신합니다.

이러한 방식으로 말뭉치 전체를 반복 학습하면 한국어-영어 기계 번역을 성공적으로 수행할 수 있습니다.

트랜스포머의 인코더는 블록(block)을 수십 개 쌓아서 구성합니다. 인코더 블록은 다음과 같은 세 가지 요소로 구성돼 있습니다.

  • 멀티 헤드 어텐션(Multi-Head Attention)
  • 피드포워드 뉴럴 네트워크(FeedForward)
  • 잔차 연결 및 레이어 정규화(Add & Norm)

디코더 쪽 블록의 구조도 인코더 블록과 본직적으로는 다르지 않습니다. 다만 마스크를 적용한 멀티 헤드 어텐션(Masked Multi-Head Attention)이 인코더 쪽과 다르고, 인코더가 보내온 정보와 디코더 입력을 함께 이용해 멀티 헤드 어텐션을 수행하는 모듈이 추가됐습니다. 디코더 블록은 다음과 같은 요소로 구성됩니다.

  • 마스크를 적용한 멀티 헤드 어텐션(Masked Multi-Head Attention)
  • 멀티 헤드 어텐션(Multi-Head Attention)
  • 피드포워드 뉴럴 네트워크(FeedForward)
  • 잔차 연결 및 레이어 정규화(Add & Norm)

트랜스포머 구조에서 멀티 헤드 어텐션은 셀프 어텐션(self attention)이라고도 불립니다. 우선 어텐션(attention)은 시퀀스 입력에 수행하는 기계학습 방법의 일종입니다. 어텐션은 시퀀스 요소들 가운데 태스크 수행에 중요한 요소에 집중하고 그렇지 않은 요소는 무시해 태스크 수행 성능을 끌어 올립니다.

기계 번역에 어텐션을 도입한다면 타깃 언어를 디코딩할 때 소스 언어의 단어 시퀀스 가운데 디코딩에 도움되는 단어들 위주로 취사 선택해서 번역 품질을 끌어 올리게 됩니다. 즉, 어텐션은 디코딩할 때 소스 시퀀스 가운데 중요한 요소들만 추립니다.

셀프 어텐션이란, 말 그대로 자기 자신에 수행하는 어텐션 기법입니다. 입력 시퀀스 가운데 태스크 수행에 의미 있는 요소들 위주로 정보를 추출한다는 것이죠.

셀프 어텐션은 쿼리(query), 키(key), 밸류(value) 세 가지 요소가 서로 영향을 주고 받는 구조입니다. 트랜스포머 블록에는 문장 내 각 단어가 벡터(vector) 형태로 입력됩니다.

새롭게 만들어지는 벡터는 문장에 속한 모든 단어 쌍 사이의 관계가 녹아 있습니다. 모든 시퀀스를 대상으로 셀프 어텐션 계산이 끝나면 그 결과를 다음 블록으로 넘깁니다. 이처럼 트랜스포머 모델은 셀프 어텐션을 블록(레이어) 수만큼 반복합니다.


참고문헌

[1] ratsgo’s blog

댓글남기기