Molybdenum의 개발기록

[TIL] 76일차_Transformer 본문

TIL

[TIL] 76일차_Transformer

Molybdenum_j 2023. 4. 24. 17:01
Hugging Face

: Hugging Face는 딥러닝 모델과 자연어 처리 기술을 개발하고 공유하는 회사로서 다양한 딥러닝 프레임워크를 지원하는 라이브러리와 도구를 제공하고 있다.

대표적으로 Transformers라이브러리가 있는데 이 라이브러리는 자연어 처리 모델을 구현하고 학습시키는데 사용되며 BERT, GPT, XLNet 등 다양한 모델을 제공한다. 이러한 모델들은 자연어 이해, 기계 번역, 질문 응답, 감성 분석 등의 다양한 자연어 처리 태스크에서 상위 성능을 보여준다.

 

Transformer Models

seq2Seq -> Attention + Seq2Seq -> Transformer -> GPT -1 -> BERT -> GPT - 2 -> XLNet -> RoBERTa -> MASS -> BART -> MT-DNN -> T5

  • BERT(Bidirectional Encoder Representations from Transformers) : 양방향으로 학습되는 transformer 모델로 다양한 자연어 처리 태스크에서 높은 성능을 보인다.
  • GPT(Generative Pre-trained Transformer) : 대규모 텍스트 데이터셋으로 사전학습된 transformer 모델로, 자연어 생성 태스크에서 우수한 성능을 보인다.
  • XLNet : 기존의 BERT 모델에서 자기 회귀 학습 방식을 제외하고 자기 회귀와 양방향 모델의 장점을 모두 활용한 새로운 모델이다.
  • Transformer-XL : 입력 시퀀스를 분할하여 시퀀스를 보다 길게 고려하는 방식으로 모델의 성능을 개선하였다.
  • Reformer : Spare Transformer, Locality-sensitive hashing 및 reversible residual network 등의 기술을 사용하여 대규모 시퀀스 처리를 위한 더욱 효율적인 모델을 제안하였다.
  • Performer : QKV attention을 계산하는데 Fast Fourier Transform (FFT)을 사용하는 방식으로 모델의 계산 복잡도를 줄이고 성능을 개선하였다.
  • Longformer : 긴 시퀀스 처리를 위해 sliding window 방식을 도입하여 효율적으로 처리할 수 있는 transformer 모델이다.
  • Swin Transformer : 효율적인 비전 분야에서의 transformer 모델로 hierachical architecture 및 shifted windows를 사용하여 계산 복잡도를 줄이고 성능을 향상시켰다.

 

