[논문 리뷰 - 3] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

shanny·2025년 7월 12일

논문 리뷰

목록 보기
34/42

‼️ 개인 학습 내용으로, 오류가 있을 수 있습니다.

논문 URL - https://arxiv.org/abs/1810.04805

BERT

구성

  • 사전학습(pre-training)파인튜닝(fine-tuning)의 두 단계로 구성

01. 사전학습(Pre-training)

  • 목적 : 대규모 비지도(unlabeled) 텍스트 데이터로부터 일반적인 언어 표현을 학습한다.

  • 방식 :

    • Masked Language Model(MLM): 입력 문장에서 일부 토큰을 무작위로 마스킹(masking)하고, 주변 문맥만으로 마스킹된 단어를 예측하도록 학습한다.
    • Next Sentence Prediction(NSP): 두 문장이 연속된 문장인지 아닌지 예측하는 과제를 통해 문장 간 관계도 학습한다.
  • 결과 : 다양한 문맥 정보를 반영한 강력한 언어 표현을 획득한다.

02. 파인튜닝(Fine-tuning)

  • 목적 : 사전학습된 BERT를 각 다운스트림 작업(예: 질문응답, 문장 분류 등)에 맞게 최적화한다.

  • 방식 :

    • BERT의 모든 파라미터를 사전학습된 값으로 초기화한다.
    • 다운스트림 작업의 라벨이 있는 데이터로 전체 파라미터(혹은 대부분의 파라미터)를 추가 학습(fine-tune)한다.
  • 결과 : 각 작업별로 별도의 파인튜닝 모델이 생성된다. 즉, 같은 사전학습 파라미터로 시작하지만, 작업마다 최종 모델은 다르다

모델 architecture

  • BERT의 모델 아키텍처는 Transformer 인코더 구조를 기반으로 한 다층 양방향 트랜스포머 인코더이다.

  • 이 논문에서는 레이어 수(Transformer block 수)를 L, 히든 사이즈를 H, 셀프 어텐션 헤드 수를 A로 표기한다.

  • 주요 실험은 두 가지 모델 크기에서 이루어진다.

    • BERT_base: L=12, H=768, A=12, 총 파라미터 1억 1천만(110M)
    • BERT_large: L=24, H=1024, A=16, 총 파라미터 3억 4천만(340M)
  • BERT_base는 OpenAI GPT와 모델 크기를 동일하게 맞추기 위해 설계했다.

  • 하지만, BERT는 모든 층에서 양방향(bidirectional) self-attention을 사용하는 반면, GPT는 각 토큰이 왼쪽(이전 토큰) 정보만 참고하는 단방향 self-attention 구조를 쓴다

Input/Output 표현

  • 문장(sentence) 은 실제 문법적 문장이 아니라, 연속된 텍스트의 임의 구간을 의미한다.
  • 시퀀스(sequence)는 BERT에 입력되는 토큰의 연속을 가리키며, 하나의 문장일 수도 있고, 두 문장을 하나로 합친 것일 수도 있다.
  • BERT는 WordPiece 임베딩을 사용하며, 표준 모델의 경우 약 30,000개의 토큰으로 구성된 고정된 어휘를 갖는다.
  • 각 입력 시퀀스의 첫 번째 토큰은 항상 특수 분류 토큰([CLS])이고, 이 토큰의 마지막 히든 상태는 분류 작업에서 전체 시퀀스의 대표 임베딩으로 사용된다.
  • 문장 쌍 입력의 경우, 두 문장을 하나의 시퀀스로 합치고, [SEP] 토큰으로 두 문장을 구분한다.
  • 각 토큰에는 해당 토큰이 문장 A인지 문장 B인지 구분하는 세그먼트 임베딩이 추가된다.
  • 입력 임베딩은 다음 세 가지의 합으로 구성된다:
    • 토큰 임베딩 (WordPiece로 변환된 각 토큰의 임베딩)
    • 세그먼트 임베딩 (문장 A/B 구분)
    • 포지션 임베딩 (시퀀스 내 위치 정보)

