자연어 처리(4)

이승수·2021년 10월 31일
0

1. Transformer

  • RNN 기반 모델이 가진 구조적 단점은 단어가 순서대로 들어온다는 점 때문에 처리해야 하는 시퀀스가 길수록 연산시간이 길어진다
  • 이런 문제를 해결하기 위해 등장한 모델이 트랜스포머
  • 모든 토큰을 동시에 입력받아 병렬 연산하기 때문에 GPU연산에 최적화

※ 트랜스포머 구조(simple)

트랜스포머는 인코더 블록과 디코더 블록이 6개씩 모여있는 구조

  • 인코더 블록 (2개의 sub-layer)
    • Multi-Head (Self) Attention
    • Feed Forward
  • 디코더 블록 (3개의 sub-layer)
    • Masked Multi-Head (Self) Attention
    • Multi-Head (Encoder-Decoder) Attention
    • Feed Forward

2. 트랜스포머 구조

1. Positional Encoding(위치 인코딩)

  • 트랜스포머에서는 병렬화를 위해 모든 단어 벡터를 동시에 입력 받기 때문에 컴퓨터는 어떤 단어가 어디에 위치하는지 모른다
  • 컴퓨터가 이해할 수 있도록 단어의 위치 정보를 제공하기 위한 벡터를 따로 제공해 주어야한다
  • 단어의 상대적인 위치 정보를 제공하기 위한 벡터를 만드는 과정을 위치 인코딩이라고 한다

※ Self-Attension

  • it과 같은 지시대명사가 어떤 대상을 가리키는지 알아야 한다
  • 트랜스포머에서는 문장 자신에 대해 어텐션 메커니즘을 적용한다 이것이 셀프어텐션
  • 기존 Attension과의 차이는 각 벡터가 모두 가중치 벡터라는 점
  • 셀프어텐션에서도 쿼리-키-밸류의 아이디어가 사용
    • 쿼리 : 분석하고자 하는 단어에 대한 가중치 벡터
    • 키 : 각 단어가 쿼리에 해당하는 단어와 얼마나 연관있는 지를 비교하기 위한 가중치 벡터
    • 벨류 : 각단어의 의미를 살려주기 위한 가중치 벡터

※ Self-Attention의 과정

  • Self-Attention은 세가지 가중치 벡터를 대상으로 어텐션을 적용

① 특정 단어의 쿼리 벡터(qq)와 모든 단어의 키 벡터(kk)를 내적(qqkk)
    내적 값 = Attention 스코어
② 트랜스포머에서는 이 가중치를 dk\sqrt{d_k}로 나누어준다
    dkd_k = q,k,vq,k,v 벡터 차원
③ softmax를 취해준다. 이를 통해 쿼리에 해당하는 단어와 문장 내 다른 단어가     가지는 관계의 비율을 구할 수 있다
④ softmax의 출력값과 밸류 벡터를 곱해주고 다 더한다

2. Multi-Head Attention

  • self-attention을 동시에 병렬적으로 실행하는 것
  • 각 head 마다 다른 attention 결과를 내어주기 때문에 앙상블과 유사한 효과
# example
8개의 head를 사용하여 8번의 self-attention을 실행하여 각각의 출력 행렬 Z0, Z1 … Z7 생성
→ 출력된 행렬Zn은 이어붙여진다 
→ 행렬 Wo의 요소 역시 학습을 통해 갱신 
→ 최종적으로 생성된 행렬 Z는 토큰 벡터로 이루어진 행렬 X와 동일한 shape가 된다

3. Layer Normalization & Skip Connection

  • 트랜스포머의 모든 sub layer에서 출력된 벡터는 layer normalization 과 skip connection을 거친다
  • later normalization의 효과는 batch normalization과 유사하게 학습이 훨씬 빠르게 잘되도록 한다
  • skip connection은 역전파 과정에서 정보가 소실되지 않도록 한다

4. Feed Forward Neural Network

  • 은닉층의 차원이 늘어났다가 다시 원래 차원으로 줄어드는 단순한 2층 신경망
  • 활성화 함수로 ReLU를 사용

5. Mastek Self-Attention

  • 디코더 블록에서 사용되는 특수한 self-attention
  • 디코더는 auto-regressive(왼쪽 단어를 보고 오른쪽 단어를 예측)하게 단어를 생성하기 때문에 타깃 단어 이후 단어를 보지 않고 단어를 예측한다
  • 따라서 타깃 단어 뒤에 위치한 단어는 self-attention에 영향을 주지 않도록 마스킹을 해주어야 한다
  • self-attention 매커니즘에서 softmax를 취해주기 전에 가려주고자 하는 요소에 -무한에 해당하는 -10억을 더해준다 이 과정이 마스킹 → 마스킹된 값은 softmax를 취해줬을 때 0이 나오므로 value 계산에 반영이 안된다

6. Encoder-Decoder Attention

  • 번역할 문장과 변역된 문장 간의 정보 관계 엮어주는 부분
  • 디코더 블록의 masked self-attention으로부터 출력된 벡터를 쿼리벡터(q)로 사용
  • 키와(k) 밸류벡터는(v) 최상위 인코더 블록에서 사용했던 값을 그대로 가져와 사용한다

7. linear & Softmax layer

  • 디코더의 최상층을 통과한 벡터들은 linear층을 지난 후 softmax를 통해 예측할 단어의 확률을 구한다

3. GPT, BERT

트랜스포머 구조를 변형항 만들어진 언어 모델
사전 학습된 언어모델이라는 공통점

※ 사전학습 : 레이블링 되지 않은 대량의 데이터를 사용하여 미리 학습하는 과정
※ fine-tuning : 사전학습이 끝난 모델에 우리가 하고자하는 태스크에 특화된(task specific) 데이터를 학습(학습시 레이블링 된 데이터 사용)

1. GPT

트랜스포머의 디코더 블록을 12개 쌓아올린 모델

GPT의 구조

  • GPT에서는 인코더를 사용하지 않기 때문에 디코더 블록내에 2개의 sub-layer만 있다
  • GPT는 인코더를 사용하지 않아서 Encoder-decoder attention 층이 빠진다

※ Fine-tuning
기존 모델에서는 태스크에 맞춰 모델 구조를 변경해주고 학습을 진행
GPT와 같은 사전 학습 언어 모델은 fine-tuning 과정에서 데이터의 입력 방식만을 변형시키고 모델 구조는 일정하도록 설계

2. BERT

트랜스포머의 인코더만을 사용하여 문맥을 양방향으로 읽어낸다
트랜스포머의 인코더 블록을 12개 쌓아올린 모델


BERT의 구조

  • special token : CLS, SEP
    • CLS토큰 : classification 입력의 맨 앞에 위치하는 토큰(NSP이라는 학습을 위해 존재)
    • SEP토큰 : seperation 첫번째부분의 끝자리와 두번째 부분의 끝자리에 위치
  • input vector
    • token embeddings : 단어를 나타내는 임베딩, 사전학습된 임베딩 벡터를 사용
    • segment embeddings : 첫번째 부분과 두번째 부분을 구분하기 위한 임베딩
    • position embeddings : 단어의 위치를 나타내기 위한 임베딩
  • BERT의 사전학습 방법들
    MLM(masked language model) : 빈칸 채우기를 하면서 단어를 학습
    사전학습 과정에서 레이블링 되지 않은 말뭉치 중에서 랜덤으로 15%가량의 단어를 마스킹 후 마스킹된 위치에 원래 있던 단어를 예측하는 방식으로 학습을 진행
    양쪽의 문맥을 동시에 볼 수 있다는 장점
  • NSP(Next Sentence Prediction)
    모델이 문맥에 맞는 이야기를 하는지 동문서답을 하는지를 판단하며 학습하는 방식
profile
AI/Data Science

0개의 댓글