BERT(Bidirectional Encoder Representations from Transformers

: BERT는 양방향 Transformer 인코더를 사용하여 사전 학습된 언어 모델이다. 이 모델은 다양한 자연어 처리 작업을 수행할 수 있으며, 뛰어난 성능을 보인다. 이를 위해 BERT는 큰 규모의 텍스트 데이터셋을 사용하여 사전 학습된 모델을 만들고, 이를 다양한 자연어 처리 작업에 적용한다.

 

BERT는 양방향 Transformer 인코더를 사용하여, 좌우 양쪽 방향에서 모든 단어의 정보를 수집하고 이를 기반으로 문맥에 따른 의미를 이해한다. 이를 통해 기존모델보다 더 정확한 예측이 가능해졌다.

 

자연어 이해(NLU)자연어 생성(NLG) 작업에서 SOTA(State of the Art)성능을 보여준다. BERT는 다양한 언어에 대한 다중 언어 지원도 가능하며 사전 학습된 모델을 다른 작업에 적용할 수 있도록 미세조정방법(fine-tunning)을 제공한다

 

  • 문장 분류(Sentence Classification) : 문장 분류 작업 중 하나인 감정 분석(Sentiment Analysis)에서 BERT는 최고 성능을 보이는 모델 중 하나이다.
  • 질문 응답(Question Answering) : BERT는 자연어로 작성된 질문과 해당 질문에 대한 답변이 있는 문장 또는 문서를 입력으로 받아 답변을 생성한다.
  • 텍스트 유사도(Text Similarity) : 두 문장이 동일한 의미를 갖는 경우 BERT는 이를 인식하여 두 문장의 유사도를 높게 평가한다.
  • 텍스트 생성(Text Generation) : 입력 문장에 이어서 새로운 문장을 생성하는 작업이 가능하다. 이를 위해서 BERT모델의 출력값을 이용해 적절한 텍스트를 생성하는 방식으로 활용할 수 있다.
  • 기계 번역(Machine Translation) : BERT 모델을 이용해 입력 문장과 번역된 문장 간의 유사도를 계산하고 이를 이용해 번역을 수행할 수 있다.
  • 문장 요약(Text Summarization) : BERT 모델을 이용해 입력문서를 분석하고 핵심 내용을 추출하여 문서의 요약본을 생성할 수 있다.
WordPiece Embedding
: 단어의 의미를 표현하는데 사용되는 임베딩 방법 중 하나로 하나의 단어를 subword로 분리하여 표현하는 방법을 말한다. subword로 분리함으로써 단어의 유사성을 더욱 잘 반영할 수 있고, 희귀한 단어나 이상한 단어도 분해하여 처리할 수 있다. 

BERT는 사전학습(pre-training)에서는 대규모의 텍스트 데이터를 이용하여 wordpiece embedding을 학습하고 fine-tunning에서는 구체적인 자연어 처리문제를 풀기 위해 추가적인 레이어학습을 수행한다.  이를통해 Out-of-vocabulary(OOV)문제를 해결하고 의미가 유사한 단어들을 비슷한 벡터로 표현하여 큰 언어 모델에서 높은 성능을 보인다.

 

GPT(Generatibe Pre-trained Transformer)

: GPT는 Transformer에서 인코더를 제외하고 디코더만 사용한다. 인코더 쪽에서 보내오는 정보를 받는 모듈(Multi-Head Attention) 역시 제거되었다.

 

  • Zero-shot (학습데이터 : 0) - 입력문장에 대한 대답을 생성하기 위해 미리 학습한 일반적인 지식을 활용하는 방식

: 기존에 학습된 모델을 사용하여 새로운 문제를 해결하는 방식이다. 이 방식은 학습데이터가 없어도 작동하기 때문에 zero-shot이라는 이름이 붙여졌다.

 

  • One-shot(학습데이터 : 적은양의 데이터)  - 적은양의 데이터를 학습하여 새로운 문장에 대한 대답을 생성하는 방식

: 적은 양의 데이터를 사용하여 새로운 문제를 해결하는 방식으로 이 방식은 일반적으로 학습 데이터가 적을 때 사용된다.

 

  • Few-shot(학습데이터 : 적은양의 데이터) - 미리 학습된 모델에 추가로 적은양의 데이터를 학습하여 새로운 문장에 대한 대답을 생성하는 방식

: 적은 양의 데이터를 사용하여 기존 모델을 개선하는 방식이다. 이 방식은 일반적으로 학습데이터가 적지만, 기존 모델에서 학습한 일반적인 지식이 부족한 경우에 사용된다.

 

BPE(Byte Pair Encoding)
: 하나의 텍스트를 토큰으로 분리하기 위한 subword 기반의 알고리즘으로 sentencepiece는 google에서 개발한 오픈소스 기반의 자연어 처리 도구로 BPE와 Unigram Language Model Tokenizer(ULM)를 적용할 수 있으며, 모델의 입력으로 사용할 수 있는 단어 집합을 만들기 위해 사용된다.

 

Transformer

: 트랜스포머 모델에서 입력과 출력의 형태는 모두 토큰 시퀀스입니다. 입력 시퀀스는 일련의 입력 토큰으로 구성되어 있으며, 각각의 토큰은 임베딩된 벡터로 표현된다. 트랜스포머 모델에서는 입력 시퀀스와 출력 시퀀스의 길이가 다를 수 있다. 모델은 유연하게 다양한 길이의 입력과 출력 시퀀스를 다룰 수 있도록 설계되어 있다. 이를 위해 입력시퀀스와 출력 시퀀스에 각각의 위치 정보를 추가 후 입력으로 모델에 전달한다. 이러한 위치정보는 positional encoding이라는 기술을 사용하여 표현된다.

 

  • Encoder : 입력 시퀀스를 받아서 순차적으로 처리한다. 각각의 입력 단어 벡터를 임베딩하고 포지셔널 인코딩과 함께 입력한다. 여러 층의 인코더 레이더를 거치면서 각각의 레이어에서는 멀티 헤드 어텐션과 피드포워드 신경망을 이용하여 입력 시퀀스 정보를 추출 후 인코더 레이어에서는 인코더의 출력값을 디코더에게 전달한다.

-> Encoder는 입력 시퀀스를 임베딩하여 임베딩 벡터 시퀀스를 생성하고 이후 Multi-Head Attention과 Feed-Forward Network를 반복해서 적용하여 입력 시퀀스의 각 위치마다 해당 위치의 정보를 요약하는 과정을 거친다. 이를 통해 입력 시퀀스의 각 위치에 대한 context 정보를 생성한다. 이 context 정보는 각 위치에서의 입력 정보와 해당 위치에서 주변 정보들 간의 관계를 파악하는데 활용된다.

 

  • Decoder : 출력 시퀀스를 생성한다. 디코더는 인코더에서 받은 정보와 이전에 생성된 출력을 입력으로 받아서 새로운 출력을 생성한다. 

-> Decoder는 생성된 context 정보를 기반으로 출력 시퀀스를 생성한다. Decoder는 각 출력 위치마다 Multi-Head Attention과 Encoder의 출력으로부터 생성된 context 정보를 활용하여 출력 위치의 이전 출력 정보를 예측하는 과정을 거친다. 이후 Feed-Forward Network를 통해 이전 출력 정보와 생성된 context 정보를 결합하여 현재 출력 위치에서의 예측값을 생성한다. 이 과정을 반복해서 출력 시퀀스를 생성한다.

 

Encoder는 입력 시퀀스를 처리하여 context정보를 생성하는데 중점을 둔 반면, Decoder는 생성된 context 정보와 이전 출력 정보를 활용하여 출력 시퀀스를 생성하는 데 중점을 둔다. 이러한 구조는 트랜스포머 모델에서 입력과 출력을 독립적으로 처리하면서도 context 정보를 공유할 수 있도록 해준다.

 

  • Scaled Dot -Product Attention : self-attention의 한 종류로, query와 key의 dot-product값을 softmax 함수를 사용하여 계산한다. 이 때 scaling factor인 sqrt(d_k)를 사용하여 softmax 함수의 값이 폭발하지 않도록 한다.

 

  • Attention : 어텐션 함수에서 query, key, value는 각각 쿼리, 키, 밸류에 해당한다. 이들은 모두 같은 크기를 가지는 행렬이다.

- query : 쿼리는 어텐션 함수의 입력으로 사용되며, 현재 시점에서 중요한 정보를 포함하고 있는 tensor이다. 이를 통해 모델은 입력 시퀀스에서 어떤 정보에 집중해야 할지를 결정하게 된다.\

- key : 키는 입력 시퀀스 내의 모든 위치에 대한 정보를 포함하고 있는 tensor이다. 어텐션 함수는 이를 사용하여 쿼리와 유사도를 계산하게 된다.

-  value : 밸류는 입력 시퀀스 내의 각 위치에 대한 정보를 포함하고 있는 tensor이다. 어텐션 함수는 쿼리와 유사한 키에 대한 해당 위치의 밸류를 더 많이 사용하도록 가중치를 부여하게 된다.

어텐션 함수는 쿼리와 키의 내적을 통해 유사도를 계산하고 이를 정규화하여  확률 분포로 변환한 후 각 위치의 밸류에 가중치를 부여하여 어텐션 결과를 도출한다. 이를 통해 입력 시퀀스 내에서 중요한 정보에 더 집중할 수 있게 되며 다양한 딥러닝 모델에서 활용될 수 있다.

 

  • Multi-Head Attention : 여러 개의 self-attention을 병렬로 수행하여 각각의 결과를 연결하는 방식으로 작동한다. 이때 병렬로 수행되는 self attention의 개수를 head의 개수라고 한다.

- 병렬 처리 : head의 개수가 많을수록 self-attention 연산이 병렬로 처리될 수 있다. 이는 모델의 학습속도를 향상시키는데 도움이 된다.

- 다양한 관점 고려 : head의 개수가 많을수록 모델은 다양한 관점에서 입력 시퀀스를 처리할 수 있다. 이는 입력 시퀀스의 다양한 패턴과 특징을 포착할 수 있게 해준다.

- 특징 추출 : head의 개수가 많을수록 모델은 입력 시퀀스에서 다양한 특징을 추출할 수 있다. 이는 모델이 다양한 유형의 입력에 대해 더 잘 일반화 할 수 있게 해준다.

- 더 복잡한 함수 근사 : head의 개수가 많을수록 모델은 입력과 출력 사이의 더 복잡한 함수를 근사할 수 있다. 이는 모델의 표현능력을 향상시키는데 도움이 된다.

=> head의 개수가 많을수록 multi-head attention은 더 강력한 모델로 발전할 수 있다. 그러나 head의 개수가 많아질수록 모델의 계산 비용이 증가하기 때문에 head의 개수를 적절하게 조절하는 것이 중요하다.

 

BLEU score

: 0과 1사이의 값을 가지며 값이 높을수록 더 나은 번역결과를 나타낸다. BLEU score는 기계번역된 결과 문장과 인간 번역된 결과 문장 사이의 단어 겹치기를 측정한다. 

 

BLEU score는 다음과 같은 절차를 통해 계산된다.

  1. 각 문장의 n-gram을 추출합니다.
  2. 추출된 n-gram이 번역된 결과 문장에 있는지 확인합니다.
  3. 가중치를 적용하여 모든 추출된 n-gram의 점수를 더합니다.
  4. 추출된 n-gram의 수가 많을수록, 그리고 인간 번역된 결과 문장과 겹치는 n-gram이 많을수록 더 높은 BLEU score를 얻습니다.

 

Comments