사전학습된 BERT

Task #1 : Masked LM

  • 딥 양방향 모델은 좌→우 또는 우→좌 모델, 혹은 이 둘을 단순히 연결(concatenation)한 모델보다 더 강력하다고 볼 수 있다.
  • 하지만 기존의 조건부 언어 모델(standard conditional language model)은 단방향(좌→우 또는 우→좌)으로만 학습할 수 있다.
  • 만약 각 단어가 양방향 문맥을 모두 볼 수 있게 하면, 여러 층을 쌓았을 때 각 단어가 자기 자신을 간접적으로 볼 수 있어, 모델이 너무 쉽게 정답을 맞히는 문제가 발생한다.

MLM 방식(Cloze task)

  • 위 문제를 해결하기 위해 BERT는 Masked Language Model(MLM) 방식을 도입한다.
  • MLM에서는 입력 문장에서 일부 토큰(보통 15%)을 무작위로 마스킹([MASK] 토큰으로 대체)하고, 나머지 토큰(양쪽 문맥 모두 제공)을 바탕으로 마스킹된 단어를 예측하도록 학습한다.
    • 즉, MLM은 단방향 모델의 한계를 극복하고, 각 단어가 앞뒤 문맥을 모두 참고해 더 풍부한 언어 표현을 학습하도록 한다.
  • 실제 학습에서는 마스킹된 토큰의 위치에 해당하는 최종 히든 벡터를 소프트맥스(softmax) 출력층에 통과시켜 전체 어휘(vocabulary) 중 정답 토큰을 예측한다.
    • 즉, 입력의 모든 토큰이 셀프 어텐션에 참여하지만, 학습 손실(loss)은 마스킹된 토큰에 대해서만 계산한다.
  • 이 방식은 기존의 디노이징 오토인코더와 달리, 전체 입력을 복원하는 것이 아니라 마스킹된 단어만 예측하는 데 집중한다.
  • MLM 덕분에 BERT는 좌우 양방향 문맥 정보를 모두 활용하는 딥 트랜스포머 인코더를 효과적으로 사전학습할 수 있다.

한계

  • 사전학습에서는 [MASK] 토큰을 사용하지만, 실제 파인튜닝(fine-tuning)이나 실전 응용에서는 [MASK] 토큰이 등장하지 않는다는 점에서, 학습과 실제 사용 간에 불일치가 발생한다.

  • 이 문제를 완화하기 위해, BERT는 마스킹된 단어를 항상 [MASK] 토큰으로 바꾸지 않는다.

  • 구체적으로, 전체 토큰 중 15%를 무작위로 예측 대상으로 선택하고,

    • 선택된 토큰의 80%는 [MASK] 토큰으로 대체
    • 10%는 임의의 다른 토큰으로 대체
    • 나머지 10%는 원래 토큰을 그대로 둔다
  • 이렇게 변환된 입력에서, 해당 위치의 히든 벡터를 사용해 원래 토큰을 예측하도록 학습하며, 손실 함수는 cross entropy loss(두 확률 분포의 차이를 구함)를 사용한다.

