#21.04.15 Section4 - Sprint2 (1-4)

찌니·2021년 4월 15일
0

AI부트캠프 review&TDL

목록 보기
24/38
post-thumbnail

Note4

요약

  • Attention 매커니즘
  • 기계번역 (Machine Translation)
  • Transformer (Attention is All You Need , 논문)
    - Self-attention
    • Positional Encoding
    • Masked Self-Attention
  • GPT (Generative Pre-Training)
    - 트랜스포머 변형
    - Pre-trained Language Model(pre-traing, Fine-tunning)
  • BERT (Bidirectional Encoder Representation by Transformer)
    - 트랜스포머 변형, GPT와의 차이점

TDL

  • RNN 기반의 모델

RNN의 장기의존성(long-term dependency)문제를 해결하기 나온 LSTM, GRU. 기존 RNN에서 셀 구조를 개선하였다.
기계번역(Machine Translation)에서 RNN 기반 모델 LSTM과 GRU가 단어를 처리하는 방법은 아래와 같다.

하지만 모델을 개선했더라도 문장이 책과 같이 너무 길어지면 모든 단어 정보를 Hidden state 벡터에 담기 어렵습니다. context vector(문장벡터)가 고정된 크기이기 때문에 많은 단어의 의미를 벡터 하나에 담기엔 부족합니다. 그리고 결국 번역 결과는 좋지 못하게 됩니다.

이 문제를 해결하기 위해 고안된 방법이 바로 Attention입니다.

  • RNN with Attention

Attention은 각 인코더의 Time-step 마다 생성되는 Hidden state벡터를 간직한다.

입력단어가 N개 일 때, N개 만큼의 Hidden state벡터를 모두 갖는다. 그리고 모든 단어가 입력되면 생성된 Hidden state 벡터를 모두 Decoder에게 넘겨준다.

디코더에서는 단어를 생성할 때마다 인코더에서 넘어온 모든 Hidden state 벡터와 얼마나 관련이 있는지 가중치를 구한다. (=디코더의 Hidden state 벡터와 인코더의 각 Hidden state 벡터를 내적한다.)
아래 그림은 디코더 'I am a student'에서 첫 단어 'I'에 대한 Attention Weight가 구해지는 과정으로 대입해 볼 수 있다.

즉, Time-step마다 디코더가 출력할 단어(Target word)에 모든 encoder hidden states들에 대한 모든 가중치들(score)을 구하고, softmax로 확률값으로 나타낸 후, 각 가중치와 확률값을 모두 곱하고 총 합을 구해 디코더의 문장벡터(Context vector for Decoder)를 구한다.

트랜스포머는 기계번역을 위한 새로운 모델로 이전에 등장 했던 Attention 매커니즘을 극대화해 뛰어난 번역 성능을 기록함!
최근 자연어처리 모델 SOTA(State-of-the-Art)의 기본 아이디어는 모두 트랜스포머를 기반임.
트랜스포머는 자연어처리 뿐만 아니라 컴퓨터비전, 멀티모달 등에도 적용 중.

RNN 기반 모델은 단어가 순서대로 들어오기 때문에 처리할 시퀀스가 길수록 연산 속도가 느려진다는 단점이 있다. 트랜스포머는 이런 문제를 해결하는데, 모든 토큰을 동시에 입력받아 병렬 연산을 합니다. 그렇기 때문에 단어가 입력되기를 기다리지 않아도 됩니다.

트랜스포머 구조

