■ Key words
ㆍAttention이 결합된 Seq2Seq
- Teacher Forcing
ㆍTransformer
- self-attention
- Positional Encoding
※ 사전 학습 언어 모델(Pre-trained Language Model)
- Pre-training
- Fine-tuning
ㆍGPT(Generative Pre-Training)
- GPT의 구조
- 사전 학습 언어 모델(Pre-trained Language Model)
· Pre-training
· Fine-tuning
ㆍBERT(Bidirectional Encoder Representation by Transformer)
- BERT의 구조
- 사전 학습 언어 모델(Pre-trained Language Model)
· MLM(Masked Self-Attention)
· NSP(Next Sentence Prediction)
■ 주요내용
ㆍAttention이 결합된 Seq2Seq
- Teacher Forcing
ㆍTransformer - Attention is all you need
- RNN 모델이 순서대로 입력 받기 때문에 처리해야 하는 sequence가 길수록 연산이 길어지는 문제를
해결하기 위해 등장.
- 모든 토큰을 행렬로 동시에 입력받아 병렬연산이 가능하기 때문에 GPU 연산에 최적화 되어있음.
- 각 6개의 encoder와 decoder로 구성.
· encoder : Masked Multi-Head(Self) Attention, Feed Forward 2개의 sub-layer로 구성
· decoder : Masked Multi-Head(Self) Attention, Multi-Head(Encoder-Decoder) Attention, Feed Forward
3개의 sub-layer로 구성
- Positional Encoding(위치 인코딩) : 병렬화를 위해 모든 단어 벡터를 동시에 입력 받으므로 컴퓨터가 각
단어의 상대적인 위치를 인지할 수 있도록 sin 함수를 이용하여 별도의 벡터를 만드는 과정
- Self-Attention : 지시대명사가 문장 내에서 어떤 것을 지칭하는지 이해하기 위해 문장 내부 요소 관계 파악을
파악하기 위한 문장 자신에 대해 적용하는 메커니즘
* Self-Attention의 가중치 벡터 구성
· Query : 분석하고자 하는 단어에 대한 가중치 벡터
· Key : 각 단어가 쿼리에 해당하는 단어와 얼마나 연관있는 지 비교를 위한 가중치 벡터
· Value : 각 단어의 의미(뜻) 연결을 위한 가중치 벡처
* Self-Attention 작동 방식
· 특정 단어의 Query(q) 벡터와 모든 단어의 key(k) 벡터를 내적하여 Score 구하기
· Score를 q, k, v 벡터의 차원인 dk의 제곱근으로 나누어 보정하여 계산값을 안정적으로 만들기
→ 일반화(normalization)와 같이 score가 1이 넘지 않도록 나눠주는 것
· Softmax를 취하여 query에 해당하는 단어와 문장 내 다른 단어가 가지는 관계의 비율(확률) 구하기
· Softmax 결과값에 Value(v) 각 단어의 벡터를 곱한 후 더하여 가중합 구하기
▶ Encoder
- Multi-Head Attention : Self-Attention을 동시에 여러 개 실행하는 것. 각 Head 마다 다른 Attention 결과를
내어주기 때문에 ensemble과 같은 효과를 얻을 수 있음.
· 각 head에서 출력된 결과물인 행렬 Zn을 이어붙인(concatenate) 후 또 다른 파라미터 행렬인 Wº와의
내적을 통해 최종 결과물인 행렬 Z 출력(Wº은 학습을 통해 갱신됨)
⇒ 행렬 Z는 토큰 벡터(input 행렬)로 이루어진 행렬 X와 동일한 크기(shape)로 변경됨.
- Layer Normalization & Skip Connection(Residula Connection) : 모든 sub-layer에서 출력 시 거치는 단계
· Layer Normalization : Batch Normalization과 유사. 학습을 빠르게 하고, 성능을 향상시킴
· Skip Connection(Residual Connection) : 역전파 과정에서 정보 소실이 일어나지 않도록 함(ResNet 참조)
- Feed Forward Neural Network(FFNN) : 은닉층의 차원이 늘어났다가 다시 원래 차원으로 줄어드는
단순한 2층 신경망. 활성화 함수는 ReLu 사용
▶ Decoder
- Masked Self-Attention : Decoder block 소속. 타겟(query) 단어 이후의 단어가 영향을 주지 않도록 masking.
Decoder가 Auto Regressive하게 단어를 생성하기 때문에 타겟 이후의 단어는 보지 않고 나올 단어를 예측해야 함.
· 가려주고자 하는 요소(타겟 이후에 나오는 단어)에 -∞에 가까운 수를 더해 softmax에서 값이 0이 나오도록 함
- Encoder-Decoder Attention : 번역할 문장과 번역되는 문장의 정보관계를 엮어주는 단계.
· Query(q) : Decoder의 Masked Self-Attention으로부터 출력된 벡터(번역 결과물 언어)
· Key(k), Value(v) : Encoder (6번쨰)최상위 블록에서 사용했던 값 사용(번역 대상 언어)
- Linear & Softmax Layer : Decoder의 (6번쨰)최상층을 통과한 벡터들은 Linear층을 지난 후
Softmax를 통해 예측할 단어의 확률을 구함
※ 사전 학습 언어 모델(Pre-trained Language Model) : 대량의 데이터를 사용하여 미리 학습한 후 필요한
데이터를 추가 학습시켜 모델의 성능을 최적화한 모델
- 사전학습(Pre-training) : labeling 되지 않은 대량의 데이터를 사용하여 미리 학습하는 것.
전이학습(Tranfer Learning)이라고도 함.
- Fine-tuning : 업무에 특화된(Task Specific) 필요한 데이터를 추가학습시켜 모델의 성능을 최적화하는 것.
ㆍGPT(Generative Pre-Training) : 자연어 추론(NLI), 질의응답(QnA), 분류(Classification) task에 높은 성능
- GPT의 구조 : 12개의 decoder block 사용. encoder가 없어 2개의 sub-layer로 구성(encoder-decoder Attention X)
- 사전학습 : 레이블링 되지 않은 대량의 말뭉치에 대해 log 우도함수 L1을 최대화하는 방향으로 학습.
다음에 올 단어를 계속해서 맞추는 방식으로 학습.
- Fine-tuning : task가 달라져도 data 입력 방식만을 변경시키고, 모델 구조는 일정하도록 설계
ㆍBERT(Bidirectional Encoder Representation by Transformer) : Transformer Encoder만 사용, 문맥을 양방향으로 읽음
- BERT의 구조 : Encoder 12개로 이뤄짐 / 감성분석, 질의응답, 품사태깅, 개체명 인식 등 문맥 확인에 활용함
* BERT의 Special Token
· CLS(Classification) : 입력(input)의 맨 앞에 위치. NSP(Next Sentence Prediction) 학습을 위해 존재.
· SEP(Sepration) : 첫 문장의 끝자리와 두 번째 문장의 끝자리에 위치.
* BERT의 3가지 Embedding
· Token Embeddings : 단어를 나타내는 embedding. Word2Vec, GloVe, fastText 등으로 사전학습된
embedding vector 사용.
· Segment Embeddings : 두 문장의 첫 번째 부분과 두 번째 부분을 구분하기 위한 embedding
· Positional Embeddings : 단어의 위치를 나타내기 위한 embedding
- BERT의 사전 학습 방법들
· MLM(Masked Self-Attention) : Labeling되지 않은 corpus의 15%가량을 masking하여 빈칸 채우기를 통한
단어학습. 양쪽 문맥을 동시에 볼 수 있어서 단어의 문맥적 의미 학습 가능.
· NSP(Next Sentence Prediction) : 두 문장이 문맥에 맞아 이어지는 문장인지 여부를 판단.
질의응답(QnA), 자연어 추론(NLI) 등 문장관계 이해가 필요한 task에 성능 발휘.
- Fine-tuning : BERT 역시 모델의 구조는 그대로 유지한 채 데이터 입력하는 형태만 바꾸어서 fine-tuning함
⇒ Sentence 쌍 분류 / 감성분석 / 질의응답 / 품사 태깅(POS tagging), 개체명 인식(Named Entity Recognition,
NER) 등에 사용
ㆍPost BERT(최근 NLP 연구방향)
- 더 큰 모델 : GPT-3
- 더 좋은 학습방법 적용
· AE(Auto-Encoder)+AR(Auto-Regressive) : 자연어 이해와 생성, XLNet, BART 등
· Noising 방법(masking 등)을 어렵게 : SpanBERT, RoBERTa
- 경량화 모델 : 파라미터 줄이며 성능 보존 / DistillBERT, ALBERT(A Light BERT), ELECTRA 등
- 다양한 task 수행 : Meta Learning : Finetuning / zero-shot learning / one-shot learning / few-shot learning /
Multilinual model / computer vision / Multi-modal(DALL-E, CLIP / 기계와 소통) 등
■ Session note
ㅁ 오전 session
ㆍRNN의 단점 : 기울기 소실(LSTM, GRU로 해결) / 병렬화 불가(Transformer로 해결)
ㆍTransformer : 모든 토큰을 행렬로 동시에 입력받아 병렬 연산하여 GPU 연산에 최적화 되어있음
- SOTA(State-of-the-Art)가 자연어 처리에 혁신을 가져옴
- encoder(sub-layer 2개) : mulit-Head Attention + Feed Forward
- Decoder(sub-layer 3개) :
- Positional Encoding : 행렬로 한 번에 정보를 입력받으므로 위치정보벡터를 별도로 입력해주어야 함(input embedding + 위치 벡터; transformer는 sine 함수 활용
- Self-Attention : output vector가 고정되어 있으면 가 힘드므로, 문장 안에 있는 단어들 간의 관계를 확인
- query : 분석하고자 하는 단어
- key : 각각의 모든 단어
- value : key의 의미
* transformer의 작업 단계 / self-attention 확인!!
1. embedding + 위치 벡터 입력
2. 각각의 단어의 query/key/value vector를 가중치를 이용하여 구해줌
3. 첫 번째 단어와 자기자신을 포함하여 내적을 이용하여 모든 단어와의 연관성을 학습(유사도 구하기); 스칼라값 출력 - 유사할 수록 큰 값 출력 → 차원의 제곱근으로 나눠줌(연산을 쉽게 하기 위해 보정 ≒ 정규화)
4. softmax 함수 적용을 통해 확률화
5. value(단어의 의미)와 확률값을 곱한 값들을 합하여 하나의 값으로 출력(zt)
6. 각각의 단어들의 self-attention 값을 구해 행렬로 출력
⇒ 모든 단어의 query, key, value를 행렬로 한 번에 연산하기 때문에 각각의 단어를 입력하여 연산할 필요가 없음
↔ RNN은 각각 단어를 하나씩 입력받아서 연산 했어야 함
* Multi-head attention : ensemble 처럼 한 번만 연산을 하면 학습이 부족할 수 있으므로 8번을 한 번에 학습함
→ 단순합은 각각의 학습의 가중치가 다를 수 있기 때문에, 처음에 입력한 값과 같은 차원(모양)으로 만들기 위해 가중치를 조정하여 각각의 학습이 동일한 크기로 만들어줌
- masked self-attention : 해당 단어의 앞쪽 단어만 연산에 반영되도록 뒤쪽 단어는 (-)로 만들어 가려줌(- value에 softmax를 적용한 확률은 0)
· 마스킹을 하지 않으면 뒤에 나오는 단어를 참조하므로, leaking과 같이 되어 학습이 잘 안 됨
ㆍEncoder-Decoder Attention : 입력한 언어 - 번역할 대상의 언어, 두 개 언어(영어-스페인어)의 Query/Key/Value를 연결해주는 작업
ㆍGPT와 BERT는 transformer 구조를 활용하는 것
ㆍ현업에서는 transformer의 구조를 가져와 변형하여 활용하는 경우가 많음
* encoder → decoder에서 (입력언어 query * 번역될 언어 key) * 번역될 언어 value
ㆍencoder/decoder는 6개일 때 성능이 제일 좋은 것으로 연구결과 밝혀짐(논문 참조)
* 과제 노트는 3번 객관식 참조
ㆍencoder의 input embedding과 decoder의 output embedding은 컴퓨터가 자연어를 모르기 때문에 이해시키기 위함임
* 학습과 사용은 별개임; 노트의 구조는 모델의 학습 구조임
ㅁ 오후 session
ㆍRNN의 두 가지 문제
ㆍTransformer : encoder / decoder
ㆍencoder : multi-head attention / feed forward neural network(FFNN)
* FFNN : 학습을 좀 더 잘하기 위해 사용 / ReLu를 활성화 함수로 사용
ㆍdecoder : masked multi-head attention / encoder-decoder attention / feed forward neural network
ㆍtransformer는 어떻게 rnn의 단점을 해소했을까
- RNN을 없앰
- 행렬 연산을 통해 한 번에 연산
- 동시 한 번에 입력 : positional encoding을 통해 위치 입력
ㆍself attention : 문장 단어 사이의 관계를 파악하기 위함(연관성)
- query : 분석하고자 하는 단어. 질문을 던지는 주체.
- key : 각각의 단어들
- value : key 각 단어들의 의미
ㆍmulti-head attention : 일종의 ensemble 효과. 여러 관점에서 context를 파악하기 위함.
ㆍmasked multi-head attention : 뒤에 나오는 단어는 가려서 번역을 원하는 언어 내 문장 단어 관계를 파악하기 위함. masking(- 1b)을 적용하여 softmax가 0이 나오게 함
ㆍencoder-decoder attention : 번역할 언어(encoder)와 번역될 언어(decoder) 간 관계 파악
- query : decoder / key, value : encoder
ㆍGPT : decoder 12개 - 내보낼 것 중심
- 사전학습 : 레이블링 되지 않은 데이터 학습 /
문장의 다음에 나올 단어의 확률이 높아지도록 학습(한 방향으로 학습)
ㆍBERT : encoder 12개 - 받아들이는 것 중심; 양쪽 문맥 모두 학습 가능
* 사전학습 방법
- MLM : 빈칸 채우기(앞뒤 문맥 확인)
- NSP : 다음 문장 예측하기(두 문장이 다음에 나올 문장인지 아닌지 파악)
ㆍ사전학습(전이학습, Pre-trained Model) : 미리 많이 학습시켜 놓고, 필요할 떄 모델을 가져다 쓰기
- fine tuning : 해결하고자 하는 문제에 따라 가중치를 미세하게 조정
ㆍ코드 : 시각화를 위해 attention_weight도 return(활용되진 않고, 연산에만 사용됨)
■ 주요함수
ㆍmatmul : 행렬의 곱셈(벡터 내적)
■ Reference
ㆍseq2seq + attention : https://youtu.be/WsQLdu2JMgI
ㆍtransformer : https://youtu.be/mxGCEWOxfe8
ㆍGPT : https://youtu.be/FeEmmylAF0o
ㆍBERT : https://youtu.be/vo3cyr_8eDQ
ㆍAttention mechanism : https://blog.naver.com/PostView.nhn?blogId=ckdgus1433&logNo=221608376139&parentCategoryNo=&categoryNo=12&viewDate=&isShowPopularPosts=true&from=search
Attention Mechanism(seq2seq)
이번 시간에는 Neural Machine Translation 분야에서 사용되는 Attention Mechanism에 대해 알아보자....
blog.naver.com
ㆍTransformer 구현하기 : https://paul-hyun.github.io/transformer-02/
Transformer (Attention Is All You Need) 구현하기 (2/3)
How to implement the transformer model
paul-hyun.github.io
ㆍdiscriminate Vs. generative : https://ratsgo.github.io/generative%20model/2017/12/17/compare/
discriminative vs generative · ratsgo's blog
이번 글에서는 discriminative model과 generative model을 비교해보도록 하겠습니다. 이 글은 전인수 서울대 박사과정이 2017년 12월에 진행한 패스트캠퍼스 강의를 정리했음을 먼저 밝힙니다. 그럼 시작하
ratsgo.github.io
'Data Science > 4. 딥러닝' 카테고리의 다른 글
[n432]Segmentation & Object Recognition (1) | 2021.08.25 |
---|---|
[n431]Convolutional Neural Network(CNN) (0) | 2021.08.24 |
[n423]Language Modeling with RNN (0) | 2021.08.19 |
[n422]Distributed Representation (0) | 2021.08.18 |
[n421]Count-based Representation (0) | 2021.08.17 |