brunch

You can make anything
by writing

C.S.Lewis

by 서진호 Aug 13. 2020

Transformer:언어 이해를 위한 새 신경망 구조

2017년 8월 31일(목) - 구글 AI 리서치 블로그 

신경망, 특히 순환적 신경망(Recurrent Neural Network, RNN)은 이제 언어 모델링, 머신 번역 및 질문 응답과 같은 언어 이해 작업에 대한 주요 접근 방식의 핵심입니다. “Attention Is All You Need” 논문에서 우리는 언어 이해에 특히 적합하다고 믿는 self-attention 메커니즘을 기반으로 하는 새로운 신경망 아키텍처 인 Transformer를 소개합니다.


논문에서 우리는 Transformer가 학문적 영어에서 독일어로, 그리고 영어에서 프랑스어로의 번역하는 벤치 마크에서 순환 및 컨볼루션 모델을 능가한다는 것을 보여줍니다. 더 높은 번역 품질 외에도 Transformer는 훈련하는 데 계산이 덜 필요하며 최신 머신러닝 하드웨어에 훨씬 더 적합하여 훈련 속도를 최대 10배까지 높일 수 있습니다.

[그림 1] 표준 WMT newstest2014 영어-독일어 번역 벤치마크에서 단일 모델의 BLEU 점수(높을수록 좋음).
[그림 2] 표준 WMT newstest2014 영어-프랑스어 번역 벤치 마크에서 단일 모델의 BLEU 점수 (높을수록 좋음).


언어 이해의 정확성과 효율성

신경망은 일반적으로 고정 또는 가변 길이 벡터 공간 표현을 생성하여 언어를 처리합니다. 개별 단어 또는 단어 조각의 표현으로 시작한 후 주변 단어에서 정보를 집계하여 컨텍스트에서 주어진 언어의 의미를 결정합니다. 예를 들어, “I arrived at the bank after crossing the…”라는 문장에서 “bank”이라는 단어의 가장 가능성 있는 의미와 적절한 표현을 결정하려면 문장이 “... road.” 또는 “... river.” 로 끝나는지 알아야 합니다. 


RNN은 최근 몇 년 동안 번역, 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 방식으로 언어를 순차적으로 처리하는 일반적인 네트워크 아키텍처가 되었습니다. 한 번에 한 단어 씩 읽으면 RNN이 여러 단계를 수행하여 서로 멀리 떨어진 단어에 의존하는 결정을 내립니다. 위의 예를 처리하면 RNN은 "bank"와 "river"사이의 각 단어를 단계별로 읽은 후 "bank"가 the bank of river을 참조할 가능성이 있다는 것을 결정할 수 있습니다. 이전 연구에 따르면 대략적으로 이러한 결정 단계가 많을수록 순환적 네트워크가 이러한 결정을 내리는 방법을 학습하기가 더 어려워집니다.


RNN의 순차 특성은 또한 순차 처리가 아닌 병렬 처리에서 탁월한 TPU 및 GPU와 같은 최신 고속 컴퓨팅 장치를 완전히 활용하기 어렵게 만듭니다. 컨볼 루션 신경망 (CNN)은 RNN보다 훨씬 덜 순차적이지만 ByteNet 또는 ConvS2S와 같은 CNN 아키텍처에서는 입력의 거리가 먼 부분에서 정보를 결합하는 데 필요한 단계 수가 거리가 증가함에 따라 계속 증가합니다.


Transformer

반대로 Transformer는 적은 수의 일정한 단계만 수행합니다 (실증적으로 선택). 각 단계에서 각 위치에 관계없이 문장의 모든 단어 간의 관계를 직접 모델링하는 self-attention 메커니즘을 적용합니다. 앞의 예에서 "I arrived at the bank after crossing the river."라는 단어가 금융 기관의 뜻이 아니라 강둑을 의미한다는 것을 확인하기 위해 Transformer는 "river"라는 단어에 즉시 attention 하는 법을 학습할 수 있고 이 결정을 한 번에 내립니다. 사실, 우리의 영어-프랑스어 번역 모델에서 우리는 정확히 이 동작을 관찰합니다.


더 구체적으로 말하면, 주어진 단어 (예 : "bank")에 대한 다음 표현을 계산하기 위해 Transformer는 이를 문장의 다른 모든 단어와 비교합니다. 이러한 비교의 결과는 문장의 다른 모든 단어에 대한 attention score입니다. 이러한 attention score는 서로 다른 단어의 뜻이 다른 “bank”의 다음 표현에 얼마나 기여해야 하는지를 결정합니다. 예에서 "bank"에 대한 새 표현을 계산할 때 명확하게 "bank"가 높은 attention score를 받을 수 있습니다. 그런 다음 attention score는 모든 단어 표현의 가중 평균에 대한 가중치로 사용되며 완전히 연결된 네트워크에 입력되어 "bank"에 대한 새로운 표현을 생성하여 문장이 강둑에 대해 이야기하고 있음을 반영합니다. 


아래 애니메이션은 Transformer를 기계 번역에 적용하는 방법을 보여줍니다. 기계 번역을 위한 신경망은 일반적으로 입력 문장을 읽고 그 표현을 생성하는 인코더를 포함합니다. 그런 다음 디코더는 인코더에 의해 생성된 표현을 참조하면서 출력 문장을 단어 단위로 생성합니다. Transformer는 각 단어에 대한 머리글자의  표현(initial representation) 또는 임베딩을 생성하여 시작합니다. 채워지지 않은 원으로 표시됩니다. 그런 다음 self-attention를 사용하여 다른 모든 단어의 정보를 집계하여 채워진 원으로 표시되는 전체 콘텍스트에 의해 정보를 제공하는 단어 당 새로운 표현을 생성합니다. 이 단계는 모든 단어에 대해 병렬로 여러 번 반복되어 연속적으로 새로운 표현을 생성합니다.