왼쪽 회색 블록이 인코더 1개, 오른쪽 회색 블록은 디코더 1개 입니다.
1개의 인코더 안에는 크게 2개의 sub-layer가 있고 Mutil-Head(self) Attention과 Feed Forward로 나뉩니다.
1개의 디코더 안은 크게 3개의 sub-layer가 있고 Masked Multi-Head(self) Attention과 Multi-Head(Encoder-Decoder) Attention 그리고 Feed Forward로 나뉩니다.

  1. Positional Encoding(위치인코딩)
    트랜스포머에서는 모든 단어가 동시 입력됩니다. 그래서 단어의 순서 패턴을 알기 위해 위치 정보를 제공하기 위한 벡터를 따로 제공해야합니다.
    이 벡터를 만드는 과정을 Positional Encoding 이라고 합니다.
    sin, cos을 이용한 수식을 사용하는데 시각화 하게되면 일정한 패턴이 있는 벡터임을 알 수 있습니다.

  2. Self-Attention
    self-attention은 트랜스포머의 주요 매커니즘입니다.
    문장 내 it, that 등의 지시대명사가 어떤 대상을 가리키는지 알 수 있습니다.
    번역하려는 문장 내부 요소의 관계를 잘 파악하기 위해서 문장 자신에 대해 attention 매커니즘을 적용하는 것을 말합니다.

self-attention은 3가지 가중치 벡터를 사용합니다.
쿼리(Query), 키(Key), 밸류(Value).
RNN의 Hidden state벡터를 대체하는 가중치 벡터라고 생각하면 됩니다.

설명
1) 쿼리(q) : 분석하고 하는 단어에 대한 가중치 벡터
2) 키(k) : 각 단어가 해당 쿼리와 얼마나 연관이 있는지를 비교하기 위한 가중치 벡터
3) 밸류(v) : 각 단어의 의미를 살려주기 위한 가중치 벡터

순서 (실제로는 병렬처리로 순서없이 한꺼번에 계산됨)
1) 먼저, 분석하고자 하는 쿼리 벡터와 전체 단어의 키 벡터를 내적한다. (내적 값 = attention score)
2) 내적값을 q,k,v 벡터 차원인 dkd_k 의 제곱근 dk\sqrt{d_k} 로 나눕니다. (계산값 보정하기)
3) Softmax 로 비율구하기
4) 마지막으로 밸류(v)와 각단어의 벡터를 곱해주고 모두 더해 최종 결과 행렬(z)가 반환된다.


  1. Multi-Head Attention
    멀티헤드 어텐션이란 Self-Attention을 동시에 여러개로 실행하는 것을 말합니다.
    각 Head마다 다른 Attention 결과를 내주기 때문에 앙상블과 유사한 효과를 얻을 수 있습니다.
    위 논문에서는 8개의 Head를 사용해 8번의 Self-Attention을 실행해 각각의 출력 행렬 Z0,Z1,..,Z7을 만들어내었습니다.

그리고 Zn(n=0,..,7)은 서로 이어붙여집니다.(Concatenate)

이어붙여진 Zn은 다른 파라미터 행렬 W0와의 내적을 통해 Multi-Head Attention의 최종 결과인 행렬 Z를 만들어냅니다.

  1. Layer Normalization & Skip Connection
    트랜스포머의 모든 sub-layer에서 출력된 벡터는 Layer normalization과 Skip connection을 거치게 됩니다. 이 부분은 다음주에 ResNet에서 더 자세하게 다룰 예정.

1) Layer normalization = Batch normalization의 효과(학습이 훨씬 바르고 잘 되게함)
2) Skip Connection(또는 Residual connection) = 역전파 과정에서 정보가 소실되지 않도록 함.

  1. Feed Forward Neural Network(FFNN)
    은닉층의 차원이 늘어났다가 다시 원래 차원으로 줄어드는 단순한 2층 신경망.
    활성화 함수로 ReLU를 사용.

  2. Masked Self-Attention
    디코더 블록에서 사용되는 특수한 Self-Attention.
    디코더는 Auto Regressive하게 단어를 생성하기 때문에 타깃 단어 이후 단어를 보지 않고 단어를 예측해야합니다.(과적합방지) 따라서 타깃 단어 뒤에 위치한 단어는 Self-Attention에 영향을 주지 않도록 masking해 주어야 합니다.

원래 self-Attention 매커니즘은 쿼리행렬과 키 형렬을 내적하고 거기에 차원의 제곱근을 나누어 softmax를 취하고 여기에 밸류 행렬을 내적했습니다.
Masked Self-Attention 에서는 Softmax를 취하기 전, masking 하고자 하는 요소에만 −∞ 에 해당하는 매우 작은 수를 더해줍니다. 이 과정을 masking이라고 합니다.
마스킹 된 값은 softmax 후 0으로 도출되어 attention 매커니즘에 반영되지 않습니다.

  1. Encoder-Decoder Attention
    디코더에서 Masked Self-Attention을 지난 벡터는 Encoder-Decoder Attention 층으로 들어간다. 좋은 번역을 위해서는 번역할 문장과 번역된 문장 간의 관계 역시 중요한데, 바로 이곳에서 번역할 문장과 번역되는 문장의 정보 관계를 엮어준다.

이 층에서는 디코더블록의 Masked Self-Attention으로부터 출력된 벡터를 쿼리(Q)벡터로 사용한다. 키(k)와 밸류(v)벡터는 최상위(=6번째) 인코더 블록에서 사용했던 값을 그대로 가져와서 사용한다. Encoder-Decoder Attention층의 계산 과정은 Self-Attention과 동일하다.

  1. Linear & Softmax Layer
    디코더의 최상층을 통과한 벡터들은 Linear 층을 지난 후 Softmax를 통해 예측할 단어의 확률을 구하게 된다.
  • GPT, BERT & Others
    트랜스포머 구조의 일부분을 변형하여 만들어진 언어 모델들이다. 두 모델은 사전 학습된 언어모델(Pre-trained Language Model) 이라는 공통점이있다.
    사전 학습이란 대량의 데이터를 사용해 미리 학습하는 과정인데 여기에 필요한 데이터를 추가 학습시켜 모델의 성능을 최적화한다. 이런 학습 방법을 전이 학습(Transfer Learning)이라고 한다. 최근 발표되고있는 SOTA(최고성능) 언어 모델은 모두 전이 학습을 사용한 모델이다.

  • GPT (2018.06)
    GPT(Generatie Pre-trained Transformer). 2018년 6월에 OpenAI를 통해 발표됨.
    연이어 발표한 GPT-2(2019.02), GPT-3(2020.06)가 좋은 성능을 보이면서 세간의 주목을 받았다. 세 모델은 기본적으로 동일한 구조를 가지고 있다.

모델구조(12개의 디코더 블록)
GPT에서는 인코더를 사용하지 않고, 디코더 블록 내에 2개의 Sub-layer만 있다.
트랜스포머의 디코더 블록에서는 Masked Self-Attention을 지나 Encoder-Decoder Attention 층으로 들어갔다. 하지만 GPT는 인코더를 사용하지 않으므로 Encoder-Decode Attention층이 빠지게 된다.

사전에 학습된 언어 모델(Pre-trained LM)

  1. 사전학습(Pre-training)
    존재하는 자연어 중에는 unrabled data가 많이 있다. 예를들어 책이나 위키피디아 등.
    책을 많이 읽는 것처럼 레이블링 되지 않은 데이터를 모델이 학습하도록 하는 과정을 사전학습 이라고 한다.
    레이블링 되지 않은 대량의 말뭉치 U=(u1,...,u(n))에 대해 로그 우도 L1을 최대화 하는 방향으로 학습된다. 다음에 올 단어를 계속해서 맞추는 방식으로 학습한다.

  2. Fine-tuning
    사전학습이 끝난 모델에 우리가 하고자 하는 테스크에 특화된(Task specific) 데이터를 학습하는 것은 Fine-tuning이라고 한다.
    Fine-tuning에서는 학습시 레이블링 된 데이터를 사용하며, 감성분석, 자연어추론(NLI), 질의응답(QA) 등이 있다.
    기존 모델에서는 태스크에 맞춰 모델 구조를 변경해주고 학습을 진행했다. 하지만 GPT와 같은 사전학습 언어 모델은 Fine-tuning 과정에서 데이터의 입력 방식만을 변형시키고 모델 구조는 일정하도록 설계되었다.

Fine tuning은 레이블링 된 말뭉치 C=(x1,...,x(m))에 대하여 로그 우도 L2를 최대화하는 방향으로 학습한다.

Fine tuning에서 학습하는 데이터셋이 클 때는 보조 목적함수로 L1을 추가하여 L3로 학습하면 학습이 더 잘 진행된다.

