[Conversational AI 5강] Language Models 3
1. GPT1
transformer의 decoder만 사용
** encoder와 decoder의 차이점
-> encoder는 문장에 있는 모든 단어들과 self attention 구하지만,
decoder는 자기보다 앞에 있는 단어들 하고만 self-attention 구함.
1) pre-training 방식: next word prediction
<s> : 시작 토큰, <stop>: 엔드 토큰
2) Byte Pair Encoding (BPE)
h, u, g, g 이런 식으로 byte level로 죄다 쪼갬
자주 같이 등장하는 토큰들의 frequency 구한 후
frequencey 가장 높은 애를 합쳐
*wordpiece tokenization과의 차이점
-> wordpiece는 상대적 freq 계산. BPT는 절대적 freq 계산
-> zero shot ability를 보았다.
2. GPT2
zero-shot ability를 극대화시키자!
performance metric 1 perplexity
-> low perplexity means that a model is likely to generate the text
문장을 생성할 확률!
perplexity는 fluency를 의미하는 게 아님
fluent한데도 잘 사용 안되는 문장이면 perplexity 높음
-> 한 문장과 여러 모델을 두고 이 문장을 생성할 확률들을 모델별로 비교하기 위해서 perplexity를 사용
-> 한 모델 안에서 여러 문장 비교하는 용도 아님.
gpt2의 성능은 단순 memorization에서 오는 게 아님을 실험을 통해 입증 -> generalization 성능
3. GPT3
모델 사이즈 더더더 키우자!
few shot 성능 좋지만
example 8개 이상부터는 성능 향상 없었다
4. T5
main idea
: 모든 nlp task를 text input, text output으로 바꾸자!
T5는 트랜스포머의 인코더 디코더 전부 사용!
1) T5의 디코딩 단계
디코더 내의 단어들끼리 self-attention을 구하고
얘를 aggregate해서 self-contextualized embedding을 구한 후
multi-head cross-attention 구하기
-> decoder 현재 t에서의 query와
-> encoder의 key, value를 구해서
-> attention 구하고 최종 contextualized embedding 구하기
[질문]
1. multi-head cross-attention이랑 그냥 attention의 차이점이 무엇인지?
그냥 attention도 input key, value들이랑 중요도 구하고 가중합하는 거 아닌가요?
2.
한 단어의 query, key, value가 전부 다른 숫자 벡터가 맞는지?
같은 단어인데 굳이 그렇게 따로따로 구하는 이유? -> 어차피 지금 상태에서는 현재 문장 속 단어의 '한' 의미만 학습시키는 건데
그렇게 query, key, value 벡터 형태가 다 다르면
유사도 구하고, 얘를 또 가중합 하는 이유가 없지 않나?
query, key, value가 같은 값이어야하는 거 아닌가?
2) T5 pre-training
(1) unsupervised denosing
MLM이랑 비슷한데
전부 [MASK] 토큰이 아닌 죄다 다른 토큰 <X>, <Y>, ... 으로 랜덤하게 바꾸고 -> position 위치 정보 학습 효과 있는지?
<X>, <Y>를 이용한 새로운 문장 생성하도록 학습 시키기
(2) supervised text-to-text