[딥러닝] Transformer : 소개와 동작 원리 (+ 간단한 챗봇 만들기)

2024. 6. 11. 04:39
반응형

 

 

이번 포스팅에서는 Transformer 아키텍처에 대해서 알아보려고 한다.

Transformer는 2020년대에 들어서서 매우 핫한 딥러닝 기반 모델이며, 뛰어난 퍼포먼스를 보이고 있다. ChatGPT를 만들 수 있었던 근간이기도 하며 특히 자연어 처리(NLP) 분야에서 혁신을 가져왔다.

 

Attention 메커니즘은 Transformer의 중요한 알고리즘으로서 사용된다. 해당 메커니즘과 Seq2Seq에 대한 이해가 있어야 Transformer를 이해할 수 있어서 간단하게 설명해 두었지만, 혹시 이해가 안된다면 아래의 포스팅을 참고하면 좋을 것 같다.

 

https://sjh9708.tistory.com/230

 

[딥러닝] 기계 번역 : Seq2Seq와 Attention (+ 모델 학습시켜 다국어 번역해보기)

이번 포스팅에서는 RNN 기반의 자연어 처리(NLP)를 위한 모델 중 번역을 위해 만들어진 Seq2Seq를 알아볼 것이다.그리고 Seq2Seq의 RNN 기반 모델의 문제점을 완화하기 위해 고안되었으면서, Transformer

sjh9708.tistory.com

 

 


Seq2Seq (Sequence-to-Sequence)

 

Seq2Seq는 Attention 메커니즘이 도입되기 이전 RNN 기반 자연어 처리에서 뛰어난 성능을 발휘하였다.

  1. 인코더(Encoder): 입력 시퀀스를 처리하고 이를 고정된 크기의 Context Vector로 변환한다.
  2. 컨텍스트 벡터(Context Vector): Encoder가 순차적으로 입력 시퀀스를 처리한 후의 마지막 Hidden State로서, 입력 시퀀스의 단어들의 의미와 순서를 요약한 정보이다.
  3. 디코더(Decoder): 인코더에서 생성된 Context Vector를 초기 State로 사용하여 출력 시퀀스를 생성한다.

 

 


RNN(LSTM/GRU) 기반 모델의 한계

 

1. 장기 의존성 문제(Long-term dependency problem) 

  • LSTM과 GRU의 등장으로 장기 의존성 문제가 많이 완화되었지만 구조적으로 완전히 해결할 수 없다.
  • 여전히 긴 문장들에 대해서 Gradient 소실과 폭주가 발생할 수 있다.

2. Seq2Seq

  • 입출력의 크기의 제약 완화 : LSTM의 동일한 입출력의 크기의 제약을 해결하였다.
  • 고정된 Context Vector에 소스 문장의 정보 압축 : 병목 발생 : 고정된 길이에 입력 시퀀스의 모든 정보를 담지 못하고 손실될 수 있다. 특히 긴 입력 시퀀스의 경우 정보 손실이 더 심각하다. 이는 모델의 성능 하락으로 이어진다.

이러한 한계점으로 인해 Attention 메커니즘과 같은 기술이 도입되었다.

Attention은 디코더가 인코더의 각 입력 단계에 주의를 기울일 수 있도록 하는 것으로, 더 많은 정보를 고려할 수 있도록 돕는다. 이는 2024년 기점으로 NLP에서 뛰어난 성능을 보이는 Transformer의 "Attention is all you need"의 근간이 되었다. 

 

 

 


Attention

아이디어

1. 고정된 Context Vector를 사용하는 대신 Decoder에서 출력 단어를 예측하는 Time step마다 인코더에서의 전체 입력 문장을 다시 참고한다.

 

  • 기존 seq2seq 모델에서 하나의 고정된 Context vector(= Encoder의 마지막 Hidden state)를 사용했다.
  • 각 디코더의 Time step마다 인코더의 모든 Hidden state를 참고하도록 한다.

2. 모든 입력 토큰을 모두 동일한 비율로 참고하지 않고 예측해야 할 단어와 연관이 있는 입력을 집중(Attention)하여 참고하게 된다.

 

  • 연관이 있는 입력 토큰에 더 큰 가중치를 부여하는 메커니즘을 사용한다.
  • 각 디코더 타임 스텝에서 인코더의 각 출력(Hidden state)에 대해 가중치(Attention score)를 계산
  • 중요한 Hidden state에 더 많은 주의를 기울여서 context vector를 동적으로 생성한다.

 

 


 

 

 

Attention(Q, K, V) = Attention Value
Q = Query : t 시점의 디코더 셀에서의 은닉 상태
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
V = Values : 모든 시점의 인코더 셀의 은닉 상태들

 

이를 LSTM 기반 Encoder & Decoder 아키텍처에서 전체적인 도식으로 보면 다음과 같다.

 

 

 

 

 

1. Decoder은 현재 예측해야 하는 단어에 대해서 Encoder에 Query를 보낸다.

2. Encoder은 Query에 대해서 모든 Key와의 유사도를 각각 구한다.

3. 유사도를 Key와 매핑된 각각의 Value에 반영한다.

  • 소프트맥스 함수를 통해 나온 결과값은 I, am, a, student 단어 각각이 현재 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값이다.

4. Attention Value 출력 : 유사도가 반영된 Value을 모두 취합해서 Decoder에게 반환한다.

  • 각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이를 하나의 정보(Attention Value)로 담아서 디코더로 전송한다.

 

 

 


Transformer

 

 

Attention is All You Need!

지금까지의 특징을 전달하는(transduction) 모델은 주로 복잡한 순환신경망이나 인코더-디코더같은 합성곱 신경망 방식이 우세하지만, 우리는 어텐션을 사용한 '트랜스포머'라는 간단한 모델을 제안한다. 두 가지의 기계 번역 문제에 대해 실험했고, 학습 시간이 매우 적어야 한다는 것과 병렬적이여야 한다는 조건 하에서 상기된 모델이 질적으로 우수함을 보였다. 상기된 모델은 WMT 2014 영어-독일어 번역 문제를 앙상블이 포함된 기존에 존재했던 결과보다 2 BLEU 향상시킨 28.4 BLEU를 달성했다. 영어-프랑스어 번역에서는, 기존 최상 모델들의 학습 비용의 작은 부분 정도인, 8개의 GPU를 활용해 3일 12시간에 걸쳤던 학습을 마친 후 41.8 BLEU의 신규 모델 상태를 지정했다. 또한 한정된 학습 데이터와 방대한 학습 데이터와 함께 영어 파싱(parsing)에 성공적으로 어텐션 방식을 적용함으로써 트랜스포머가 다른 문제들에도 이를 일반화한 것을 보였다.

 

 

 

Transformer는 "Attention is All You Need" 논문의 이름과 같이 RNN과 CNN을 사용하지 않고 전적으로 Attention 메커니즘에 기반을 둔 모델이다.

  • 시퀀스 간의 복잡한 의존성을 효과적으로 학습하고, 훈련 시간을 단축시키기 위해 설계
  • RNN을 사용하는 이전 모델들과 달리, Transformer는 병렬 처리가 가능하여 대규모 데이터셋에서 효율적인 처리가 가능하다.
  • Self Attention : Transformer의 핵심적인 메커니즘으로 자신을 구성하는 부분끼리 연관성을 찾고자 할 때 사용됨

 

 

Transformer는 RNN 기반 seq2seq와 유사하게 입력 시퀀스에 따른 출력 시퀀스를 내보내는 Encoder-Decoder 구조를 사용한다.

  • seq2seq에서 Encoder, Decoder의 각각 하나의 RNN이 t개의 시점(time step)을 가지는 구조였다.
  • Transformer에는 RNN이 없이 인코더와 디코더라는 단위가 N개로 구성되는 구조이다.

 

 


Self Attention

 

 

Self-Attention : Transformer의 핵심 메커니즘. 자신을 구성하는 부분끼리 연관성을 찾고자 할 때 사용된다.

  • 위 사진을 보면 "I"와 "student"의 연관도가 높은 것을 알 수 있다. (I = student 이기 때문)

Self-Attention의 특징

 

  • 병렬 처리: 각 단어가 다른 단어들과 동시에 상호작용하므로 병렬 처리가 가능
  • 긴 종속성: 멀리 떨어진 단어들 사이의 관계도 쉽게 포착, 긴 문맥 정보의 처리에 유리하다.
  • 위치 불변성: 포지셔널 인코딩(Positional Encoding)을 통해 각 단어의 위치 정보를 제공해야 한다.

이제 Self-Attention의 과정을 파악해보자.

 


Self Attention의 과정

1. Query, Key, Value(Q, K, V) 벡터 얻기

  Self Attention 기존의 Attention
Q = Query 입력 문장의 모든 Word Vector  t 시점의 디코더 셀에서의 은닉 상태
K = Keys  입력 문장의 모든 Word Vector 모든 시점의 인코더 셀의 은닉 상태들
V = Values 입력 문장의 모든 Word Vector 모든 시점의 인코더 셀의 은닉 상태들

 

(Self) Attention(Q, K, V)

Query 벡터 (Q): 입력 벡터가 다른 단어와 얼마나 관련이 있는지를 평가하는 데 사용

Key 벡터 (K): Query 벡터와 상호작용하여 주의할 단어를 결정

Value 벡터 (V): 실제로 네트워크가 최종적으로 사용하게 되는 정보

 

 

1. 각 입력 단어를 고차원 벡터로 Word Embedding한다.

2. 입력 임베딩 벡터를 Q, K, V로 변환하기 위해 세 개의 가중치 벡터 \(W_Q\)를 사용한다.

3. 가중치 행렬들은 학습 가능한 파라미터들로 모델의 학습 과정에서 최적화된다.

4. 각 단어에 대한 임베딩 벡터와 가중치 벡터를 내적계산하여 Query, Key, Value 벡터를 얻어낸다.

 


2. Attention Value 계산하기

 

 

1. Attention Score : Query 벡터와 Key 벡터의 내적을 계산 -> 유사도 측정

2. Attention Distribute : 유사도 -> Softmax 함수 -> 각 단어가 얼마나 중요한지에 대한 분포를 얻어낸다.

3. Attention Value : 해당 중요도에 대한 벡터를 Value 벡터에 가중합하여 최종적인 Attention Value를 출력한다.

 

 

 

 

 


Transformer의 메커니즘

 

Transformer는 Encoder와 Decoder로 구성되고, Self-Attention 메커니즘을 통해 각 단어가 시퀀스 내 다른 모든 단어들과 상호작용하여 관계를 학습한다는 것 까지 알아보았다. 이제 Transformer의 구조에 대해서 살펴보도록 하자.

 


Encoder : Input에 대한 처리

 

1. 입력 시퀀스의 각 단어를 고차원 벡터로 Embedding한다.

2. 단어 순서를 반영하기 위해 Positional Encoding을 임베딩에 추가한다.


Positional Encoding


트랜스포머는 RNN과 달리 단어 입력을 순차적으로 받는 방식이 아니므로 단어의 위치 정보를 알 수 없다(위치 불변성) 따라서 단어의 위치 정보를 얻기 위해서 각 단어의 임베딩 벡터에 위치 정보들을 더하여 모델의 입력으로 사용해야 한다.

해당 과정을 포지셔널 인코딩(Positional Encoding) 이라고 한다.

 

위치 \(pos\)와 임베딩 벡터의 차원 \(i\)에 대해 다음과 같은 식을 사용하여 상대적인 위치에 대한 계산을 수행한다.

 

 

 

 


Encoder : Self Attention Layer





 

  • 입력 문장을 구성하는 단어들 간의 문장 내에서의 연관관계를 파악하는 단계
  • 각 입력 벡터에 대해 Query, Key, Value 벡터를 생성하고 Self-Attention을 수행하여 출력한다.
  • 이 과정을 여러 Self-Attention Head에서 병렬로 수행하는데 이를 Multi-Head Attention이라고 한다.

 

 


Encoder : 출력 

 

Fully Connected Layers로 구성된 신경망을 통해 비선형 변환을 수행한다.

Layer의 Input에 대해 정규화를 통해서 학습 속도를 향상시키고 안정되게 한다.

Residual Connection(잔차 연결)을 통해 입력을 출력에 더해주면서 모델이 원래 입력을 참조할 수 있게 한다.

 

Encoder의 출력은 입력 시퀀스의 각 단어에 대한 다양한 요소와 관계에 대한 표현을 포함한다. 

  • 단어 간의 상호 작용, 유사성, 구문 정보, 문맥 정보

Decoder : Input에 대한 처리

 

  • Decoder Input에 대해 마찬가지로 Embedding-vector로 변환하고 Positional Encoding을 통해 위치 정보를 달아준다.
  • Decoder의 입력은 현재까지 생성된 단어들을 의미한다.

 


Decoder : Self Attention Layer

  • Decoder Input에 대해서도 마찬가지로 Self-Attention을 수행한다. 현재 단어가 이전 단어들과 어떻게 상호작용하는지를 학습하는 것이다.

 

  • Masked Multi-head Self-Attention : . 디코더가 현재 시점 이전의 단어들만을 참고하고 미래 단어를 참조하지 않도록 Self-Attention에서 마스킹을 사용한다.
    • Multi-head : Self-Attention Head에서 병렬로 수행된다는 것을 의미한다.

Decoder : Encoder-Decoder Attention Layer

출력의 각 단어가 입력 소스의 어떤 부분과 연관이 있는지를 파악하는 과정. Self Attention이 아니다!.

 

지금까지 우리는 Self-Attention을 통해서 입력 단어 간의 상호관계, 출력 단어 간의 상호관계를 계산하였다. 이를 기반으로 나온 Encoder의 Self-Attention value와 Decoder의 Self-Attention value를 이용하여 입력과 출력 단어 간의 상호관계를 파악하는 과정이다.

이번에는 Self Attention이 아니다!


Encoder-Decoder Attention Value의 생성 과정

 

그림을 자세히 보면 Attention으로 들어오는 화살표가 세 개가 있고, Encoder로부터 2개, Decoder로부터 1개가 온다.

  • Query Vector Query는 디코더의 첫번째 서브층(Self-attention Layer)의 결과 행렬로부터 얻는다. 
  • Key Vector와 Value Vector은 Encoder의 최종 출력으로부터 얻는다.
    • Encoder의 출력은 입력 시퀀스의 각 단어에 대한 다양한 요소와 관계에 대한 표현을 포함한다. 

 

 

Query (Decoder) -> Key, Value(Encoder) 대응으로 유사도 매칭

  • Decoder가 Encoder에게 다음에 올 단어에 대한 원래 문장에서의 관계에 대해서 Query(질의)를 하면 Encoder가 입력 문장과의 연관관계(Key, Value)를 응답해주는 관계이다.
  • Softmax를 통해 Attention Weights를 생성 -> Value 벡터의 가중합을 계산하여 Attention value(Context Vector) 생성
  • 해당 Context vector(Encoder-Decoder Attention Value)은 다음 단어를 예측하는 데 사용된다.

 

 


Decoder : 출력

 

1. Feed Forward : Fully Connected Layers로 구성된 신경망을 통해 비선형 변환을 수행한다.

  • Layer의 Input에 대해 정규화를 통해서 학습 속도를 향상시키고 안정되게 한다.
  • Residual Connection(잔차 연결)을 통해 입력을 출력에 더해주면서 모델이 원래 입력을 참조할 수 있게 한다.

2. Linear Transformation : 선형 변환을 통해 차원을 줄여서 출력 벡터의 크기를 줄여준다.

3. Softmax 활성화 함수 : 출력 벡터를 확률 분포로 변환한다. Decoder는 다음 단어를 선택하기 위해 Softmax 출력 중 확률이 가장 높은 단어를 선택하여 최종적으로 출력한다.

 

 

 


Transformer 정리

 

Attention

 


여러 개의 인코더와 디코더

앞에서 잠시 언급하였지만 Transformer는 이렇게 만들어진 Encoder와 Decoder를 여러 Layer로 쌓아서 구성된다.

 

 

 

다양한 정보의 획득: 인코더는 여러 관점에서의 임베딩을 수행할 수 있고, 디코더 또한 다양한 관점에서의 출력 시퀀스를 내보낼 수 있다.

 

Multi-Head Attention :여러 Self-Attention Head에서 병렬로 수행하기 위해서 Multi-Head Attention을 사용한다고 하였다.

.

 

 

 

 

 

 

 

 

 

 

 

 


Transformer 모델의 확장

 

 

BERT (2018)(Pretraining of Deep Bidirectional Transformers for Language Understanding)

 

Masked Language Model : 입력 텍스트의 15% 단어를 랜덤으로 MASKING 후 예측하도록 학습

Next Sentence Prediction: 두 문장을 주고 이 문장이 이어지는 문장인지 아닌지 판별

 

 

 

 

 

 

GPT(Generative Pre-trained Transformer)

 

1. GPT-1  (2018)

1억 1천만 개의 파라미터를 갖고 있음, Self-supervised learning 으로 만든 언어 모델, Pretraining-finetuning의 대표적인 모델

간단한 질의응답, 번역, 요약 등 다양한 NLP 작업등을 수행할 수 있다.

 

 

 

2. GPT-2 (2019)

15억 개의 파라미터를 갖고 있음, 더 다양하고 방대한 데이터셋으로 사전 학습

생성된 텍스트의 질이 높아져, 실제와 구분하기, 어려운 수준의 자연스러운 텍스트를 생성

 

3. GPT-3 (2020)

약 1750억 개의 파라미터를 갖고 있음, 더 다양하고 방대한 데이터셋으로 사전 학습

사전 학습만으로도 여러 NLP 작업에서 높은 성능을 보여주며, 별도의 미세 조정 없이도 사용가능한 일반화 모델

 

3. GPT-4 (2023)

약 1조 7천억개의 파라미터를 가진다고 추정된다(미공개). 한 번에 처리할 수 있는 단어량을 3,000개에서 25,000개로 8배 이상 확대, 이미지와 동영상을 인식할 수 있다. AI가 사실과 다른 것을 마치 진실인 것처럼 강한 확신을 담아 답변하는 할루시네이션을 상당 부분 줄이는 데 성공했다. 

논란(2024.06 기준) : 학계에서 매개변수가 월등히 늘었음에도 불구하고 비례적인 성능 향상이 이루어지지 않았다, 오히려 성능이 나빠졌다는 의견이 있다. MoE 구조가 오히려 영향을 주었다는 학계의 GPT와 트랜스포머의 한계점을 시사하는 일부의견이 등장하였다. 

 

 

 

 

 


간단한 챗봇 만들기 : Transformer 모델 구성 및 학습 

 

코랩 GPU를 다썼다.. 자고 일어나면 학습되어 있으려나..

 

DL09_Transformer_챗봇

 

 

 

 


 

<References>
https://wikidocs.net/22893

https://actionpower.medium.com/%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%EB%A8%B8-transformer-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1d595a208230

https://blog.promedius.ai/transformer/

해당 포스팅의 내용은 "상명대학교 민경하 교수님 "인공지능" 수업, 상명대학교 김승현 교수님 "딥러닝"수업을 기반으로 작성하였으며, 포스팅 자료는 해당 내용을 기반으로 재구성하여 만들어 사용하였습니다.




반응형

BELATED ARTICLES

more