[논문리뷰] DeFormer: Decomposing Pre-trained Transformers for Faster Question Answering
Abstract
트랜스포머 기반 QA 모델들은 input-wide self-attention 기법을 쓰는데 - 즉, question과 입력 passage 모두 한번에 걸쳐서 넣음 - 근데 이건 모든 레이어에서, memory-intensive하고 느리게 만드는 원인이 됨. 이 부분은 특히나 낮은 layers에서도 그렇고, 모든 레이어에서 input-wide한 self-attention으로 받지 않아도 되는 것을 발견함. 우리는 이것을 Defomer로 소개하는데, dcomposed transformer로, 낮은 layer에서 full self-attention의 question-wide와 passage-wide self-attention으로 구성됨. 이것은 input text representation에서 question-independent한 처리를 하게 해주면서, 이는 다시 passage representation을 사전 처리하는 런타임 시간을 대폭적으로 감소할 수 있게 만듦. 게다가, Deformer는 원 모델의 구조와 아주 흡사하기 때문에, 우리는 기존 standard transformer의 사전학습 weights로 모델을 초기화 할 수 있고, 바로 target QA dataset에서 fine-tune가능함. 우리는 BERT와 XLNet의 Deformer 버전이 4.3배 정도로 QA 속도가 빨라지고 단순한 distillation-based loss에서 정확도에서 1퍼센트 정도의 하락만 보임.
트랜스포머를 기반하는 모델들은 원래 QA 모델 작동 시에, 질문-본문을 한 번에 받고 쭉 연산하는데, 이를 줄여서 accuracy-speed trade-off 관점을 강조한 듯함. 아래 레이어에서는 각자 받아서 어텐션 연산하고, 후에 레이어를 합쳐서 같이 태스크를 위한 어텐션 연산을 하고자 하는! 이 모델은 또한 weight도 그대로 유지할 수 있고 바로 fine-tune 가능해서 좋음~!
1. Introduction
최근 방대한 양의 웹 스케일 서비스에서 QA 모델에 질문을 넣어야할 만한 필요성이 증가하고 있으며, 또한 보안 상이나 다른 성능 상의 이유로 제한된 모바일 기기에 그것들을 넣어야함. QA 시스템의 SOTA에서는 여느 다른 NLP 태스크같이 커다란 사전학습된 트랜스포머, XLNet를 사용함. 그러나, 이러한 모델의 인퍼런스는 자원이 제한된 모바일 기기에서 구동하는 것과 데이터 센터에서 거대한 양의 데이터를 버틸 수 있도록 상당히 높은 수준의 런타임 연산량과 메모리를 요구함.
우리의 목표는 사전학습을 한 트랜스포머 모델을 가지고 사전학습을 반복할 필요 없이 QA inference를 빠르게 할 수 있도록 수정하는 것임. 사전학습은 비용이 많이 들기 때문에 정확도 대 속도 trade-off의 많은 관점을 탐색하려는 경우 이는 중요한 요구 사항임.
트랜스포머 베이스 모델에서의 주요 연산 bottleneck은 각 레이어에서의 input-wide self-attention 연산임. 기계독해 스타일 QA에서, 이것은 질문과 본문 정보를 같이 self-attention 연산하는 것이 상당한 양임. 이를 통해 모델이 매우 효과적인 질문-의존 본문 representation을 만들 수 있고 그 반대 또한 그러함. 이를 통해, 본문 representation을 구축하는 것은 더 시간이 걸리는데 이것은 보통 질문보다 더 길이가 길기 때문임. 만약 본문이 질문과 무관하게 연산될 수 있으면, 이러한 비싼 연산을 오프라인으로 전환하여 상당한 런타임 지연시간을 절약할 수 있음.
그렇다면 최소한의 레이어에서, 질문과 무관하게 효율성에서의 큰 손실 없이 본문을 처리할 수 있나? 이것을 가능하게 하는 두 가지 경험적인 관측이 있음. 먼저, 이전 연구에서 낮은 layer에서는 통사적 측면같은 지역적 현상(local phenomena)에 초점을 두는 경향을 가지고, 반대로 높은 layer에서는 우리가 하고자 하는 target 태스크와 관련된 의미론적인 측면인 글로벌 현상(global phenomena)에 초점을 두는 경향을 가짐을 증명함. 두 번째는, 우리가 추후 섹션2에서 볼 수 있듯이, 일반적인 BERT 베이스 QA 모델에서, 우리가 질문을 변형할 때 낮은 layer의 텍스트 representation은 적은 분산을 가지고 있음. 이것은 질문으로 부터 나온 정보는 낮은 layer에서 중요한 정보는 아니라는 것임. 동일하게, 이 사실들은 트랜스포머의 낮은 layer에서 오직 지역적 context만 고려하고, 높은 layer에서 글로벌 context를 고려하는 것은 효율성의 측면에서 아주 적은 비용으로 속도 향상을 보일 수 있음을 제안함.
이 관찰들을 통해, 우리는 사전학습된 트랜스포머 베이스 모델의 간단한 분해 모델인 Deformer를 제안하고, 이것은 낮은 계층에서는 질문과 본문을 각각 연산하고, 높은 계층에서는 같이 연산함. 우리는 n-layer 모델에서 k개의 낮은 layer가 질문과 본문을 독립적으로 연산한다고 가정함. Deformer는 오프라인으로 k 개의 낮은 layer를 통해 텍스트를 연산하고 k layer부터 결과를 만듦. 질문의 런타임 시간동안 질문은 먼저 모델의 k-layer를 통해 처리되고 이에 대한 텍스트 representation은 캐시로부터 로드됨. 이러한 두 가지 k-번째 layer representation은 (k+1)-번째 layer의 input으로 들어가서 본 모델의 더 높은 layer에서 계속 연산됨. 게다가 직접적으로 런타임 연산의 양을 줄이면서, 이것은 또한 context의 중간 텍스트 표현이 더 이상 메모리에 저장되지 않아 메모리를 크게 줄일 수 있음.
이 관점의 주요 강점은 비용이 비싼 사전학습의 반복없이 QA 데이터셋에 대해서 바로 fine-tuning하는 동일한 Deformer 버전을 만듦으로써 어떠한 사전학습된 트랜스포머 기반 QA 모델을 더 빠르게 한다는 것임. 우리의 다양한 QA 데이터셋 경험적인 평가는 전체 모델과 비교해 decomposed 모델에서 바로 파인튜닝하는 것은 정확도가 조금만 떨어짐을 확인함.
이러한 정확도 손해는 원 모델로부터 학습함으로써 더 줄일 수 있음. 우리는 이 Deformer 모델이 원래 모델과 더욱 가까워지길 바람. 특히, Deformer의 높은 층들은 원모델의 동일한 층에서와 같은 종류의 정보를 생산함. 우리는 decomposed 모델과 원래 모델 사이의 출력 수준과 레이어 수준 차이를 최소화하기 위해 두 개의 distillation같은 보조(auxiliary) loss를 추가함. 우리는 BERT와 XLNet 두 개의 트랜스포머 베이스 모델의 Deformer 버전을 세 가지 QA 태스크와 두 개의 문장쌍 입력 태스크에서 실험함. Deformer는 2.7에서 4.3까지 의미 있는 속도 향상을 달성하고 65.8에서 72.9정도까지 메모리 감소를 보여줬는데, 이는 Qa에서 0.6에서 1.8까지 정도의 손해만 발생함. 게다가, 우리는 BERT-large의 Deformer는 BERT-base의 원모델보다 성능도 좋고 속도도 더 빠름을 확인함. 추가 연구에서는 우리가 도입하는 지도(supervision) 전략이 가치 있는 정확도 성능 향상을 제공함을 보여주고, 더 나아간 분석이 괜찮은 runtime-accuracy trade-off를 제공함을 보여줌.
우리 목표는 사전학습된 트랜스포머 모델에서 사전학습을 추가로 진행하지 않고 QA 작업을 빠르게 바로 하고 싶다 ~! 근데 이게 상당한 자원이 드니까 그런 부분 없이 속도를 향상시킬 수 있을까? 그래서 두 가지를 살펴보자구. 첫 번째는 이전의 연구에서 낮은 layer에서는 통사적으로 언어를 분석하고, 높은 계층에서는 태스크에 의존적인 의미론적인 측면으로 언어를 분석한다. 두 번째는 일반적인 버트 베이스에서, 낮은 계층에서 본문 벡터가 작은 분산을 가지면서 별로 중요하지 않은데,,? 라는 사실이 존재한다는 거다. 이로써 뭔가 분리해도 되지않을까? 생각이 들고,,, 그래서 k를 기점으로 레이러를 나눠서 그 이후부터 두 가지 데이터를 합치자구! 근데 또 무지성으로 마냥 분리하면 성능이 유지될 수가 없겠지,, 아무래도,,, 이 두 개의 차이를 최소화하려고 두 개의 보조 loss값을 추가함! 그리고 결론적으로 성능은 1%정도 아주 쪼끔 떨어지고 빨랐다!
2. Decomposing Transformers for Faster Inference
QA에서 트랜스포머를 사용하는 정석적인 접금법은 질문과 입력 텍스트(본문)을 함께 self-attention으로 연산하는 것임. 이것은 질문에 의존하는 본문으로부터 정보를 추출하는 것에서 꽤 효과적인 정보를 생산하고, 반대도 같음. 만약 복잡도를 줄이고 싶으면, 텍스트 segment를 offline으로 처리하는 능력을 얻기 위해 일부의 표현력을 전환하며 입력의 각 segment에 걸쳐 트랜스포머 기능을 분해할 수 있는지 여부를 묻고싶음.
이 trade-off는 더 낮은 층에서 본문 representation을 형성할 때 질문 토큰으로 부터 attention을 가지는 것이 얼마나 중요한지 (그 반대도) 의존함. 이것을 평가하기 위해, 우리는 다른 질문에서 얼마나 본문 representation이 변하는지 측정함. 특히, 우리는 각 다른 질문과 연결되었을 때 평균 본문 representation 분산이 변화하는지 측정함. 이 분산은 본문의 벡터와 그들의 centroid 간의 코사인 거리로 측정함. Figure 2에서 보여주듯이, 더 낮은층에서는 위의 층에서보다 많은 변화가 없음을 확인하면서 낮은 층에서 질문 토큰에 대한 어텐션을 무시하는 것이 나쁘지 않음을 확인함. 이것은 또한 낮은 계층에서는 local phenomena를 진행하는 경향이 있고, 반대로 더 높은 계층에서는 더 넓은 본문을 보는 것이 중요한 태스크에 의존적인 의미론적인 global한 phenomena를 진행하는 제안을 증명하는 결과이기도 함.
여기서 우리는 본문의 질문 독립적 연산을 허용하기 위해 낮은 계층에서 어텐션을 분리하는 우리의 접근 방식을 공식적으로 설명함.
2.1 Defomer
먼저, 우리는 텍스트의 두 가지 segments( T_a, T_b) 를 가지는 문장쌍 태스크를 위한 트랜스포머 연산을 공식적으로 정의함. Ta_a는 A= [a1;a2;,,,;a_q]로, T_b = [b1;b2;..;b_p]로 임베딩 representation를 둠. 전체 input sequence X는 두 가지를 concaten 하면서 표혐됨. 트랜스포머 인코더는 n개의 레이어를 가지는데, 이들은 각 입력 순차적으로 변환함: X^(l+1) = L_i(X^l). 트랜스포머 층의 디테일이 궁금하면 트랜스포머 논문을 읽어보세용. 우리는 i층에서 j층까지 L_i:j로 표현하면서 레이어 스택 적용을 표현함. 전체 트랜스포머의 출력 representation, A^n과 B^n은 아래와 같음:
Figure3은 우리 모델의 윤곽임. 우리는 T_a와 T_b 사이의 상호작용을 단순히 지움으로써 k layer까지 낮은 계층의 연산을 분해함. 여기서 k는 하이퍼 파라미터임. 분해된 트랜스포머의 결과, A^n, B^n은 다음과 같이 표현됨:
트랜스포머 기반 Qa 시스템은 self-attention 레리어의 스택을 통해 질문과 본문을 같이 진행함. 따라서 Qa를 위한 트랜스포머를 분해를 적용함으로써 질문과 본문을 독립적으로 연산할 수 있고, 이것은 다시 말해서 낮은 계층에서 본문을 제외하고 연산할 수 있음을 말함. 이러한 변화로 각 레이어에서 런타임 복잡도는 O((p+q)2) 에서 O(q2 +c) 로 감소하고, c는 캐시된 정보를 가져오는 비용임.
2.2 Auxiliary Supervision for DeFormer
Deformer는 오리지널 트랜스포머와 똑같이 쓸 수 있음. Deformer가 원본 구조를 상당히 많이 유지하기 때문에, 우리는 원 트랜스포머의 사전학습된 weights로 초기화할 수 있고, 직접적으로 다운스트림 태스크에 파인튜닝할 수 있음. 그러나, Deformer는 낮은 레이어의 representation의 정보에서 정보를 좀 소실함. 위 계층에서 좀 더 보충 학습이 가능하긴 함. 하지만, 우리는 더 나아가서 추가적인 지도의 소스로 원 모델의 행위를 사용하려 함.
이를 위해, 먼저 Deformer의 매개 변수를 사전학습된 트랜스포머의 매개 변수로 초기화하고 다운스트림 태스크에서 파인튜닝함. 우리는 또한 Deformer의 예측과 위 계층의 representation을 원 트랜스포머의 예측과 구조와 가깝게 하기 위해 추가적인 loss를 만듦.
Knowledge Distillation Loss 우리는 트랜스포머와 Deformer의 예측 분포를 비슷하게 하고 싶음. 우리는 Deformer의 예측 분포인 P_a와 트랜스포머의 예측 분포 P_b의 Kllback-Leibler divergence (쿨백 라이블러 발산)을 최소화하고 싶음.
Layerwise Representation Similarity Loss 우리는 트랜스 포머와 Deformer의 위쪽 레이어 representation을 비슷하게 하고 싶음. 우리는 그 둘 간의 유클리드 거리를 최소화하고자 함. 트랜스포머의 i 번째 layer의 j번째 토큰을 v^j_i로 표현하고, 동일하게 Deformer는 u^j_i로 표현함. 각 상위 레이어 K+1 ~ n에서, 우리는 LRS loss를 다음과 같이 계산함:
우리는 L_kd, L_lrs를 태스크 특화적인 지도 loss인 L_ts와 함께 추가하고, 하이퍼파라미터 튜닝을 통해 그들의 관련성을 학습함:
우리는 Bayesian Optimization을 단순한 시도/실패 혹은 grid/random 검색 대신 사용해서 γ, α, β를 튜닝함. 이것은 최적에 가까운 파이퍼 파라미터 조합을 찾도록하는 수많은 과정들을 줄일 수 있도록 함.
3. Evaluation
3.1 Datasets
우리는 사전학습된 BERT-base-uncased/BERT-large-uncased 모델을 3개의 QA 태스크와, 두 개의 다른 문장 쌍 태스크를 커버하는 문장쌍 입력 문제에 사용함.
SQuAD v1.1 위키피디아 문서에서 크라우드 소싱 작업자가 생선한 100,000개 이상의 질문 및 답변 쌍을 포함하는 추출 질문 답변 셋
RACE 중국 중고등학생의 읽기/추론 능력을 평가하기 위해 설계된 영어 시험에서 수집된 독해 데이터셋, 28,000개 이상의 지문 및 100,000개 이상 질문 구성
BoolQ Prompt가 없거나 제한하지 않는 설정에서 일상생활에서 발생하는 15,942개의 yes/no 질문으로 구성
MNLI 텍스트끼리의 Entailment 여부를 주석으로 단 433,000개의 크라우드 소싱 말뭉치
QQP Quora로부터 가져온 400,00개 이상의 중복 질문 쌍 구성
모든 5개의 태스크에서, 우리는 데이터셋에 제공된 표준 분할법을 사용하지만, 하이퍼 파라미터 튜닝에 사용할 10% 분할 부분을 얻기 위해 원래의 학습 데이터를 추가적으로 분할하고, 효율성과 효과적인 메트릭을 기록하기 위해 기존의 개발 데이터셋 분할을 사용함.
3.2 Implementation Details
우리는 원래 BERT와 XLNet 코드베이스를 기반으로 모든 모델을 TensorFlow 1.15로 구현함. bfloat16 형식이 활성화된 하나의 TPU v3-8 노드(8 코어, 128GB 메모리)에서 모든 실험을 수행함. 텐서플로 프로파일러를 통해 FLOP와 메모리 소비를 측정함. Deformer 모델에서, 우린느 튜닝 분할 데이터셋 (아까 10% 추가로 나눈 데이터)으로 50회 반복하면서 하이퍼 파라미터를 Bayesian optimization library를 사용하면서 다른 loss들로 조절하면서 튜닝하고, 원본 dev셋으로 성능 점수를 측정함. Section A에서 디테일한 하이퍼 파라미터를 볼 수 있음.
BERT와 XLNet의 Deformer에서, 우리는 입력 segment 하나의 representation을 offline으로 연산하고 저장함. Qa에서는 본문을 캐싱하고, 자연어 추론에서는 전제를 캐싱하고, 질문 유사도에서는 첫 질문을 캐싱함.
3.3 Results
Table 1은 BERT와 Deformer-BERT(9/3 layer 체제)의 성능, 추론 속도, 메모리 요구를 비교함. 우리는 원 모델의 효율성을 유지하면서 의미있는 속도 상능과 상당한 메모리 감소를 확인했는데, 같은 표의 XLNet의 결과도 다른 사전학습된 트랜스포머 구조에서 분해의 효과를 증명함. Table 2는 문장 쌍을 넣는 QQP와 MNLI 데이터셋 모두에서 2배의 속도 상승과 절반 이하의 메모리 감소를 분해 모델이 가져옴을 보여줌. 분해의 효과는 문장 쌍이 입력되는 한 QA 태스크에서도 일반화 가능함. 효율성 향상은 저장될 수 있는 텍스트 segment의 사이즈도 키울 수 있게함.
Small Distilled or Large Decomposed? Table 3은 BERT-base/BERT-large/Deformer-BERT-large의 성능, 속도, 메모리를 비교함. Deformer-BERT-base 모델은 더 작은 BERT-base 모델보다 1.6배 더 빨랐음. 커다란 모델을 분해하는 것은 또한 더 작은 base 모델을 사용하는 것보다 더 효과적임을 (+2.3 points 정도) 확인함. 이것은 분해와 함께, 커다란 트랜스포머는 크기가 절반인 더 작은 모델보다 더 빠르고 정확함.
커다란 모델을 더 작은 모델로 증류하는 것은 작은 모델을 처음부터 훈련시키는 것보다 더 나은 정확도를 가짐. 우리가 아는 것에서 관련있지만 완전 같이 비교할 수 없는 2개 결과가 있음. (1) Tang(2019)는 BERT를 작은 LSTM 기반 모델로 증류해서 MNLI에서 15배 빨라졌지만 13point이상 성능이 하락함. (2) Sanh(2019)는 BERT를 6개 layer의 트랜스포머로 증류했는데 1.6배 빨라졌지만 MNLI에서는 2 point 이상, QA에서는 F1이 3 point 이상 감소함. 공정한 비교를 위해서는 다양한 증류 크기를 탐색하는 것보다 신중한 실험이 필요하며, 이는 반복적인 사전학습 또는 데이터 증강이 필요한데, 이들은 비용이 많이듦.
Device Results: 다른 기기에서의 효과를 평가하면, 우리는 모델을 다른 3개 기기에 배치함. Table 4는 SQuAD 데디터셋의 일부로 측정한 QA에서의 평균 지연시간을 보여줌. 모든 기기에서, 우리는 3배 성능 향상을 확인함.
3.4 Ablation Study
Table 5는 SQuAD 데이터셋에서 DEformer-BERT를 파인튜닝 시 추가적인 loss들의 기여도를 확인함. LRS/KD를 사용하지 않을 때 성능 감소는 추가적인 지도 loss들의 유용성을 보여줌.
Figure 4a와 Figure 4b는 분리 레이어 위치를 바꿀때마다 Deformer-BERT의 추론 속도와 효과성 변화를 보여줌. 추론속도 상승은 대략 분해된 어텐션을 가진 레이어 수와 관련해 대략 2차적으로 확장됨. 반면에, 효율의 하락은 낮은 레이어(기본은 3 레이어, 대형은 13레이어까지)에서 분리하는 경우 무시할 수 있는 정도이며, 그 이후에는 출력에 가장 가까운 마지막 계층에서 확 증가함. 따라서 분리하는 층 선택은 추론 속도에서의 효율성과 관계됨.
4. Analysis
4.1 Divergence of Deformer and original BERT representations
원본 BERT와 Deformer-BERT의 주요 차이점은 낮은 레이어에서의 cross-attention임. 우리는 모든 레이어에서 두 가지 모델의 representation 사이에서 차이점을 분석함. 이를 위해, 우리는 임의적으로 각 본문과 관련있는 데이터셋에 이미 존재 하는 5개의 다른 질문을 고르는 것 뿐 아니라 100개의 본문을 SQuAD에서 골랐음. 각 본문에서, 우리는 BERT-base와 Deformer-BERT-base 모델을 파인튜닝할 때 사용한 모든 5개 질문-본문 쌍 시퀀스를 인코딩하고 각 레이어에서 벡터 간의 거리를 연산함.
Figure 5은 각기 다른 층드레서 질문과 본문 모두의 평균 거리를 보여줌. 낮은 층의 본문과 질문의 representation은 높은 층에서와 다르게 비슷하고, 이는 낮은 층에서는 높은 층에서보다 적은 cross-attention이 덜 임팩트를 주는 것을 뒷받침해줌. 또한, 상위 층에서 추가적인 지도를 사용하는 것은 원 모델에 가깝게 Deformer가 representation을 생산하고자했던 원하는 효과를 받을 수 있음. 이 효과는 질문 representation에 대해 덜 두드러짐.
4.2 Inference Cost
5. Related Work
6. Conclusion
트랜스포머는 여러 개의 층에 많은 context를 효과적으로 구현하는 능력으로 NLP 툴의 효율성을 증대시킴. 하지만 이것은 상당한 복잡도 비용을 부과함. 이 연구에서, 우리는 그런 많은 데이터들이 항상 필요하지 않음을 모델링함. 우리는 본 모델의 정확도를 유지하면서, 인퍼런스 속도와 메모리 감소에서 상당한 증가를 만드는 Dcomposition 트랜스포머를 만듦. 이 모델의 주요 이점은 아키텍쳐가 원래 모델과 대체로 동일하게 유지되어 반복적인 사전 학습을 피하고 미세 조정을 위해 원래 모델 가중치를 사용할 수 있다는 것임. 이 Distillation 기수들은 원 모델과 비교해서 성능 차이를 크게 안나게 한다는 것임. 이러한 decomposition 모델은 단순하지만