디코더는 유사하게 작동하지만 왼쪽에서 오른쪽으로 한 번에 하나의 단어를 생성합니다. 이전에 생성된 다른 단어뿐만 아니라 인코더가 생성 한 최종 표현에도 적용됩니다.


정보의 흐름

계산 성능과 더 높은 정확도 외에도 Transformer의 또 다른 흥미로운 측면은 주어진 단어를 처리하거나 번역할 때 네트워크가 어떤 문장의 다른 부분에 참여하는지 시각화하여 정보가 네트워크를 통해 이동하는 방식에 대한 통찰력을 얻을 수 있다는 것입니다.


이를 설명하기 위해 우리는 기계 번역 시스템에 악명 높은 현상인 상호 참조 해결과 관련된 예를 선택했습니다. 다음 문장과 프랑스어 번역을 고려하십시오.

첫 번째 문장 쌍에서 "it"은 동물을 의미하고 두 번째 문장은 거리를 의미한다는 것이 대부분의 사람들에게 분명합니다. 이러한 문장을 프랑스어 또는 독일어로 번역할 때 "it"의 번역은 참조하는 명사의 성별에 따라 다릅니다. 프랑스어에서는 "animal"과 "street"의 성별이 다릅니다. 현재 Google Translate 모델과 달리 Transformer는 이 두 문장을 모두 프랑스어로 올바르게 번역합니다. "it"이라는 단어에 대한 최종 표현을 계산할 때 인코더가 사용한 단어를 시각화하면 네트워크가 어떻게 결정을 내 렸는지 알 수 있습니다. 하나의 단계에서 Transformer는 "it"이 참조할 수 있는 두 개의 명사를 명확하게 식별했으며 각각의 관심도는 서로 다른 맥락에서 선택을 반영합니다.

[그림 3] 영어에서 프랑스어로의 번역에 대해 훈련된 Transformer의 5 ~ 6 계층에서 "it"이라는 단어에 대한 인코더 셀프 어텐션 분포 (8 개의 어텐션 헤드 중 하나

이러한 통찰력을 감안할 때 Transformer가 수십 년 동안 자연어 처리 커뮤니티가 고도로 전문화된 시스템으로 공격해 온 작업인 구문 구성과 구문 분석의 고전적인 언어 분석 작업에서도 매우 잘 수행된다는 것은 놀라운 일이 아닙니다.

사실, 거의 적응하지 않은 상태에서 우리가 영어에서 독일어로 번역하는 데 사용한 것과 동일한 네트워크가 이전에 제안된 구성 구문과 분석 방법 중 하나를 제외한 모든 것을 능가했습니다.


다음 단계

우리는 Transformer의 미래 잠재력에 대해 매우 기쁘게 생각하며 이미 자연어뿐만 아니라 이미지 및 비디오와 같은 매우 다른 입력 및 출력과 관련된 다른 문제에도 적용하기 시작했습니다. 우리의 진행 중인 실험은 최근 오픈소스인 Tensor2Tensor 라이브러리에 의해 엄청나게 가속화됩니다. 실제로 라이브러리를 다운로드한 후 몇 가지 명령들만 호출하여 번역 및 파싱을 위해 자체 Transformer 네트워크를 훈련할 수 있습니다. 한 번 사용해 보시고 Transformer로 커뮤니티가 무엇을 할 수 있는지 기대해주세요.


감사의 말

이 연구는 Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser 및 Illia Polosukhin이 수행했습니다. 위의 애니메이션을 만든 David Chenell에게 추가로 감사드립니다.


원본 제목: Transformer : 언어 이해를 위한 참신한 새 신경망 구조(Transformer: A Novel Neural Network Architecture for Language Understanding)
게시자 : Jakob Uszkoreit, Software Engineer, Natural Language Understanding
원본 링크: https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
Feedforward neural network 용어 설명(영어): https://en.wikipedia.org/wiki/Feedforward_neural_network
Recurrent Neural Network 용어 설명(영어): https://en.wikipedia.org/wiki/Recurrent_neural_network
Exploring the Limits of Language Modeling 논문(영어): https://arxiv.org/abs/1602.02410
Outrageously Large Neural Networks: The Sparsely-Gated Mixure-of-Experts Layer 논문(영어): https://arxiv.org/abs/1701.06538
Convolutional Sequence to Sequence Learning 논문(영어): https://arxiv.org/abs/1705.03122
MS MARCO: https://microsoft.github.io/msmarco/
SQuAD 2.0, The Stanford Question Answering Dataset: https://rajpurkar.github.io/SQuAD-explorer/ 
Attention Is All You Need 논문: https://arxiv.org/abs/1706.03762
Gradient Flow in Recurrent Nets: the Difficuluty of Learning Long-Term Dependencies 논문: http://www.bioinf.jku.at/publications/older/ch7.pdf
In-Datacenter Performance Analysis of a Tensor Processing Unit 논문(영어): https://arxiv.org/abs/1704.04760
Neural Machine Translation in Linear Time 논문: https://arxiv.org/abs/1610.10099
Convolutional Sequence to Sequence 논문: https://arxiv.org/abs/1705.03122
Tensor2Tensor 오픈소스: https://github.com/tensorflow/tensor2tensor/

이 블로그는 2017년 8월 31일(목), Google AI 리서치 블로그 기사를 영한 번역한 것입니다. 또한 이 번역 글은 정보 공유 목적으로만 작성했으므로 어떠한 상업용으로 사용할 수 없으며, 원본 저작물 모두 구글에게 저작권이 있음을 알려 드립니다. (First Draft Version)


 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari