반응형

Python으로 딥러닝하기|자연어 처리 1. 토크나이징

Python으로 딥러닝하기|자연어 2. 단어 임베딩, Word2Vec

Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론

Python으로 딥러닝하기|LSTM(RNN) Part1&2. 이론 및 실습

Python으로 딥러닝하기|자연어 3. Seq2Seq, Attention

Python으로 딥러닝하기|자연어 4. Transfomer

 

Python으로 딥러닝하기|자연어 4. Transfomer

Python으로 딥러닝하기|자연어 처리 1. 토크나이징 Python으로 딥러닝하기|자연어 2. 단어 임베딩, Word2Vec Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론 Python으로 딥러닝하기|LSTM(RNN) Part1&2.

everyday-deeplearning.tistory.com

 

 

BERT와 GPT는 각각 Transformer로 부터 발전한 형태의 모델입니다.

 


 

 

BERT paper: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

 

우선 BERT 부터 살펴보겠습니다.

 

BERT는 Transformer의 Encoder 구조를 사용합니다. 다만 BERT의 경우 논문 제목에서 알 수 있듯 앞뒤 맥락(Bidirectional )을 고려하여 이해하는 것이 특징입니다. 따라서 문장의 의미 이해, 감정 분석, QnA 시스템 등에서 뛰어난 성능을 보입니다.

 

Masked Language Model(MLM)과 Next Sentence Prediction(NSP) 를 통해 학습하여 성능 향상을 이뤘다고 합니다.

MLM이란 문장 중에 일부 단어를 Making하여 해당 단어를 예측하도록 하는 과정입니다. Word2vec의 CBOW처럼 주변 단어들의 정보를 활용하여 예측하는 방법으로 각 단어가 전체 문맥에서 어떤 의미를 가지는지 더 잘 이해할 수 있다고 합니다.

NSP란 두 문장이 연속적인지 예측하는 작업으로 문장 간 관계를 이해하는데 도움이 된다고 합니다.

 

BERT의 경우 먼저 대규모 텍스트 데이터셋으로 사전 학습(pre-training)을 거친 후, 특정 작업에 맞게 미세 조정(fine-tuning)할 수 있습니다.

 


 

GPT(Generative Pre-trained Transformer)-3 paper: Language Models are Few-Shot Learners

 

GPT는 Transformer의 Decoder 구조를 사용합니다. 따라서 Autoregressive Language Model로 뛰어난 성능을 보냅니다.

여기서 Autoregressive Language Model이란, 주어진 단어 시퀀스에 이어질 다음 단어를 예측하도록 학습하는 과정입니다. 기계 번역, 요약, 대화 시스템 등 텍스트 생성 분야에서 널리 사용되고 있습니다.

 

GPT는 가장 단순했던 GPT-1, 모델 크기를 확장 및 더 다양한 데이터 셋으로 학습했던 GPT-2, 더 극대화된 모델 크기와 Few-shot Learning 능력을 보여준 GPT-3, 최근에는 공개되지 않았지만 버전 4(2023-01-31기준)까지 나왔습니다.

각 버전 별로 발전하면서 모델의 크기를 증가시키고, 더 다양하고 방대한 데이터셋으로 학습하고 학습 방법을 개선하는 방향으로 발전하였습니다.

 

특히 GPT의 가장 두드러지는 특징은 스케일입니다. 이를 통해 사전 훈련된 학습 데이터만을 사용하여 특정 작업에 대한 추가적인 학습 없이도 더 다양하고 복잡한 작업을 수행할 수 있습니다. (a.k.a Zero-shot, Few-shot learning)

 


ChatGPT는 대화형 AI에 특화되어 있어 대화의 맥락을 이해하고 유지하는 데 더 강점을 발휘한다고 합니다.

 

*참고: 이 글은 ChatGPT와 함께 작성했습니다. :)

반응형
반응형

Python으로 딥러닝하기|자연어 처리 1. 토크나이징

Python으로 딥러닝하기|자연어 2. 단어 임베딩, Word2Vec

Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론

Python으로 딥러닝하기|LSTM(RNN) Part1&2. 이론 및 실습

Python으로 딥러닝하기|자연어 3. Seq2Seq, Attention

 

Python으로 딥러닝하기|자연어 3. Seq2Seq, Attention

Python으로 딥러닝하기|자연어 처리 1. 토크나이징 Python으로 딥러닝하기|자연어 2. 단어 임베딩, Word2Vec Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론 Python으로 딥러닝하기|LSTM(RNN) Part1&2.

everyday-deeplearning.tistory.com

 


오늘은 Transformer에 대해 정리해보겠습니다.

 

Transformer paper: Attention Is All You Need

 

Transformer의 구조는 기본적으로 Seq2Seq의 Encoder와 Decoder 구조를 갖고 있지만, 다른 점은 RNN 대신 Attention Attention 구조'만'으로 전체 모델을 구성하였습니다.

 

출처: Attention Is All You Need

 

Encoder와 Decoder 각각에서는 Self-Attention 방법을 사용하는데 Seq2Seq과 함께 활용한 기존의 Attention 방법으로는 Encoder의 모든 단어와 Decoder의 단어 사이의 관계를 측정하는 방법이었다면, Self-Attention이란 문장 안에서 각 단어들 간의 관계를 측정하는 방법입니다. (참고로 Encoder와 Decoder 사이의 Attention은 Self-Attention이 아닙니다.)

 

