Search
🎹

[12/22(목)] Lecture 10 : Transformers and Pretraining

1. Problems of Vocab

기존의 방법론에서는 어느정도 큰 규모의 Vocab이 존재한다고 가정
Word2Vec과 같은 것을 학습시켜 Fixed Vocab을 만들었다. → Pretrained Embedding
Embedding 과정 설명
1.
문자열 입력
2.
학습된 토크나이저를 통해 토큰화
3.
각 토큰별 학습된 임베딩 벡터 변환
학습 데이터에 존재하지 않는 단어는?
모두 UNK으로 토큰화, 서로 다른 토큰들이 모두 동일 벡터로 변환됨
변형문자, 오탈자, 신조어 등에 대응하지 못한다!
하지만 이러한 방법은 여러가지 문제점이 존재
학습 데이터 부족
Out-Of-Vocabulary 문제 발생
다른 문장에도 동일한 임베딩 사용
그래서 등장한 해결 방법?
1.
Subword Token
a.
단어 이하의 단위에서 언어 구조를 추론
b.
Byte-Pair-Encoding(BPE)
c.
문법/의미/활용 포착
2.
Byte-Pair-Encoding(BPE)
a.
단어를 문자 단위로 분해
b.
전체 Corpus에서 가장 자주 등장하는 연속된 두 문자열 병합
c.
병합된 토큰을 기반으로 분해 결과 조합
d.
종료 조건(병합 횟수, 토큰 개수 등)을 만족할 때까지 1~3 반복
기존의 방법론(Word2Vec)과 다르게 신조어, 오타에 대응이 가능해짐
Out-Of-Vocabulary 문제에서 비교적 자유로워짐

2. Pretrain(사전학습)

Pretrain
Input의 일부를 훼손
모델이 input을 복원
의미적/문법적 구조 학습
Downstream Task
실제 수행하고자 하는 Task
사전학습된 모델의 weight를 inital weight로 삼아 학습(fine-tuning) 진행
QA / Sentiment Analysis / NLI…etc

2-1. Pretrain Task : 문장의 일부를 변형하고, 해당 부분의 단어를 예측

1.
단편적 사실 예측
2.
문법 정보 예측
3.
상호 참조 예측
4.
감성 예측
5.
추론
6.
단순 계산

2-2. Pretrain Whole Model

Encoder와 Decoder가 수행하는 역할이 다르다!
1.
Encoder : input이 연속적으로 레이어 통과
a.
Output : Contextual Embedding(batch, sequence length, embed dim)
b.
입력 문장에서 맥락/의미/문법 구조 등을 파악
2.
Decoder : input과 encoder output이 연속적으로 레이어 통과
a.
Output : 조건부 문장 생성(batch, sequence length, vocab dim)
b.
입력 문장과 이전 생성 문장을 바탕으로 문장 생성

2-3. Pretrain objective functions

Language Modeling
별도의 label이 없어도 된다.
LM은 그 자체로 언어구조/문법 및 의미적 정보 파악을 가능케 한다.
SGD with Pretrain/Finetune
Random initailizing 𝜃에 비해 𝜃(햇)Rk global optimum에 가까울 수 있다. (이해 부족…)
적은 데이터로도 잘 학습되며, 쉽게 수렴된다.

2-4. Pretrain Model 종류

Decoder
일반적인 Language Model
이전 시점의 토큰을 조건으로 하는 생성모델
Encoder
양방향 토큰 정보를 활용할 수 있다.
이전에 배운 Language Model로 pretrain 불가능하다.
Encoder-Decoder
인코더가 양방향 정보를 종합
디코더가 생성에 집중

2-5. 그 외 용어 정리

Pretrain task : Pretraining시 수행하는 pretrain을 위한 태스크
Downstream task : 실제 수행할 구체적인 태스크
Head : pretrain된 모델에 붙어 다운스트림 태스크에 맞춘 레이어
Finetuning 이전에 학습이 전혀 되어있지 않은 상태
Pretrained model : pretrain task를 수행한 레이어
Finetuning 이전에 이미 어느정도 학습된 상태