결론
LSTM,GRU를 사용한 기존 모델보다 자연어 추론(NLI), 질의응답(QA), 분류(Classification)등의 태스크에서 높은 성능을 달성했다.
GPT는 사전 학습된 언어모델을 바탕으로 좋은 성능을 확보할 수 있다는 점과 사전 학습 모델에 Transformer 구조가 더 좋은 성능을 보임을 알 수 있었다.

  • BERT (2018.10)
    BERT(Bidirectional Encoder Representation by Transformer)는 2018년 10월 구글에서 밢표한 모델이다. 이름에서 알수 있듯이 BERT는 트랜스포머의 인코더만을 사용해 양방향(Bidirectional)으로 읽어낸다.

GPT가 트랜스포머의 디코더 블록을 12개 쌓아올린 모델이었다면 BERT는 트랜스포머 인코더 블록을 12개 쌓아올린 모델이다.
BERT 역시 GPT와 동일한 Pre-trained LM 이기 때문에 Pre-training과 Fine-tuning 과정을 통해 학습된다.

  1. 사전학습(Pre-training)
    BERT는 특이한 사전 학습 방법을 사용한다. BERT의 사전 학습 과정에서 사용되는 2가지 방법(MLM, NSP)가 있다.

1)MLM(Masked Language Model)
BERT는 마치 수능 영어 단어 빈칸 채우기 문제와 같이 단어를 학습한다. 사전학습 과정에서 레이블되지 않은 말뭉치 중에서 랜덤으로 15% 가량의 단어를 마스킹한다. 그리고 마스킹된 위치에 원래 있던 단어를 예측 하는 방식으로 학습을 진행한다.
MLM은 양쪽의 문맥을 동시에 볼 수 있다는 장점이 있다.

GPT는 '거기'의 앞의 정보만 볼 수 있는데 BERT는 앞과 뒤 양쪽의 문장을 모두 참고한다.
이렇게 양방향으로 학습할 경우 단어가 문맥 사이에서 가진 의미를 최대로 학습할 수 있다.
MLM은 다소 간단한 아이디어이지만 단어의 문맥적 의미를 최대로 학습할 수 있도록 함으로써 BERT가 높은 성능을 달성하는데에 큰 역할을 하였다.

2)NSP(Next Sentence Prediction)
BERT는 NSP 방식으로도 학습한다. 모델이 문맥에 맞는 이야기를 하는지 동문서답을 하는지 판단하며 학습하는 방식이다. NSP에 대해 알아보기 전에 BERT에 있는 두 가지 Special Token에 대해 알아보자. BERT는 사전 학습 시에 텍스트를 2개로 나눠서 넣게 된다.
- SEP : 두 텍스트 사이와 맨 마지막에 위치
- CLS : 모든 단어 토큰 앞에 위치
NSP는 가운데 SEP 토큰 뒤에 오는 텍스트가 이전 텍스와 이어지는 부분인지를 CLS를 통해 예측한다. 두 문장이 바로 이어지는 문장일 경우 IsNext로 판단하고 그렇지 않은 문장 쌍일 경우 NoNext를 판단하도록 한다.
NSP 역시 간단한 아이디어 이지만 모델이 문장과 문장 사이의 관계를 학습할 수 있도록 함으로써 질의응답(QA), 자연어 추론(NLI)등의 태스크에서 좋은 성능을 보일 수 있었다.

  1. Fine-tuning
    BERT 역시 모델의 구조는 그대로 유지한 채 데이터를 입력하는 형태만 바꿔 Fine-tuning을 실시한다.

결과
BERT는 간단한 사전학습 아이디어로 많은 태스크에서 SOTA를 달성함
단순한 아이디어로 엄청난 성능을 달성했기에 당시 많은 충겨을 줌
이후로도 BERT를 개선하기 위한 연구가 많이 진행됨
특히 MLM을 통해 BERT가 좋은 성능을 달성한 뒤로 텍스트에 노이즈를 준 후 이를 다시 맞추눈 (Denoising) 방법에 대해 많은 연구가 진행됨

profile
https://gggggeun.tistory.com/

0개의 댓글