당니이
다은이의 컴퓨터 공부
당니이
전체 방문자
오늘
어제
  • 분류 전체보기 (140)
    • Achieved 👩🏻 (14)
      • 생각들 (2)
      • TIL (6)
      • Trial and Error (1)
      • Inspiration ✨ (0)
      • 미국 박사 준비 🎓 (1)
    • Computer Vision💖 (39)
      • Basic (9)
      • Video (5)
      • Continual Learning (7)
      • Generative model (2)
      • Domain (DA & DG) (5)
      • Multimodal (8)
      • Multitask Learning (1)
      • Segmentation (1)
      • Colorization (1)
    • RL 🤖 (4)
    • Autonomous Driving 🚙 (11)
      • Geometry (4)
      • LiDAR 3D Detection (1)
      • Trajectory prediction (2)
      • Lane Detection (1)
      • HDmap (3)
    • Linux (15)
    • PyTorch👩🏻‍💻 (10)
    • Linear Algebra (2)
    • Python (5)
    • NLP (11)
      • Article 📑 (1)
    • Algorithms 💻 (22)
      • Basic (8)
      • BAEKJOON (8)
      • Programmers (2)
    • ML (1)
      • 통계적 머신러닝(20-2) (1)
    • SQL (3)
    • 기초금융 💵 (1)

블로그 메뉴

  • 홈
  • About me

공지사항

인기 글

태그

  • conda
  • 백준
  • Linux
  • 자료구조
  • domain adaptation
  • Incremental Learning
  • pytorch
  • Python
  • CL
  • CV
  • dfs
  • domain generalization
  • 백트래킹
  • NLP
  • 알고리즘
  • LLM
  • continual learning
  • til
  • 리눅스
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
당니이

다은이의 컴퓨터 공부

[NLP Article] BERT에 대한 모든 것
NLP/Article 📑

[NLP Article] BERT에 대한 모든 것

2024. 4. 11. 01:57
반응형

이 게시글은 Language Understanding with BERT 아티클을 참고한 글이다! Thanks to Jinheon Baek~!
출국 전 NLP 공부 .. 일주일에 게시글 세개씩 올릴 것이다. 항상 겸손하기 .. 
 

◆ BERT는 뭘까 

BERT의 효용은 아래 두가지라고 저자는 주장한다. 

  • Self-supervised learning으로 raw textual data를 pre-training (즉, downstream task를 위한 encoder) 
  • 각 token에 대해 bidirectional feature representation을 학습 

 

◆ Building Blocks of BERT 

BERT의 구성요소는 1) Self-Attention 2) Transformer Encoders 3) Self-supervised Learning. 


1) Self-attention 

Self-attention은 크게 token의 sequence를 input으로 받고, non-linear transformation을 수행한다.
그럼 이 transformation은 뭘까? BERT의 self-attention은 각 token vector에 대해 아래와 같은 것을 한다. 

  • 특정 현재 token을 sequence내 다른 token들과 비교 후, 이들의 attention score 계산 
  • 다른 token들에 대한 현재 token의 representation을 attention score로 weighted 하고, adapt

-> 시퀀스 내 다른 토큰에 기반해 Context-aware representation을 생성한다. 

이러한 self-attention 구조에는 두가지 특징이 있다. 1) Multi-head 2) Bidirectional.
일단 Multiple attention head 구조를 지닌다. 이는 각 다른 attention pattern을 배울 수 있게 한다. 
또한, 중요한 것은 위 self-attention 형태가 Bidirectional 형태라는 것이다. Unidirection과의 차이는 무엇이냐구? 바로 아래이다.  

화살표를 보라
  • Unidirectional self-attention: 화살표의 방향에서 미루어보듯, 이는 각 토큰들이 precede (선행하는) 토큰에만 의존함을 보장한다. 나중에 오는 나머지 토큰들은 masking을 해준다. 이는 next world를 predict할 때 "look forward"를 하지 못하도록 한다. BERT 이전의 모델들은 이러한 방법을 이용했다. (이전 모델과 BERT의 가장 큰 차이점이다!) 
  • Bidirectional self-attention: 각 토큰 representation을 시퀀스 내 모든 토큰을 참고해 만든다. 따라서 forward, backward direction을 모두 고려한다. 

 


2) Transformer encoder 

