![Search icon](https://hackernoon.imgix.net/search-new.png?w=19&h=19)
2017년, 연구자 그룹(Google과 토론토 대학 소속)은 자연어 처리(NLP) 작업을 처리하는 새로운 방법을 도입했습니다. 그들의 혁신적인 논문 " Attention is All You Need "는 Transformer 모델을 제시했는데, 이 아키텍처는 오늘날 많은 고급 AI 시스템의 기반이 되었습니다. 이 모델의 성능, 확장성, 다양성은 광범위한 채택으로 이어졌고, BERT(Bidirectional Encoder Representations) 및 GPT(Generative Pre-trained Transformers)와 같은 최첨단 모델의 중추를 형성했습니다.
Transformer 모델 이전에는 언어를 처리하는 대부분의 AI 모델은 순환 신경망(RNN) 또는 개선된 버전인 장단기 기억 네트워크(LSTM)라는 신경망 유형에 크게 의존했습니다. 특히 언어 모델링 및 기계 번역(시퀀스 변환이라고도 함)과 같은 문제가 있었습니다. 이러한 모델은 왼쪽에서 오른쪽으로(또는 그 반대로) 순서대로 단어를 하나씩 처리했습니다. 이 접근 방식은 문장의 단어가 종종 이전 단어에 따라 달라지기 때문에 의미가 있었지만 몇 가지 중요한 단점이 있었습니다.
핵심 아이디어: 건축에 대한 관심
Transformer 모델의 핵심 아이디어는 "주의"라고 하는 것입니다. 간단히 말해서 주의는 모델이 단어의 의미/맥락을 이해하려고 할 때 문장의 특정 부분에 집중하도록 돕습니다. "차고에 주차된 차는 파란색입니다."라는 문장을 생각해 보세요. 파란색이라는 단어에 대해 생각하면 자연스럽게 문장 앞부분의 "자동차"에 집중하게 되는데, 그 이유는 파란색이 무엇인지 알려주기 때문입니다. 기계 번역 모델은 "파란색"이 차를 가리키는지 차고를 가리키는지 식별하는 데 어려움을 겪을 것입니다. 이것이 바로 자기 주의가 하는 일입니다. 모델이 문장의 어느 부분에 있든 관련 단어에 집중하도록 돕습니다.
주의는 새로운 개념이 아니며 이미 RNN과 함께 사용되고 있었습니다. Transformer는 주의에만 의존한 최초의 전환 모델이었으며, 따라서 신경망의 필요성을 없앴습니다. 이는 다음과 같은 이점을 제공했습니다.
보시다시피, 새로운 모델은 신경망의 모든 단점을 제거했을 뿐만 아니라 기계 번역의 성능도 실제로 향상시켰습니다!
원래 논문은 이해하기 다소 어려울 수 있으므로, 논문에 기술된 모델 아키텍처를 더 간단하게 설명하겠습니다.
인코더 및 디코더 스택 : Transformer는 인코더 스택(왼쪽)과 디코더 스택(오른쪽)으로 구성됩니다. 인코더 스택은 입력 시퀀스(예: 문장)를 연속 표현 집합으로 변환하는 반면, 디코더 스택은 이러한 표현을 출력 시퀀스(예: 번역)로 변환합니다. 각 스택에 대해 아래에서 위로, 예를 들어 모델의 핵심 구성 요소를 설명합니다.
인코더에서의 입력 문장 처리
입력 : 번역하려는 텍스트. 예: "차고에 주차된 차는 파란색입니다."
입력 임베딩 : 단어를 임베딩이라고 하는 고정 길이의 숫자 표현(벡터)으로 변환합니다. 이러한 임베딩은 모델이 이해할 수 있는 방식으로 단어의 의미적 의미를 포착합니다. 우리의 예에서:
"그" -> [0.9, -0.4, 0.2, ...]
"자동차" -> [0.5, 0.1, -0.7, ...]
"그것" -> [-0.8, 0.2, 0.8, ...]
위 문장의 각 단어에 대해서도 마찬가지입니다.
위치 인코딩 : 모델은 순서가 없는 입력 임베딩을 처리하기 때문에 문장에서 단어의 순서를 이해할 방법이 필요합니다. 위치 인코딩은 시퀀스에서 각 단어의 위치에 대한 정보를 임베딩에 추가합니다.
위치 1의 "the"는 [0.9 + P1, -0.4 + P1, 0.2 + P1, ...]로 조정될 수 있습니다. 여기서 P1은 첫 번째 위치에 대한 위치 인코딩을 나타내므로 위치 P1에 대해 고유한 새로운 임베딩이 생성됩니다.
셀프 어텐션 메커니즘 : 앞서 설명한 대로, 이를 통해 모델은 맥락에 따라 문장의 다른 단어에 초점을 맞출 수 있습니다. 각 단어에 대해 셀프 어텐션 메커니즘은 현재 단어를 인코딩할 때 다른 단어에 얼마나 많은 초점을 맞춰야 하는지를 나타내는 점수를 계산합니다.
"자동차"라는 단어의 경우, 자기 주의는 "주차됨", "차고", "파란색"이 맥락을 이해하는 데 특히 관련이 있다고 결정할 수 있습니다.
멀티헤드 어텐션 : 트랜스포머 모델의 새로운 부분. 멀티헤드 어텐션은 단순히 병렬로 실행되고 선형적으로 연결된 여러 개의 셀프 어텐션 레이어/작업입니다.
예를 들어, 한 문장은 주어("car")와 그 속성("blue")에 초점을 맞출 수 있고, 다른 문장은 관계절("that was parked in the garage")에 초점을 맞출 수 있습니다.
멀티 헤드 어텐션 모듈은 모델이 차고보다는 자동차에 "파란색"이 더 적합하다는 것을 이해하는 기능을 제공합니다.
피드포워드 신경망 : 셀프 어텐션 레이어 다음에 출력은 피드포워드 신경망을 통과하는데, 이는 각 위치에 별도로 동일하게 적용됩니다(다시 한 번, 병렬로 실행할 수 있습니다!). 이는 ReLU 활성화가 중간에 있는 두 개의 선형 변환으로 구성됩니다.
Add & Norm : 잔여 연결(add)은 레이어의 입력을 출력에 더하는 데 사용되며, 이는 정규화(norm)됩니다. 이는 그래디언트가 사라지거나 폭발하는 것을 방지하여 딥 네트워크를 훈련하는 데 도움이 됩니다.
디코더에서 번역 생성
NLP에서는 시퀀스 시작 토큰의 시작을 특수 문자 <SOS>로, 시퀀스의 끝을 <EOS>로 표시하는 것이 일반적입니다. 디코더는 인코더에서 처리된 입력을 가져와 프랑스어 번역 "La voiture qui était garée dans le garage est bleue"를 생성합니다. 이 부분의 작동 방식은 다음과 같습니다.
디코더에 대한 입력 : 디코더는 인코더에서 영어 문장의 인코딩된 표현으로 시작합니다. 알아차리셨다면, 디코더는 자체 출력도 입력으로 받습니다. 초기 단어에 대한 입력이 없으므로, <SOS> 토큰을 시작 부분에 삽입하고(따라서 오른쪽으로 이동) 마지막 단어를 제거합니다. 이 이동된 시퀀스가 디코더에 입력되는 것입니다.
마스크된 자기 주의 : 디코더에서 마스크된 자기 주의 메커니즘은 출력 시퀀스의 각 단어가 그 앞의 단어에만 주의를 기울일 수 있도록 보장합니다. 이를 통해 모델이 미리 보는 것을 방지하고 한 번에 한 단어씩 왼쪽에서 오른쪽으로 번역을 생성하도록 보장합니다.
예를 들어, 디코더가 "La"(프랑스어의 첫 단어)라는 단어를 생성하려고 할 때, 디코더는 <SOS>의 맥락만 알고 "Voiture"와 같은 미래의 단어는 알지 못합니다.
피드포워드 신경망 : 디코더는 또 다른 피드포워드 신경망을 적용하여 이 정보를 더욱 처리하고 단계별로 변환을 세부적으로 조정합니다.
디코더에서 입력 문장을 여러 층의 마스크된 자기 주의, 인코더-디코더 주의, 피드포워드 네트워크를 통해 처리한 후, 대상 문장(우리의 경우 프랑스어)의 각 위치에 대한 연속 표현(부동소수점 벡터) 시퀀스를 얻습니다. 이러한 표현은 실제 단어로 변환해야 합니다. 여기서 최종 선형 및 소프트맥스 계층이 작용합니다.
디코더는 기본적으로 다음을 수행합니다.
이러한 단계를 결합함으로써 Transformer는 이전 모델보다 전체 문장의 구조와 의미를 더 효과적으로 이해할 수 있습니다. Self-attention 메커니즘과 병렬 처리를 통해 Transformer는 소스 언어와 대상 언어의 뉘앙스와 구조를 효과적으로 포착하여 기계 번역과 같은 작업에 매우 능숙합니다.