또한 Multi-head Attention 방법을 통해 한 번에 병렬로 Attention을 수행하는 방법을 사용하였습니다. 각 head 별로 다른 Weight를 사용하여 연산을 수행한 후 concat하는 방식으로 한 번에 다양한 시각의 정보를 학습할 수 있다는 장점이 있습니다. 또한 Attention 하나만 사용할 경우 문장이 길어지면 softmax를 통과한 결과가 0에 가까워져 무의미한 결과를 도출할 수 있습니다.

 

 

 

여기서 Attention은 기존의 순환 신경망(RNN) 구조처럼 단어가 순서대로 입력되는 것이 아닌 전체 문장을 한 번에 행렬 형태로 계산을 하는 방법입니다. 하지만 Text의 경우 단어 위치의 정보가 중요하기 때문에 순서 정보를 반영할 수 있도록 Positional Encoding 방법으로 Encoder와 Decoder 각각에 Input Embedding에 더하여 사용하였고, Decoder에서는 자신이 예측해야 할 다음 단어를 참고하지 못하도록 Masking하는 기법을 사용했습니다.

 

추가적으로 깊고 넓은 신경망의 경우 정보의 손실 가능성이 높기 때문에 Residual connection 방법을 활용하고 과적합을 방지하기 위해 정규화 방법으로 Layer Normalization을 활용하였는데 이름 그대로 Layer별로 Normalize하는 방법입니다. 

 

마지막 층으로는 Linear(=Feed Forward Network)와 Softmax를 사용하여 Classification문제를 푸는 방법으로 학습하도록 구성하였고,  Loss의 경우 Cross-Entropy 를 사용했습니다.

 

반응형
반응형

Python으로 딥러닝하기|자연어 처리 1. 토크나이징

Python으로 딥러닝하기|자연어 2. 단어 임베딩, Word2Vec

Python으로 딥러닝하기|RNN(Recurrent Neural Networks) Part1. 이론

Python으로 딥러닝하기|LSTM(RNN) Part1&2. 이론 및 실습

 

잠시 미뤄왔던 자연어처리 시리즈를 다시 작성해보고자 합니다... 화이팅!

 


seq2seq paper: Sequence to Sequence Learning with Neural Networks

 

우선 Sequence to Sequence(Seq2Seq) 모델은 RNN의 many-to-many 와 유사한 구조로 시퀀스 형태의 입력값을 넣으면 시퀀스 형태의 출력값을 내놓는 구조입니다. 따라서 번역, 요약, 챗봇 등 다양한 분야에서 활용될 수 있습니다.

 

RNN(LSTM) 모델을 기반으로 Encoder와 Decoder 부분이 나눠져 있습니다. Encoder에서는 입력값의 context vector(=hidden status)를 생성하고 Decoder에서는 해당 vector를 활용해 재귀적으로 출력값을 만들어내는 구조입니다.

그리고 Encoder와 Decoder는 길이가 고정되어있지만, 각각 다른 최대 길이를 가질 수 있고, 데이터의 길이가 적으면 Padding으로 채웁니다.

Seq2Seq: Encoder-Decoder

 

 

RNN의 many-to-many 와 유사한 구조라고 이야기했는데, Decoder에서 다른 부분이 존재합니다.

 

우선 Seq2Seq 구조의 경우 <EOS> 혹은 <START>, <END> 라는 토큰을 활용하여 시작과 끝맺음을 할 수 있도록 데이터를 구성하여 훈련할 수 있습니다. (참고: 최대 길이보다 길이가 짧은 경우 <END> 토큰 이후에 Padding으로 채우는 방식)

 

또한 "재귀적"으로 훈련된다는 점도 다릅니다. Decoder의 현재 cell(층)의 input은 이전 cell의 output을 활용하는 것으로 구성되어 있습니다. (RNN은 context vector 하나만 사용)

여기서 만약 Decoder가 시작부터 틀린다면 학습이 잘 되지 않을 수 있습니다. 따라서 Decoder의 현재 cell의 input 값을 실제(정답) 데이터로 사용하는 Teacher Forcing이라는 새로운 학습 방법이 제안됩니다.

 


Transformer paper: Attention Is All You Need

 

이후에 Transformer를 설명할 것인데, 이를 이해하기 위해서는 논문의 제목에서도 알 수 있듯, Attention이라는 개념을 먼저 알아야합니다.

 

Attention 매커니즘은 고정된 크기의 context vector를 사용하는 Seq2Seq를 개선하는 방법으로 아래의 그림을 참고해서 보면 Attention의 뜻을 짐작해 볼 수 있습니다.

1. Encoder에서 모든 cell(층)의 hidden status와 Decoder의 현재 cell의 hidden satus와 dot product를 하여 attention scores를 생성

2. softmax에 통과시켜 가중합을 한 attention value를 구하고 Decoder에서 현재 cell의 output 값과 concatenate하여 다음 값을 예측

이러한 과정을 통해 Encoder 부분의 어떤 hidden status에 더 "집중"하면 좋은지를 학습할 수 있습니다.

출처: https://wikidocs.net/22893

 

Attention 식은 매우 간단합니다. 아래의 식은 Scaled Dot-Product Attention Score입니다.

$\text{attention score}(s_t, h_i) = \frac{s_t^Th_i}{\sqrt{n}}$

$s_t$: Decoder의 현재 hidden status

$h_i$: Encoder의 i번째 hidden status

 


Transformer도 할 내용이 많아서.. 다시 돌아오겠습니다.

 

반응형

+ Recent posts