Transformer는 기본적으로 인코더, 디코더로 이루어지지만 BERT는 이 중 encoder만을 이용한다. 왜냐하면 BERT는 기본적으로 pre-training을 위한 모델이기 때문이다!
이는 (Bidirectional, multi-headed) self-attention과 feed forward transformation으로 구성된다. (layer normalization과 residual connection도 함께!) 


3) Self-supervised Learning 

BERT의 우수한 성능 이유 중 하나는 self-supervised manner로 pre-training 되었기 때문이다. 이는 labeled dataset에 국한되지 않고 raw text에서 training 될 수 있다는 점에서 가치를 지닌다. 따라서 BERT는 web 상의 수많은 데이터로 training 될 수 있었다. 

이러한 Self-supervised training 방법에는 .. 

  • Masked Language Modeling (MLM) : 문장 내 특정 단어를 masking하고 이를 predict 하기 
  • Next Sentence Prediction (NSP) : 두 쌍의 문장이 주어지면 이 문장들이 서로를 따르는지 체크

 

◆ BERT는 어떻게 작동하는가? 

그렇다면 위 구조를 가진 BERT는 실질적으로 어떻게 작동하는걸까? 

BERT's Architecture 

두가지의 아키텍처를 지닌다. BERT Base / BERT Large.
-> 여기서 BERT Base는 GPT와 같은 사이즈라서, fair하게 비교될 수 있다고 한다. 


BERT의 Input 만들기 

Raw data에서 BERT의 Input을 만들어보자. 궁금하지 않은가? 아래와 같은 프로세스이다. 

  1. Tokenization : Raw data를 토크나이저로 쪼갠다. 
  2. "Special" token을 삽입 : Input 시퀀스를 [CLS] 토큰으로 시작하고, [SEP] 토큰으로 끝낸다. 
  3. Embedding : WordPiece embedding vector로 각 토큰을 바꾼다. 이제 토큰은 벡터의 시퀀스가 된다. 
  4. 부가적인 Embedding : 시퀀스 내 각 요소에 learnable embedding을 추가해서, 각 요소의 position을 나타내도록 한다. 

이를 조금 더 자세히 도식화 하면 아래와 같다. 이해가 바로 갈 것이다. 


BERT Training 하기 

Input을 만들었으니 training 해보자. Pre-training과 fine-tuning으로 나누어 설명하겠다. 

 

[1] Pretraining 

앞서 설명한 것처럼, MLM과 NSP를 이용해 pretraining된다. BERT는 Bidirectional self-attention을 사용하기에, 이전 모델과 같이 반복적으로 next world를 예측하도록 설계된 모델이 아니기 때문에, 이전에 사용하던 pretraining 방법을 사용할 수 없다. 
먼저 MLM의 경우, 다음에 올 단어를 예측하는 태스크라고 소개했다. 학습 과정을 살펴보자. 

  • 전체 토큰의 15% 정도를 랜덤하게 masking 하고 ( [MASK] 토큰 이용 )
  • classification layer를 통과시켜 [MASK] 자리를 예측하도록 한다. 
MSM

두 문장의 관계를 보는 NSP task의 경우

  • 두번째 문장이 50% 확률로 랜덤 문장으로 바뀐다. 
  • [CLS] 토큰에 대한 final representation은 classification module 통과해 두 문장이 매치되는지 판단한다. 
NSP

[2] Fine-tuning 

Pre-training을 했으니 fine-tuning을 안할 수가 없겠죠? Fine-tuning 시에는 모든 파라미터가 end-to-end로 업데이트 된다고 보면 된다. Fine-tuning task의 종류는 아래와 같다. 

  • Token-level task : 각 토큰에 대한 prediction 
  • Sentence / Document-level task : [CLS] 토큰의 output representation을 separate module에 통과시켜 sequence-level prediction이 이루어지도록 함. 
  • Text pair task : 문장 A, B를 각각 인코딩하고, [CLS] 토큰의 output representation을 separate module에 통과시켜 text pair에 기반에 예측하도록 함. 

 
이렇게 BERT를 알아보았다. 아주아주 재밌는 아티클이었다! 

반응형
저작자표시 (새창열림)
    당니이
    당니이
    씩씩하게 공부하기 📚💻

    티스토리툴바