본문 바로가기

공부 정리

[공부 정리] Transformer

ViT는 기존 NLP분야에서 사용되어진 Transformer 기술을 Vision Task에 적용시킨 기술이다. ViT는 Image Classification 분야에 맞게 Transformer를 변형시켰고 DETR(Detection with Transformer)은 Object Detection에 맞게 변형시켰다. 

그렇다면 여기서 Transformer란 무엇일까?

1) Transformer

Transformer는 2017년 구글이 발표한 논문인 "Attention is all you need"에서 나온 모델이다. 논문의 제목처럼 *Attention 만으로 구현된 모델이다. 기존의 *seq2seq의 구조인 인코더-디코더를 따르기도 하였다. Transformer는 기존의 *RNN을 사용하지 않고도 RNN보다 우수한 성능을 보였다. 기존 seq2seq 모델은 인코더 부분에서 정보손실이 발생한다. 트랜스포머는 어텐션만으로 인코더와 디코더를 만들어 위 문제를 해결하였다. 

트랜스포머는 RNN을 사용하지 않지만 기존의 seq2seq 처럼 인코더에서 입력 시퀀스를 입력받고, 디코더에서 출력 시퀀스를 출력하는 인코더-디코더 구조를 유지하고 있다. 아래의 seq2seq 모델의 이미지와 유사한 것을 확인할 수 있다. 위 이미지의 트랜스포머는 인코더와 디코더가 6개씩 존재하는 구조를 보인다.

인코더와 디코더가 여래 개 쌓였으므로 's'를 붙임

디코더는 마치 기존의 seq2seq 구조처럼 시작 심볼 <sos>로 입력을 받고 <eos>가 나올 때까지 연산을 진행한다. 이는 RNN은 사용되지 않지만 여전히 인코더-디코더의 구조는 유지되고 있음을 알 수 있다. 트렌스포머의 인코더와 디코더는 단순히 각 단어의 *임베딩 벡터들을 입력받는 것이 아니라 임베딩 벡터에서 조정된 값을 입력받는다.

 

RNN은 각 단어의 위치 정보를 갖을 수 있다. 단어의 위치에 따라 단어를 순차적으로 입력받아서 처리하기 때문이다. 하지만 트랜스포머는 단어 입력을 순차적으로 받는 방식이 아니기 때문에 다른 방식으로 정보를 전달해야 한다. 트랜스포머는 단어의 위치 정보를 얻기 위해 각 단어의 임베딩 벡터에 위치 정보들을 더하여 모델에 입력한다. 이 기술을 Positional Encoding이라고 한다.

RNN 입력

트렌스포머에서는 총 세가지의 어텐션이 사용된다.

셀프 어텐션은 본질적으로 Query, Key, Value가 동일한 경우를 말한다. 

Transformer Attention


우선 인코더에 대해 알아보겠다.

논문에서는 총 6개의 인코더 층을 사용한다. 즉 num_layers(인코더 층의 개수) = 6이다. 인코더는 Self Atthention과 feed Foward Neural Network의 2가지 층으로 구성된다. 위 이미지에서 멀티 헤드의 의미는 병렬적으로 셀프 어텐션을 사용한다는 의미이다.

어텐션 함수는 쿼리에 대해서 모든 키와의 유사도를 각각 구한다. 그리고 구해낸 이 유사도를 가중치로 하여 키와 맵핑되어 있는 각각의 값에 반영한다. 그리고 유사도가 반영된 값을 모두 가중합 하여 리턴한다.

그렇다면 셀프 어텐션은 무엇일까? 

위에서 t 시점은 계속 변화하면서 반복적으로 쿼리를 수행하므로 결국 전체 시점에 대해서 일반화 할 수 있다. 셀프 어텐션은 Q, K, V가 모두 동일하다. 즉 모두 "입력 문장의 모든 단어 벡터들"이라고 칭할 수 있다.


왼쪽의 그림처럼 셀프 어텐션을 통해 입력 문장 내의 단어들끼리 유사도를 구하여 It이 animal과 연관되었을 확률이 높다는 것을 찾아낸다.

 

 

 

 

 

 

 

※) Q, K, V 벡터를 구하는 더 자세한 정보는 참고2)를 통해 얻길 바란다.

 

Transformer Attention 이미지 속의 FFNN은 포지션-와이즈 피드 포워드 신경망이다. 이 신경망은 인코더와 디코더에서 공통적으로 갖고 있는 서브층이다. 완전 연결 FFNN이라고 해석할 수 있다. 

두 개의 서브층을 지나면 추가적으로 ADD&NORM을 추가적으로 거친다. 더 정확히는 Residual connection과 layer normalization 층을 지난다.


지금까진 인코더에 대해서 정리해보았다. 부족한 부분은 참고2)를 확인하길 바란다.

ViT는 인코더만을 적용하기 때문에 여기까지 정리하겠다.

  • Embedding(임베딩)
    위와 같이 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체를 의미
    임베딩의 가장 간단한 형태는 단어의 빈도를 그대로 벡터에 적용하는 것이다. 즉 여러 문서에 대한 단어들의 벡터를 구하면 단어간의 유사도를 찾을 수 있다. (아마? 유사한 문서에 몇 가지 단어들이 반복적으로 등장하면 그 단어들은 유사하다고 볼 수 있다.)
    즉, 임베딩이란 단어나 문장, 문서를 벡터로 변환시킨 값이나 그 과정을 말한다.
  • Transfer Learning(전이 학습)
    임베딩은 다른 딥러닝 모델의 입력값으로 자주 쓰이고 품질 좋은 임베딩을 쓸수록 모델의 성능은 좋아진다. 이렇게 임베딩을 다른 딥러닝 모델의 입력값으로 쓰는 기법을 전이학습이라고 한다. 즉, 품질이 좋은 임베딩을 쓰면 원하는 모델을 빠르고 효율적으로 학습시킬 수 있다.
  • Attention Mechanism
    RNN기반 seq2seq 모델에는 크게 두 가지 문제가 있다. (첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하여 정보 손실이 발생 / 둘째, RNN의 고질적인 문제인 기울기 소실(vanishing gradient) 문제가 존재)
    이를 해결하기 위해 어텐션 기법 등장하였다.
    어텐션은 디코더에서 출력 단어를 예측하는 매 시점마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다. 단 전체 입력 문장을 전부 동일하게 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중한다.
  • seq2seq
    입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 다양한 분야에서 사용되는 모델 (NLP)

    seq2seq 모델은 인코더-디코더 구조로 구성되어져 있었다. 인코더는 입력 시퀀스를 하나의 벡터 표현으로 압축하고, 디코더는 이 벡터 표현을 통해서 출력 시퀀스를 만든다. 이러한 구조에서는 인코더에서 정보 손실이 발생한다. 인코더 부분에서 입력 시퀀스를 고정된 크기의 vector로 만들기 때문에 정보를 압축하는 과정에서 손실이 발생한다. 입력 시퀀스가 클수록 성능이 많이 떨어지게 된다.
    논문: https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

seq2seq

  • RNN(Recurrent Neural Network, 순환 신경망)
    입력과 출력을 시퀀스 단위로 처리하는 시퀀스 모델 (재귀 신경망과 다르다)
    Feed Forward Neural Network와 같은 신경망은 은닉층에서 활서화 함수를 지닌 값이 오직 출력층 방향으로만 향한다. RNN은 그렇지 않은 신경망 중 하나이다. RNN은 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로도 보내면서 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징을 갖고 있다.

 

참고 :
1) https://blog.naver.com/PostView.nhn?blogId=winddori2002&logNo=222001331899&parentCategoryNo=&categoryNo=32&viewDate=&isShowPopularPosts=false&from=postView

 

[바람돌이/딥러닝] seq2seq 이론 및 개념 (sequence to sequence)

안녕하세요. 오늘은 RNN을 응용한 seq2seq에 대해 정리하려고 합니다. seq2seq은 NLP 분야에서 기계...

blog.naver.com

2) https://wikidocs.net/book/2155

 

딥 러닝을 이용한 자연어 처리 입문

많은 분들의 피드백으로 수년간 보완된 입문자를 위한 딥 러닝 자연어 처리 교재 E-book입니다. 오프라인 출판물 기준으로 코드 포함 **약 1,000 페이지 이상의 분량*…

wikidocs.net

3) https://casa-de-feel.tistory.com/28

 

임베딩(Embedding)이 뭐지?

*해당 포스팅은 한국어 임베딩(이기창 지음)을 공부하며 작성한 글입니다. 안녕하세요! 오늘은 자연어 처리 분야의 임베딩의 기초적인 부분에 대해 알아보겠습니다. 임베딩을 공부하게 된 계기

casa-de-feel.tistory.com

 

'공부 정리' 카테고리의 다른 글

[공부 정리] 인공지능[1,2장]  (0) 2023.03.27