VAE와 GAN: latent variable을 활용. 두 경우 모두 sampling이 쉬운 분포를 갖는 새로운변수를 도입, 이 변수를 기존 domain으로 다시 decoding하는 방식.
AR Model:생성모델링을 순차적과정으로 진행. 즉, latent variable이 아닌, sequence에 있는 이전값을 바탕으로 예측. 그렇기에 Data생성분포를 근사하는것이 아닌, 명시적으로 Data생성분포를 모델링한다.
이번에는 2가지 AR모델인 LSTM과 PixelCNN을 살펴볼 것이다. ∙ LSTM: text data ∙ PixelCNN: img data
이후, 또다른 성공적인 AR모델인 Transformer에 대해 논의할 것이다.
1. LSTM
Tokenization
LSTM은 RNN의 한 종류로 sequential data처리에 용이하다. tokenization은 텍스트를 단어나 문자같은 개별단위로 나누는 작업이다.
텍스트생성모델로 만들려는 종류에 따라 text tokenization방법이 달라지는데, word와 sentence token은 각기 장단점이 존재한다.
word token의 경우:
vocab이 매우 크며, 단어의 stem(어간)추출이 가능하다. ex) browse, browsing, browses는 모두 어간이 brows이다. 단어토큰화는 train_vocab에 없는 단어는 모델이 예측불가능하다.
character token의 경우:
모델이 문자의 sequence를 생성, train_vocab에 없는 새로운 단어 생성. 대문자를 소문자로 바꾸거나 별도의 token으로 남길 수 있다. 문자토큰화는 vocab_size가 비교적 매우 작아 마지막층에서 학습할 가중치 수가 적어 빠른 훈련속도를 갖는다.
2. PixelCNN
prev.
이전 픽셀을 기반으로 픽셀단위로 img를 생성하는 모델이다. [Aaron;2016] 이를 PixelCNN이라하며, AR방식으로 img를 생성하도록 훈련시킨다.
AR모델은 뛰어난 품질의 결과물을 얻을 수 있지만 PixelCNN같은 AR모델의 주요단점은 순차적인 sampling과정으로 인해 sampling속도가 느리다는 점이다. (∵ VAE는 한번의 예측으로 충분하지만 PixelCNN은 이전의 모든 픽셀을 기반으로 다음 픽셀을 예측하기 때문.)
PixelCNN을 이해하기 위해 필요한 2가지 개념 이해가 필요하다. ∙ Masked Convolution Layer ∙ Residual Block
Masked Convolution Layer
Conv층은 feature탐지에는 유용하나 pixel에 순서가 지정되지 않는다. 따라서 Auto-Regressive방식을 직접적으로 사용할 수 없다.
그렇기에 Conv층에 AR방식으로 이미지생성에 적용하기 위해 ① pixel순서를 지정하고 filter가 해당 pixel앞의 픽셀만 볼 수 있게 해야한다. ② 현재 img에 conv_filter를 적용하고 ③ 앞의 모든 Pixel로부터 다음 pixel의 값을 예측해 한번에 하나의 pixel씩 img를 생성한다.
Zig-Zag순으로 Masking을 진행하며, 1과 0으로 구성된 mask에 fitler weight matrix를 곱해 현재 pixel뒤에 있는 모든 pixel값이 0이 되게한다. 아래그림을 보면, 2종류의 Mask가 있음을 알 수 있다. ∙ Mask A: 중앙 pixel값이 Masking되는 유형 ∙ Mask B: 중앙 pixel값이 Masking되지 않는 유형 좌) 중심픽셀값 분포 예측을 위해 일련의 픽셀에 적용된 마스크 / 우) Masked Conv filter
초기 Masked Conv층(= input image에 직접적용되는 층)에서는 중앙픽셀=신경망이 예측해야할 픽셀이기에 해당 중앙픽셀을 사용할 수 없다. (= Mask A) 하지만 후속층(= Mask B)에서는 중앙픽셀을 활용할 수 있다.
이는 기존 input img의 이전 pixel에서 얻은 정보만으로 계산된 결과이기 때문이다.
핵심구성요소 중 하나로 Residual Block이 사용된다. residual block은 input signal을 그대로 유지하는데, 이는 최적의 변환일 때 중간층의 가중치를 0으로 만들어 쉽게 달성가능하기 때문이다. (Skip Connection이 없으면 신경망이 중간층으로 input과 동일해지는 mapping을 찾아야하는데 Cost가 너무 많이 든다.) 이때, 중간의 3x3 Conv는 MaskedConv2D를 사용한다.
2017년, PixelCNN의 느린 훈련과정 완화를 위해 이산 픽셀값에 대한 softmax출력대신 혼합분포로 만들었다. (즉, 혼합분포에서 Sampling을 한다는 의미.)
이를 위해서 다음 단계를 거친다. 1. 먼저 categorical분포에서 sampling 2. 특정 하위분포를 선택 3. 일반적인 방법으로 이 분포에서 sampling.
이전과의 큰 차이점: 픽셀값의 전체 범위를 활용한다는 점.
3.1. Transformers
prev.
LSTM, GRU같은 순환신경망 종류들은 텍스트를 순차적으로 만드는 AR model들이다. 이런 AR모델은 sequential data를 한번에 하나씩 처리하여 hidden vector를 지속해서 update한다.
Transformer는 순환구조가 필요없고, 순차모델링을 위해 Attention Mechanism에만 의존한다. RNN은 병렬화가 어려우나 Transformer는 병렬화가 용이해 Large Dataset에서 훈련할 수 있다.
이번에는 OpenAI의 핵심 AR모델인 GPT를 살펴볼 것이다.
Attention Mechanism (Attention Head)
문장의 특정단어에 attention을 하며, 다른 단어들은 거의 무시하는 뉘앙스로 작동한다. 즉, 관련없는 detail로 유용한 정보가 가려지는 것을 막고, 효율적으로 추출하기위해 입력의 어느위치에서 정보를 가져올 지 결정하는 것으로 추론 시 정보를 찾을 위치를 결정할 수 있다.
Query, Key, Value
Attention Head는 일종의 정보검색시스템으로 생각할 수 있다. Q가 K/V로 만들어지고, 출력은 Q와 각 K간의 유사성에 따라 가중치가 부여된 값의 합이다. Q: 현재 당면한 작업에 대한 표현 K: 문장의 각 단어에 대한 표현 V: 문장에 있는 단어의 표현 attention의 출력은 context vector이다.
Decoder에서 미래의 단어정보누출을 방지하기위해 QK dot곱에 Mask를 적용해야한다. 이를 Causal Masking이라 한다. Huggingface GPT2 구현 일부: cf) 참고코드
if attention_mask is not None:
assert batch_size > 0, "batch_size has to be defined and > 0"
attention_mask = attention_mask.view(batch_size, -1)
attention_mask = attention_mask.unsqueeze(1).unsqueeze(2)
attention_mask = attention_mask.to(dtype=next(self.parameters()).dtype) # fp16 compatibility
attention_mask = (1.0 - attention_mask) * -10000.0
Batch Norm v.s Layer Norm
Transformer는 학습과정안정성을 위해 Layer Normalization을 사용한다. Batch Norm: 각 채널의 출력의 평균이 0, 표준편차가 1이 되도록 정규화하는 방법. (이때, batch차원과 공간차원에 걸쳐 정규화 통계치가 계산된다.)
Layer Norm:채널차원에 대해 정규화 통계치가 계산된다. 따라서 batch에 있는 각 sequence위치마다 정규화한다. (이때, 정규화 통계치 계산방식이 BN과 완전히 반대이다.)
Positional Encoding
MHA층에서 K의 순서를 고려하는 부분이 없는데, 각 K와 Q의 dot곱에서 순차적 계산이 아닌, 병렬로 계산된다. 이를 위해 Transformer블록의 input을 위해 Positional Encoding을 사용한다.
token embedding
또한, token embedding을 사용해 token만 encoding하지 않고 positional encoding으로 token의 위치도 encoding한다.
3.2. Transformer etc.
T5 (Encoder-Decoder)
Encoder-Decoder구조를 이용한 최근 Transformer의 예시로 Google에서 발표한 T5(Text-To-Text Transfer Transformer)모델은 NMT, Linguistic Acceptability(언어적 적합성), Similarity, Summarization을 포함한 다양한 작업을 수행한다. T5의 주요 특징은 다음과 같다:
1. Text-To-Text Framework: - T5는 "문장을 문장으로"라는 원칙을 따르며, 모든 NLP 작업을 텍스트 입력으로 받아들이고 텍스트 출력으로 생성하는 일관된 프레임워크를 가지고 있는데, 이로써 다양한 자연어 처리 작업을 통일된 방식으로 다룰 수 있다.
2. Transformer Architecture: - T5는 Transformer 아키텍처를 기반이기에 Transformer는 Attention 메커니즘을 사용하여 시퀀스 데이터의 긴 범위의 의존 관계를 모델링하는데 효과적이다.
3. Pretraining and Fine-tuning: - T5는 대규모 텍스트 코퍼스에서 사전 훈련되었으며, 이렇게 사전 훈련된 모델은 다양한 자연어 처리 작업에 대해 효과적인 전이 학습을 가능하게 한다.
4. Task-Agnostic Representation: - T5는 작업에 특화된 task-specific한 head를 추가하지 않고, 단일 통합된 모델을 사용한다. - 이런 특성은 모델을 다양한 작업에 적용하는 것을 용이하게 한다.
5. Scalability: - T5는 다양한 모델 크기로 사용 가능하며, 작은 모델에서부터 매우 큰 모델까지 다양한 크기의 모델이 제공된다.
T5는 자연어 생성, 기계 번역, 질문 응답, 감정 분석, 문서 분류 등 다양한 NLP 작업에 사용될 수 있다.
ChatGPT
GPT-3보다 강력하고, 대화형식에 맞게 fine-tuning된 모델인 GPT-3.5가 사용된다.
ChatGPT가 GPT-3.5를 Fine-Tuning할 때, "RLHF(Reinforcement Learning from Human Feedback)"라는 테크닉을 사용한다.
ChatGPT train과정 (RLHF)
Step 1. Supervised Learning Fine Tuning 사람이 작성한 대화형 입력프롬프트 + 원하는 출력으로 구성된 dataset 수집 이 dataset으로 Supervised Learning의 기본언어모델(GPT-3.5)를 Fine-Tuning
Step 2. Reward Modeling label을 부여할 사람에게 prompt와 몇가지 sampling 모델출력을 제시. worst~best까지 출력순위를 지정하도록 요청. 대화기록이 주어지면 각 출력의 score를 예측하는 reward model을 학습.
Step 3. Reinforcement Learning 1단계에서 Fine tuning된 모델로 초기화된 LM이 policy가 되는 RL로 대화를 처리. 현재 state(= 대화기록)이 주어지면, policy는 action(= token sequence)를 출력.
2단계에서 학습된 Reward model로 해당출력의 score를 매긴 후 PPO로 보상 극대화하도록 LM의 가중치 조정
ChatGPT가 GPT-3.5를 Fine-Tuning할 때, "RLHF"라는 테크닉을 사용한다.