Task #2 : Next Sentence Prediction(NSP)

  • 목적은, 두 문장이 실제로 연속된 문장인지(즉, 문장 B가 문장 A 바로 다음에 등장하는지) 여부를 예측하는 이진 분류(binary classification) 문제이다.

  • 학습 데이터 생성:

    • 각 사전학습 샘플에서 문장 A와 문장 B를 선택한다.
    • 50% 확률로 문장 B는 실제로 문장 A 다음에 등장하는 문장(정답: IsNext),
    • 50% 확률로 문장 B는 문서 내 임의의 다른 문장(정답: NotNext)이다.
  • 입력 구성:

    • 두 문장을 [CLS] + 문장 A + [SEP] + 문장 B + [SEP] 형태로 연결한다.
    • [CLS] 토큰의 마지막 히든 벡터를 전체 시퀀스의 대표 임베딩으로 사용하여 NSP 분류를 수행한다.
  • 의의:

    • NSP는 단순 토큰 수준의 언어모델링만으로는 학습할 수 없는, 문장 간 관계(문맥, 순서 등)를 모델이 학습할 수 있게 한다.
    • 특히 질문응답(QA), 자연어 추론(NLI) 등 문장 쌍 관계가 중요한 다운스트림 작업에서 성능 향상에 크게 기여한다.
    • 즉, NSP는 BERT가 문장 간의 논리적, 순차적 관계를 이해할 수 있도록 도와주는 핵심 사전학습 과제다.
  • 기존 연구와의 차이점(단순 임베딩 전달보다 훨씬 더 풍부하고 유연한 전이학습 가능)

    • 기존 방식: 문장 임베딩만 추출해 별도 분류기 등에 사용
    • BERT 방식: 전체 트랜스포머 파라미터(임베딩, 레이어 등)를 다운스트림 모델에 통째로 이전 -> 파인튜닝을 통해 최적화

데이터

  • BERT의 사전학습(pre-training) 데이터는 기존 언어모델 사전학습 연구와 유사하게 구성한다.
  • 구체적으로, BERT는 BooksCorpus(8억 단어)와 English Wikipedia(25억 단어)를 결합한 대규모 코퍼스를 사용해 사전학습한다.
  • Wikipedia 데이터는 리스트, 표, 헤더 등은 제외하고 본문 텍스트만 추출한다.
  • 이렇게 문서 단위(document-level)로 긴 연속 시퀀스를 추출할 수 있는 코퍼스를 사용해야 하며,
    이는 문장 단위로 무작위로 섞인 데이터(Billion Word Benchmark 등)보다 더 효과적이다.
    이러한 방식을 통해 BERT는 문맥과 문장 간 관계를 잘 학습할 수 있다.

Fine-tuning BERT

  • BERT의 파인튜닝(fine-tuning)은 매우 직관적이다.
  • 트랜스포머의 셀프어텐션 메커니즘 덕분에, 입력과 출력만 적절히 교체하면 단일 문장 또는 문장 쌍 등 다양한 다운스트림 작업에 쉽게 적용할 수 있다.

문장 쌍 작업(예: 패러프레이즈, 자연어 추론, 질문응답 등)

  • 두 문장을 하나의 시퀀스로 합쳐 입력한다.

  • 기존에는 문장별로 임베딩을 뽑아 따로 인코딩한 뒤, 별도의 크로스어텐션을 적용하는 방식이 많았으나, BERT는 두 문장을 단일 시퀀스로 연결해 셀프어텐션을 통해 양방향 상호작용을 자연스럽게 처리한다.

  • 입력 구성:
    사전학습에서의 문장 A, B는 다운스트림 작업에서 아래와 같은 역할을 한다.
    (1) 패러프레이즈의 문장 쌍
    (2) 자연어 추론의 전제-가설 쌍
    (3) 질문응답의 질문-문단 쌍
    (4) 텍스트 분류나 시퀀스 태깅에서는 텍스트-빈값(∅) 쌍

  • 출력 구성:

    • 토큰 수준 작업(시퀀스 태깅, 질문응답 등)에는 각 토큰의 임베딩을 출력 레이어에 연결한다.
    • 문장 분류, 감성 분석, 자연어 추론 등 분류 작업에는 [CLS] 토큰의 임베딩을 출력 레이어에 연결한다.
  • 파인튜닝 시에는 모든 파라미터를 end-to-end로 학습하며, 작업별로 입력/출력만 다르게 구성하면 된다.

  • 또한, 파인튜닝은 사전학습에 비해 훨씬 적은 시간과 자원으로 가능하다.

  • BERT는 입력/출력 구조의 유연성과 셀프어텐션의 강력함 덕분에, 다양한 NLP 작업에 최소한의 수정만으로 최첨단 성능을 쉽게 달성할 수 있다.

profile
데이터 분석가

0개의 댓글