3. GPT-1

3-1. GPT-1 Pretrain

트랜스포머 디코더만 사용하는 모델
단방향 모델이다.
일반적인 LM을 통해 pretrain 한다.
Teacher Forcing을 이용한다.
target word(ground truth)를 decoder의 다음 입력으로 넣어주는 기법
LM은 레이블이 필요없기 때문에 대량의 데이터를 확보 가능하다.
Transformer와 비교

3-2. GPT-1 Finetuning

4가지 finetuning 방법론 실험
Classification : 긍/부정, 문법 오류 여부
Entailment : 주어진 문장들의 관계 분류
Similarity : 두 문장 간 의미적 유사도 파악
Multiple Choice : 주어진 문제에 대한 보기 중 정답 고르기
문장 종료 토큰 : <Extract>
문장 마지막에 <Extract>을 생성하도록 한다.
Teaching Forcing을 이용하여 학습
<Extract> 위치의 출력값을 head에 입력

4. BERT

4-1. BERT Pretrain

BERT는 2가지 pretrain task가 존재한다.(MLM, NSP)
트랜스포머 인코더만 사용(GPT-1와는 정반대)
양방향 모델이다
MLM과 NSP를 통해 학습한다.

4-2. Masked Language Modeling (MLM)

양방향 모델 - 양방향 토큰의 정보를 활용한다.
Language Model 목적함수 사용 불가(이해 못함…)
입력 토큰의 15%를 변형하고, 이를 예측하는 과정을 수행한다.
80% : [MASK]
10% : 랜덤한 다른 토큰
10% : 원본 토큰
모델이 언어 구조를 학습한다.

4-3. Next Sentence Prediction (NSP)

많은 다운스트림 태스크에서 문장 간 관계를 다룬다.
이를 반영한 pretrain task가 필요하다.
두 문장을 입력하는 과정을 수행한다.
50% : 학습 데이터에서 연속된 문장
50% : 서로 다른 문서에서 사용된 문장
연속된 문장 여부를 판단한다(IsNext)
모델이 문장간 관계를 학습한다.

4-4. MLM & NSP

4-5. BERT input

BERT는 Token, Segment, Position 3가지의 임베딩 벡터를 더하여 입력 임베딩을 생성한다.
Token Embedding :Wordpiece 기반 토큰 단위 임베딩
Segment Embedding : 트랜스포머의 positional encoding
Position Embedding : 두 문장을 구분하기 위한 임베딩

4-6. 다른 모델들과 비교

4-7. RoBERTa

BERT의 구조는 그대로 가져오되, NSP를 제외하고 추가적인 하이퍼파라미터 튜닝 진행
BERT의 성능을 더 높일 수 있었다.
Pretrain시 추가적인 데이터셋과 epoch로 더 높은 성능을 달성할 수 있었다.

5. T5

트랜스포머 구조를 가져오되 데이터셋과 모델을 키우고 Pretrain 과정을 정교화 한다.
매우 다양한 다운스트림 태스크에 대한 성능 평가를 진행한다.
Pretrain task로 span corruption을 사용

5-1. T5의 Pretrain task

인코더의 입력으로 MASK 사용
디코더의 출력으로 MASK ID와 해당하는 문장 생성
인코더는 MLM을 디코더는 LM을 수행하는 pretrain task
GPT보다 생성을 잘하고, BERT보다 파악을 잘하는 모델 구성!

5-2. BERT와 T5의 차이점

T5는 전체 토큰 중 15%를 25개의 MASK로 MASKING
BERT는 모델이 하나의 토큰을 복원하지만, T5는 마스킹된 부분을 생성해야한다.

5-3. 그 외

T5의 task
Open domain question & Answering task : 질문과 정답이 포함된 문장이 입력되면 모델이 정답을 생성한다.
다른 모델들과 비교