.box_article .article_cont p code
해당 포스팅은 고현웅 님께서 업로드 하신 Machine Translation Survey(Vol1): Background 영상을 참고해 만들었습니다. 관련 링크는 다음과 같습니다: https://www.youtube.com/watch?v=KQfvEg-fGMw
1) Encoder: 입력 받은 데이터를 이해해 이에 대한 일종의 보고서(Context vector)를 출력하는 모델
2) Decoder: 이 보고서를 입력 받아 어떤 문장을 생성하는 모델
→ 문제점: 입력이 엄청나게 길더라도 이 모든 내용을 fixed size 벡터로 축소해 보고서를 출력해야 함. 즉 해당 보고서로 내용을 완벽하게 표현할 수 없음! (빠지고 축소되고... 등등) 이는 문장 생성에서도 마찬가지!
Encoder가 이해한 내용을 한 번에 처리하는 것이 아니라 토큰 별로 정리해 출력하면 이를 토대로 Decoder가 내용을 정리한 후 유사도를 계산해 중요한 토큰만 추출하여 이를 바탕으로 문장을 생성하는 것
구조의 이해
문장 내 각 토큰(노란 박스) 별로 Key(encoder hidden state)를 출력 → 이를 토대로 Decoder의 hidden state인 query(빨간 동그라미)와 inner product를 통해 score를 계산 → softmax를 통해 확률 값으로 변경 시켜 앞서 추출된 key와 곱해 Value(alignment vector)를 출력 → 이 후 이들의 합을 새로운 시점의 입력으로 사용하는 과정에서 Decoder의 이전 스텝(분홍 동그라미)과 concat을 통해 다음 입력으로 사용
즉, 각 타임 스텝에서 Decoder의 Query와 Encoder의 Key 사이의 유사도를 반영시켜 사용하는 것!
RNN의 Recurrent Unit을 제거하고 Multi Layer Perceptron과 Attention만 사용하는 새로운 형식의 뉴럴 네트워크
Input Embedding + Positional Encoding
1) Input Embedding: 토큰화된 단어들을 임베딩 벡터로 만들어내는 과정
2) Positional Encoding: 순서(위치)에 대한 mapping 테이블
각 토큰에 위치 정보가 반복돼서 더해지니 학습 과정에서 모델이 이를 눈치채 위치 정보가 반영되는 구조
Multi-head Self Attention
다른 문장이 아니라 같은 문장끼리 스스로 Attention 계산을 수행
1) MatMul: Query와 Key를 내적해 유사도 계산
2) Scale: 계산의 안정화를 위해 결과를 특정 상수로 나눠 스케일링
3) Softmax: 0과 1 사이의 값으로 변환
4) MatMul: 계산 결과를 Value와 곱해 줌
5) 최종 계산 결과 Z가 다음 레이어로 넘어감
각 Query, Key, Value를 쪼개 head를 만들고 이에 대해 Self Attention을 거쳐 concat 해주는 메커니즘
위에서 만들어진 여러 개의 Z를 Concat 해 합쳐주고 size를 맞춰주기 위해 weight를 곱해주어 최종 output Z를 출력
→ Attention 맵을 여러개 만들어 다양한 경우의 수를 고려할 수 있음 (앙상블의 개념)
Addition & Layer Normalization
1) Addition: residual connection
→ Multi-head self attention의 출력 값을 기존 입력과 더해 반환
⇒ 다른 레이어가 망가지더라도 그래디언트가 잘 전달될 수 있기 때문에 모델이 좀 더 강건
2) Layer Normalization
Positionwise Feed Forward Network
Feature를 4배로 키웠다가 다시 줄이고 반환
⇒ 위의 과정을 총 6개의 레이어로 중첩해 반복: 이 출력값이 Decoder의 key, Value로 넘어감
Output Embedding + Positional Encoding
Decoder는 정답으로 사용할 문장을 한 칸씩 밀어서 입력
Masked Multi-head Attention
역삼각형 마스킹이 추가된 Multi-head Attention
Encoder-Decoder Attention(=Cross Attention)
Encoder와 Decoder가 연결되는 부분
Final Linear & Softmax
출력된 벡터가 Linear를 거쳐 사전의 크기만큼 커지고 logit 값은 값이 너무 크거나 작으니 Softmax를 거쳐 확률 값을 출력
Semi(Self) Supervised Learning
1) 수많은 Unsupervised 데이터로 모델을 학습시키고
2) 적은 Supervised 데이터로 모델을 Fine Tuning 하는 아이디어 WOW!: semi
3) 단, Unsupervised 데이터에서도 사람 없이도 자동으로 라벨이 가능: self
BERT는 Transformer의 Encoder로 만든 모델 (이해 task에 특화)
→ Pretrain 단계에서 2개의 문장을 받아 다음과 같은 포맷으로 만들어 줌
1) CLS 토큰: 문장 분류나 문장 임베딩에 사용할 수 있는 기능성 Class 토큰
2) SEP 토큰: N개의 문장을 구분 지어 주는 Separator 토큰
⇒ 이렇게 만들어진 입력 구조로 BERT는 두 가지 Pretrain task를 풀게 됨
1) Masked Language Modeling: MLM
→ 문장의 일부(15%) 토큰을 랜덤으로 변경 (80%: MASK, 10%: Other, 10%: 그대로)
2) Next Sentence Prediction: NSP
→ 두 문장을 SEP 토큰으로 구분해 입력: 원래 이어지던 문장인지 아닌지 이진 분류를 맞추는 task
위의 task를 마찬가지로 모델의 구조를 약간 바꾸고 적은 양의 Supervised 데이터를 사용해 학습
⇒ 엄청나게 많은 task에서 최고의 성능을 보임
이전 타임스텝의 출력이 다시 입력이 되는 것
ex) RNN, GPT와 같은 Causal Language Model을 푸는 모델들 → 언어 생성에 적합
입력을 그대로 복구하는 인코더-디코더 모델링
ex) VAE
입력에 고의로 noise를 주고 원래대로 복구하는 작업
3. BART: Denoising SequencetoSequence Pretraining for Natural Language Generation Translation and Comprehension 논문 리뷰 (0) | 2021.09.25 |
---|---|
2. Fine-tune BERT for Extractive Summarization 논문 리뷰 (0) | 2021.09.19 |
0. [Paper Review] Transformer to T5 (XLNet, RoBERTa, MASS, BART, MT-DNN,T5) (0) | 2021.09.19 |
1. Attention is all you need 논문 리뷰 (0) | 2021.09.18 |
NLP 스터디2 소개 (0) | 2021.08.27 |
댓글 영역