ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Seq2Seq Learning & Pre-trained Models - (2)
    ML DL DS/NLP 2022. 6. 5. 17:36
    ⛓️

    Seq2Seq Learning & Pre-trained Models - (2)

    BERT - Bidirectional Encoder Representation from Transformer


    • BERT Summary

      이름과 같이 transformer의 인코더 부분만을 사용. 좋은 Pre-trained Language Representation & downstream task에 대한 쉬운 fine tuning. 사전학습 시, 두 입력문장에 대하여 random masking된 토큰을 예측하는 분류(MLM) 문제와, 두 문장이 이어지는 문장인지에 대한 분류문제(Next Sentence)를 함께 학습.

      (https://github.com/google-research/bert/blob/master/run_pretraining.py#L148)

    • Related Works

      언어 모델을 사전 학습하는 것은 많은 자연어 처리 task의 개선에 효과적이다. 사전 학습한 언어 표현을 downstream task에 적용하기 위한 전략은 크게 2가지가 있다.

      • Feature based approach - ELMo

        ELMo는 양방향 LSTM에 기반한 언어모델을 학습한 뒤, 양방향 LSTM의 표현과 token 표현을 기반으로 downstream task를 학습한다.

      • Fine-tuning based approach - GPT

        GPT는 transformer의 디코더에 기반한 언어모델을 학습한 뒤, linear layer를 추가해 downstream task를 fine-tuning을 통해 학습. 단방향이라는 제약이 있다.

      • BERT vs GPT vs ELMo

        아래 화살표를 통해, 어떤 모델이 더 bidirectional 한지 확인할 수 있다.

    • Pre-training on BERT
      • Model Architecture
      1. Masked Language Model

        입력이 들어오면, 문장에서 15%는 [MASK]토큰으로 바꿔 이를 예측하는 문제이다.

        하지만, downstream task를 fine-tuning할 때에는 [MASK]토큰이 나타나지 않아 사전학습과 미세조정학습이 매칭되지 않는 문제가 있다. 이를 해결하기 위해, 미세조정 학습할 때에는 i 번째 토큰이 [MASK]가 선택이 된다면, 80%의 확률로 실제로 마스킹을 하고, 10%의 확률로 임의의 토큰으로 바꾸고, 10%의 확률로 마스킹일 진행하지 않는다.

        이를 통해, 사전학습과의 mismatch를 완화할 수 있다. masking, same, random의 비율의 성능 변화는 아래와 같다.

      1. Next Sentence Prediction

        QA나 NLI(두 문장이 서로 수반하는지 위배되는지 분류하는 작업)는 문장들의 관계를 바탕으로 이루어진다. 기존 GPT나 ELMo에서는 입력단위가 한 문장이었기 때문에, 문장들간의 관계를 학습하지 않는다.

        이를 해결하기 위해, BERT에서는 두 문장을 입력받아 두 문장이 이어지는 관계인지 아닌지를 학습한다. courpus에서 이어지는 문장 50%, 이어지지 않는 문장 50%를 샘플링해 학습하며, 이러한 단순한 사전학습을 추가하는 것만으로도, QA나 NLI 문제에서 좋은 성능을 내게 한다.

        BERT Base와 NSP를 뺀 것의 성능은 QNLI, SQuAD에서의 차이를 확인할 수 있다.

        LTR(Left to Right)은 MLM이 아닌 LM과 같이, GPT와 같이 학습한 것이다.

        + BiLSTM은 위 모델에서 BiLSTM을 fine-tuning할 때 추가한 것이다.

        SQuAD의 경우, LTR 기반학습의 성능이 낮은 것을 확인할 수 있으며, BiLSTM만 추가하더라도 굉장히 성능이 올라간다. 하지만 MLM기반 학습보다 여전히 낮으며, BiLSTM은 다른 GLUE task의 성능을 낮춘다.

        BERT를 ELMo처럼 구성할 수는 있지만, 비용이 크고, 비직관적인 task들이 있으며, BERT처럼 양방향의 context를 모든 층에서 학습할 수 있지않아 덜 강력하다.

      • Hyper-parameters
    • Fine-tuning BERT

      Fine-tuning에서의 배치크기, learning rate, epoch당 학습 횟수를 제외하고는 대부분의 하이퍼파라미터는 사전학습과 같다. 100K이상의 큰 학습데이터에 대해서는 작은 데이터셋에 비해 하이퍼파라미터에 덜 민감하다. Fine-tuning은 사전학습에 비해 굉장히 빠르기 때문에, 많은 HPO를 할 수 있다.

      task별로 위 그림과 같이 입력과 출력이 나오게 구성하며, BERT 위에 output layer 하나를 추가하여, 최소한의 파라미터들만이 처음부터 학습되게 한다. (a)와 (b)는 시퀀스 레벨의 작업이고, (c)와 (d)는 토큰 레벨의 작업임을 확인할 수 있다.

      • 모델 크기별 성능: 6번째가 BERT Large, 4번째가 BERT Base
      • BERT의 feature based vs fine-tuning based 접근의 차이

        transformer에서의 output들을 활용해 ELMo 처럼 Feature-based 접근 방안으로 NER(CONLL 2003)을 했을 때의 성능 변화는 위와 같다. 뒷쪽에 있는 layer를 사용하는 경우, fine-tuning에 기반한 방법과 유사한 성능을 내는 것을 확인할 수 있다.

    XLNet to T5


    (SOTA, 2020.06월 기준)

    1) XLNet


    • Generalized Autoregressive Pretraining for Language Understanding
    • 기존 사전학습 모델들의 AE(DAE)-BERT와 AR-GPT의 2가지 관점
      • AR (GPT) - Autoregressive

        where:

        x=[x1,,xT]\mathrm{x} = [x_{1}, \cdots, x_{T}],

        hθ(x1:t1)h_{\theta}(\mathrm{x}_{1:t-1} ): 모델의 context representation

        e(x)e(x): x의 임베딩

      • AE (BERT) - Autoencoding

        where:

        xˉ\bar{\mathrm{x}}: masking된 토큰들

        x^=[x1,,[MASK],,xT]\hat{\mathrm{x}} = [x_{1}, \cdots ,[MASK], \cdots, x_{T}]

        mtm_t: masking된 부분에서만 1을 가짐

        HθH_{\theta}: 트랜스포머 , Hθ(x)H_{\theta}(\mathrm{x}) :hidden vector

      • pros & cons
        • Independence Assumption:

          AE: 식(2)의 \approx 부분과 같이 조건부 확률 p(xˉx^)p(\bar{\mathrm{x}} | \hat{\mathrm{x}} )은 모든 masked token xˉ\bar{\mathrm{x}} 들이 서로 분리되어 생성되었다는 (조건부) 독립의 가정으로 인수분해된다.

          AR: 반대로 pθ(x)p_{\theta}(\mathrm{x})를 product rule을 이용해, 독립성 가정없이 모든 시퀀스에게 적용된다.

        • Input noise:

          AE: [MASK]토큰은 downstream task에 나오지않아, 사전학습과 미세조정의 불일치를 만든다. BERT에서와 같이 [MASK]를 기존 토큰으로 대체하는 것은 아주 적은 확률로만 대체하기 때문에 해당 문제를 해결하지 못한다.

          AR: 해당 문제와 무관하다.

        • Context Dependency:

          AR: 한방향에서만의 정보를 학습해 표현할 수 있다.

          AE: 양방향에서의 정보를 학습해 표현할 수 있다.

    • XLNet의 제안
      • Permutation Language Modeling

        ZT\mathcal{Z}_{T}: T 시퀀스의 순열(permutation)

        입력 시퀀스에 대한 순열을 구한 뒤, AR로 학습하자. → 양방향 context 학습

        순열의 순서가 정해지면, 실제로 토큰의 순서를 변경하는 것이 아니라, 이전 시퀀스에 있는 정보만 활용하도록 모델링한다.

      • Two-Stream Self-Attention for Target Position-Aware Representation

        일반적인 언어 모델과 같이 permutation의 순서로 나타내 예측하는 경우, target 위치가 position에 관계없이 같은 값을 가지는 문제가 있다. 예를 들어, [1,2,3,4]라는 순서와 [1,2,4,3]의 순서가 정해졌을 때는 동일한 representation으로 다른 target을 맞춰야하는 문제가 있다.

        이러한 문제를 해결하고자, target position-aware representation을 제안한다.

        hθ(xz<t)gθ(xz<t,zt)h_{\theta}(x_{z<t}) \to g_{\theta}(x_{z<t}, z_{t})

        그리고 이러한, target position-aware representation을 구현하기 위해,

        Two-Stream Self Attention 구조를 사용하며, 이는 아래와 같은 2가지 표현을 고려한 transformer 구조를 제안한다.

        이 때, 현재 시점의 위치 정보를 위한 w는 학습가능한 random variable로 초기화한다. Query Representation을 통해 아래를 학습할 수 있다.

        • [3, 2, 4, 1] : 여태까지 학교, 어제라는 단어를 봤는데 말이야. 이번에 맞춰야 할 단어는 원래 문장에서 네번째에 있었어. 이 단어는 뭘까?
        • [3, 2, 1, 4] : 여태까지 학교, 어제라는 단어를 봤는데 말이야. 이번에 맞춰야 할 단어는 원래 문장에서 첫번째에 있었어. 이 단어는 뭘까?

    2) RoBERTa


    • A Robustly Optimized BERT Pretraining Approach
    • BERT가 Underfit되었다고 가정하고 추가학습. 모델 구조는 BERT와 동일.
    • 변화
      • 모델 학습시간 증가, 배치 크기 증가, 학습데이터 증가
        • 학습데이터: BookCorpus, CC-News, OpenWebText, Stories
      • NSP제거: 너무 쉬워 언어를 깊게 이해하는 것에 방해가 될 수 있음
      • 긴 시퀀스 추가
      • Masking을 미리 수행 → dynamic masking
    • 결과 (cf. XLNet v2의 결과에서는 XLNet의 성능이 높음.)

    3) MASS


    • Masked Sequence to Sequence Pre-training for Language Generation
    • 모델 구조

      XLNet의 구조와 유사하며, Masking을 다르게 함.

    • Seq2Seq 모델에서 masking 방법을 추가

      Masking은 sentence의 부분(fragment)에 적용

      디코더에서는 마스킹된 부분을 autoregressive하게 넣어주며, 인코더에서 마스킹이되지 않은 부분은 디코더에서 마스킹을 해줌.

      인코더와 디코더의 입력을 다르게 하여, 서로 의존적으로 학습이 가능

    • fragment 길이 k에 따른 MASS
      • k=1인 경우: Masked LM in BERT와 유사하게 작동한다 볼 수 있다.
      • k=m 인 경우: GPT와 유사하다고 볼 수 있다.

    4) BART


    • Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
    • 구조

      MASS와 유사한 구조이지만, 마스킹을 인코더에서만 여러 방법으로 수행. 코더에서는 MASS와 다르게 마스킹을 하지 않음

    • 인코더 마스킹 방안

      이 때, 5가지의 masking방안을 모두 수행하지는 않고, masking방안 별로 각각 모델을 만듬. → 3번 masking 방안이 가장 좋은 masking방안임을 확인.

    5) MT-DNN


    • Multi-Task Deep Neural Networks for Natural Language Understanding
    • Multi-task learning

      MTL은 이전 task에서의 학습된 지식이, 새로운 task를 학습하는데 도움을 줄 것이라는 사람의 학습활동에서 영감을 받았다.

      MTL은 여러 연관된 지도학습 데이터를 사용하여, 보다 많은 양의 라벨링된 데이터를 사용하는 이점이 있다.

      또한 하나의 모델로 여러 task를 사전학습하기 때문에, regularization 효과를 볼 수 있다.

      • 수행한 Tasks
    • 구조
      • Shared layers부분은 BERT와 같음
      • 사전학습 단계에서 여러 task를 학습하면서 representation을 생성
    • 학습
    • 결과

      downstream 데이터셋이 적을 때, MT-DNN의 효과가 크다.

    6) T5


    • Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
    • 아래 그림과 같이, text-to-text 포멧으로 모든 언어문제를 하나의 통합된 프레임워크로 학습한다. 아래와 같이 task자체를 text로 변환하여 입력으로 넣는다.
    • T5에 적용된 방법
      • Training Objective: Modified MLM
        • MLM을 통한 양방향 구조
        • 연속된 토큰을 마스킹 (BART와 유사)
        • 인코더-디코더 구조로 input과 target을 갖고 있음
        • Input에서 마스킹하지 않은 부분을 target에서 예측해야 하마 (MASS와 유사)
        • Output단계에서는 FFNN+Softmax로 시퀀스 생성
      • Model 구조

        주어진 정보에 대해서는 양방향 Attention, 정답을 생성하는 부분에서는 단방향 Attention을 이용하는 Prefix LM 구조

      • Corruption (변형)

        T5에서는 위와 같은 변화를 주면서 실험을 수행했다. 별표는 T-5의 base모델이다.

    Quantization, Pruning, Knowledge Distillation, Parameter Sharing on Transformer & BERT


    Transformer를 가볍고 빠르게 만드는 기법들을 살펴보자.

    1) Transformer.zip


    • Quantization: 가중치나 활성함수를 표현하는데 필요한 비트 수를 줄여 모델을 압축하는 것
    • Pruning: 모델의 가중치의 중복성을 탐색하고, 중복이나 중요하지 않은 가중치를 제거하는 방법
    • 실험
      • Quantizaition
        • K-means Quantization

          Deep Compression 논문과 같이, weight의 최소 최대값 이내의 값들로 초기 군집중심으로 설정 후, weight를 K-means 군집화를 통해 중심값으로 대체한다. 이 후에, fine-tuning을 통해 군집중심값을 조정한다. 역전파할 때 군집중심의 gradient는 각 weight의 gradient의 합으로 정의한다.

        • Binary Masking

          왼쪽은 Binary Scheme Fixed(BS-Fixed) 오른쪽은 BS-Flexible

          c1, c2는 하이퍼파라미터로, 정하는 것이 시간소요가 크다. 따라서, 위와 같은 방법으로 가중치에 대한 2군집으로 k-means로 구한 뒤 학습을 통해, c1, c2를 구할 수 있다.

      • Pruning

        Iterative Magnitude Pruning는 특정 크기보다 작은 weight을 마스킹하고 나머지 가중치를 학습하는 작업이다. 크기가 작은 가중치는 직관적으로 덜 중요하기 때문에, 모델 압축에 매우 효과적이다. 이러한 가중치를 0으로 설정해 제거하면, 성능에 큰 영향을 미치지 않는다.

    • 결과

      1-bit att-quantization은 transformer의 self-attention부분만 양자화 한 것이다.

      pruning은 X% 비율에서 시작해 Y%의 비율이 pruning되게 한 것이다. (https://arxiv.org/pdf/1902.09574.pdf 를 참고하면, 90%를 가지치기 하더라도 90%의 성능을 유지한다.)

      → Mitchell et al. 은 NeurIPS에서 발표한 Are Sixteen Heads Really Better than One? 에서 각 Attention block의 head가 얼마나 실제 성능에 기여하는지를 분석

      분석 결과: 실제로 작업에 기여하는 Attention Head는 전체 Head에 비해 일부분

    2) DistilBERT


    • Knowledge Distillation

      where:

      xx: 입력 , WW: student model의 파라미터 , yy: 라벨 , H\mathcal{H}: 교차엔트로피손실함수

      σ\sigma: T로 매개화된 소프트맥스 함수 , TT: Temperature, 얼마나 soften할 것인지

      zt,zsz_{t} , z_{s}: teacher 모델의 로짓, student 모델의 로짓

      # ref: https://github.com/peterliht/knowledge-distillation-pytorch/blob/master/model/net.py#L100
      
      def loss_fn_kd(outputs, labels, teacher_outputs, params):
          """
          Compute the knowledge-distillation (KD) loss given outputs, labels.
          "Hyperparameters": temperature and alpha
          NOTE: the KL Divergence for PyTorch comparing the softmaxs of teacher
          and student expects the input tensor to be log probabilities! See Issue #2
          """
          alpha = params.alpha
          T = params.temperature
      		# T를 통해 기존 teacher와 student의 output을 더 soft하게 해준다.
      		# alpah를 통해 Distillation loss와 student loss의 비율을 정한다.
          KD_loss = nn.KLDivLoss()(F.log_softmax(outputs/T, dim=1),
                                   F.softmax(teacher_outputs/T, dim=1)) \
      														 * (alpha * T * T) + \
       							               F.cross_entropy(outputs, labels) * (1. - alpha)
      
          return KD_loss
    • DistilBERT

      BERT에서 knowledge distillation을 적용해, 기존 BERT에서 레이어 수가 절반인 student모델을 학습.

      그 결과, 파라미터의 수가 절반정도임에도 불구하고 대등한 성능을 보임.

    3) ALBERT: A Lite BERT


    • 기존 Pre-trained LM들 좋은 성능에는 Large model 필요 → 이에 따른 문제점
      • Memory Limitations
      • Longer training times
    • ALBERT
      • Distillation없이 성능이 좋은 작은 모델 구축을 위 2가지 테크닉 적용 & 새로운 task 추가
        • Factorized Embedding parameterization
        • Cross-Layer Parameter Sharing
        • Sentence-order prediction
      • Factorized Embedding Parameterization

        기존 BERT에서는 입력토큰의 임베딩 크기(E)와 은닉층의 임베딩 크기(H)가 동일하도록 구성했다. 하지만, 토큰 임베딩은 context independent한 표현이고, 은닉층의 표현은 context dependent한 표현이다. 따라서, 토큰 임베딩의 크기를 은닉층 임베딩 크기보다 작게한다.

        이 때, 줄여진 임베딩 크기를 은닉층의 크기로 다시 맞춰주기 위해, E×HE \times H 크기의 은닉층을 추가한다.

        파라미터의 개수는 V×HV \times H 에서 (V×E)+(E×H)(V \times E) + (E \times H)가 되며, V: 30,000 , E: 256, H: 786인 경우 약 23,000,00 → 약 7,800,000 으로 줄어든다.

      • Cross-Layer Parameter Sharing

        Universal Transformer(Dehghani et al, 2019)에서 transformer의 파라미터를 공유하면, 더 나은 성능을 보이는 것을 주장했다. 파라미터 수를 줄이기 위해, ALBERT에서도 하나의 인코더 블락에 layer 수 만큼 12번 또는 24번 넣어 학습한다. 이를 통해 하나의 인코더 블럭이 여러 기능을 모두 학습할 것을 기대한다.

        이를 전체 공유, FFN 부분만 공유, Attention 부분만 공유, 공유하지 않음을 변화해가며 실험한 결과는 아래와 같다.

      • Sentence Order Prediction

        NSP는 두 문장에서 첫 문장이 두 번째 문장 앞에오는지를 학습한다면, SOP는 두 문장의 순서가 바뀌었는지 안바뀌었는지를 학습하는 것이다.

        negative sampling할 때, NSP는 두 문장의 위치가 많이 떨어질 수 있지만, SOP는 연속된 두 문장으로 수행한다.

        NSP는 같은 주제를 말하는지(Topic Prediction)을 학습하는 것으로 볼 수 있으며, SOP는 두 문장간의 연관관계를 학습한다고 볼 수 있다.

      • 결과

    References


    'ML DL DS > NLP' 카테고리의 다른 글

    Seq2Seq Learning & Pre-trained Models - (1)  (0) 2022.06.05

    댓글

Designed by Tistory.