본문 바로가기
내 맘대로 읽는 논문 리뷰/NLP

MT-DNN

by 동석2 2021. 3. 10.

MT-DNN

arxiv.org/pdf/1901.11504.pdf

Multi-Task Deep Neural Networks for Natural Language Understanding

 

Intro

learning vector space representation of text를 위해서, NLP에서는 두가지 approach를 이용하는데, 하나는 ElMo,GPT,BERT와 같은 pre-training 기법이며 하나는 Multi task learning(이하 MTL)이다.

MTL의 영감은 사람의 학습에서 받은 것으로, 스케이팅을 배워본 사람이 안 배운 사람보다 스키를 더 잘 배우지 않을까? 라는 생각에서 온 것이다.

MTL은 간단히 여러 task들을 같이 학습함으로써, task 상호간에 이득을 주게끔 학습하는 것이다.

그렇다면 왜 딥러닝에 이를 쓰려할까? MTL을 이용하면 하나의 task만으로 fine-tuning하는 것보다 많은 데이터셋으로 학습하는 효과가 생긴다. 여러 task의 데이터를 동시에 학습하여 regularization에서 효과적이고, 특정 task에 대한 overfitting을 막아준다.

그래서 MT-DNN은 기존 pre-training기법에 MTL을 합치는 것이 상호보완적 효과를 가져올 수 있다 생각하여, 둘을 합친 딥러닝 네트워크이다.

 

Model Architecture

위 사진은 실제 논문에서 발췌하여 온것이다.

우선 크게 모델 구조는 두 층으로 나뉜다. Shared layer로 표현되는 low layer와 Task specific한 top layer.

low layer의 구조는 간단하게 말하자면 BERT의 구조와 거의 일치한다. input으로 문장(또는 문장 pair, 여기서 input은 BERT의 input 생성 방식과 동일한 방식으로 생성된다.-자세한건 BERT 논문)을 받으면 Lexicon Encoder를 통해 Embedding vector로 바뀐다. 이렇게 바뀐 Embedding vector는 Transformer Encoder를 거치면서 self-attention을 통해 contextual embedding의 sequence로 변환된다. 역시 BERT와 동일한 방식이며, output의 첫 토큰 [CLS]가 총 문장의 문맥 정보라고 생각하면 된다.

top layer의 구조부터 달라지는데, MT-DNN은 4가지 nlp task 유형을 나누어 task마다 각 layer를 따로 학습하도록 한다. 즉 어떤 task든 input 문장은 low layer를 모두 거쳐 context embedding vector로 변환되고, 문제의 task 따라 하나를 거쳐 답을 도출하게 된다. (task 마다 다른 네트워크)

 

MT-DNN의 학습은 우선 BERT의 방식으로 pre-training을 한다.(masked language modeling & next sentence prediction) 실제로는 다시 학습하지 않고 이미 pre-trained된 BERT model을 가져다 썼다.

pre-training이 끝나면, 4가지 유형의 task들을 모두 한데 모은 뒤 minibatch를 랜덤하게 뽑아 train하게 된다. 각 에폭마다 shared layer를 update한 뒤, minibatch의 task 유형따라 specific layer를 update하게 된다.

이러한 학습 방식을 통해 가지는 의의는 만약 BERT로만 pre-training한 모델을 이용해 어떤 task에 대해 fine-tuning하게 될 경우, BERT가 정말 다른 task 풀이에 효과가 있는지 장담하기 어려웠다면, MT-DNN은 여러 유형의 task로 먼저 fine-tuning한 것으로 볼 수 있기에 좀 더 신뢰도를 높인 것으로 볼 수 있을 것 같다. 또한 각기 다른 여러 task로 low layer를 더 훈련했기에 보다 일반적이고 중립적인 representation을 얻을 수 있을 것이다.

 

Tasks

그렇다면 구체적으로 어떤 task를 상정했는지 알아보자. 또한 top layer의 network구조도 알아보겟다.

1.Single Sentence Classification

Input으로 문장 하나를 받아, pre-defined된 label중 하나를 output으로 도출해야 한다.

예시 문제로 CoLA(영문법 일치/불일치), SST-2(영화 리뷰 긍정/부정) 등이 있다.

간단히 parameter vector w를 곱해 softmax하여 구한다.

2.Text Similarity

Input으로 문장 pair를 받아, 두 문장 간 유사도를 output으로 도출한다. 회귀 문제이다.

예시로 STS-B 문제가 있다.

유사도는 다음과 같이 w와 곱한 것으로 도출한다.

3.Pairwise Text Classification

Input으로 문장 pair를 받아, pre-defined된 label중 하나를 output으로 도출해야 한다.

예시 문제로 RTE,MNLI(문장 관계 3가지로 분류), QQP,MRPC(두 문장 의미 일치/불일치)

이 문제에 대해서만 MT-DNN은 조금 어려운 계산을 한다. 문장 간 관계 파악을 위해선 우선 두 문장을 먼저 파악해야한다는 사실에 기반하여 SAN구조를 가져왔다.

SAN은 간단하게 말해 두 vector간 관계를 stochastic하게 연산하기 위해 RNN(여기선 GRU)를 사용한 네트워크이다.

논문에선 GRU의 input을 premise문장임베딩, hidden state를 hypothesis문장임베딩으로 두어 각 step마다 임베딩을 업데이트 하며 문장 관계를 학습하도록 하였다.

그래서 k번째 step의 문장 관계를 위 (3)과 같이 임베딩 벡터 2개 + 문장 긴 거리 + 문장 유사도 벡터를 concat하여 softmax한 값으로 정의한다. 최종 output은 k개의 평균으로 낸다.

4.Relevance Ranking

Input으로 지문,질문을 받아, 유력한 지문 순으로 ranking매기는 문제이다.

예시로 QNLI(해당 지문이 질문에 대한 대답이 맞는가? Y/N)가 있다.

QNLI는 이진 분류 문제이나,MT-DNN은 ranking문제로 바꾸어 지문 내 모든 문장에 대해 rank를 매겨 가장 높은 rank가 맞는 답임을 가정하고 대답을 내도록 하였다. 이렇게 바꾸니 더 좋은 결과를 냈다고도 한다.

이 문제는 2번과 같이 연산하여 답을 도출한다. ranking score 정도로 이해하면 될 것 같다.

 

Experiment Results

몇 가지 결과만 알아보면, GLUE 9개 task 중 8개 task + SNLI task등에서 SOTA 성능을 냈다.

특히 SNLI/SciTail에선 Domain Adaptation에서 큰 성과를 보였는데, 구체적으로는 기존에 쓰던 데이터량의 블과 0.1%만을 사용해 MT-DNN을 fine-tuning한 결과가 기존 다른 model에 대해 많은 데이터로 fine-tuning한 것보다 좋았다. 이는 아주 적은 데이터만으로도 높은 성능을 보여주는 예시로, 새로운 domain에 아주 적응을 잘함을 의미한다.

'내 맘대로 읽는 논문 리뷰 > NLP' 카테고리의 다른 글

Deeper Transformer with ADMIN (2)  (0) 2021.03.10
Deeper Transformer with ADMIN (1)  (0) 2021.03.10
BART  (0) 2021.03.10