오늘은 자연어처리 모델중 번역 분야에서 유명한 논문인 Transformer를 정리하는 글이다.
논문 링크 : https://arxiv.org/abs/1706.03762
Transformers _ 자연어 처리 모델
1. 등장배경
- 기존 RNN 모델의 한계
기존의 seq2seq 모델은 encoder-decoder 구조로 구성되어 있었다. 여기서 encoder는 입력 시퀀스를 하나의 벡터 표현으로 압축하고, decoder는 이 벡터 표현을 통해서 출력 시퀀스를 만들어 내는 구조였다.
하지만 이런 구조는 인코더가 입력 시퀀스를 하나의 벡터로 압축하는 과정에서 입력 정보가 손실(기울기소실)된다는 단점이 있었고, 이를 보정하기 위해 어탠션이 사용되었다.
- attention의 등장
처음에 attention은 단순히 RNN의 성능을 보정하기 위해 사용되었는데 2017년 구글의 연구진들이 attention을 보정하기 위한 용도가 아니라 어텐션 자체로 인코더와 디코더를 만드는 방법을 제안했다. 이 때 발표된 논문이 "Attention Is All You Need" 라는 논문이다.
현재 번역모델에 좋은 성능을 나타내는 GPT, BERT 모델도 Transfomer의 아키텍처를 활용해서 만든 모델이다.
번역 문장이 길어지면 길어질수록 RNN, LSTM보다 Attention의 성능이 높아진다.
2. Transformers 아키텍처
Transformers의 구조를 보면 RNN이나 CNN 구조를 전혀 사용하지 않고 있다. 그 대신 Positional Encoding을 통해 input값을 처리한다.
전체 구조는 Encoder와 Decoder로 구성되어있으며 Attention과정을 여러 레이어에서 반복하는것을 알 수 있다.
위 그림에도 나와있듯이 입력값으로 단어가 들어오면 여러 층의 Encoder를 거친 K, V값을 Decoder의 각 층에 입력값으로 보내고 Decoder는 번역된 값을 출력하는 것을 볼 수 있다.
(논문에서 N=6개의 층으로 구성)
아래 그림이 조금 더 자세하게 표현되어있다.
이제 위 구조도에서 나오는 기술에 대한 설명을 정리한다.
3. Transformers의 입력방식
- Embedding + Positional Encoding
Transformer의 input값이 만들어지는 방법으로는 입력값을 임베딩 벡터로 변환하고 Positional Encoding값을 더해주는 방법으로 입력값을 생성한다.
3.1 Embedding
Embedding의 정의는 입력된 문자를 기계가 이해할 수 있도록 숫자(벡터)로 바꾸는 방법론이다.
벡터화 방법으로는 두가지 방법이 있습니다
- 희소표현
One-hot Encoding 방법처럼 벡터의 값이 대부분 0으로 표현하는 방법이다.
2. 밀집 표현(임베딩)
벡터의 차원을 조밀하게 변형하는 방법이다. 이 밀집 표현 방법에도 두가지 방법이 있는데
이 중 Transformer에서는 Embedding layer로 단어를 실수로 변환한다.
- Embedding layer
단순히 임베딩 층을 차원에 맞게 랜덤초기화해서 출력해주는 방식이다.
위 그림처럼 단어를 토큰단위로 나눈 후 각 토큰당 {1 x 차원의 수}의 랜덤 가중치 벡터로 변환한다. 그리고 그 벡터를 모두 합쳐 {토큰 수 x 차원의 수} 행렬로 변환한다.
* 논문에서는 차원을 512로 설정했다.
3.2 Positional Encoding
이렇게 출력된 무작위 임베딩 행렬에 Positional Encoding 행렬을 더해 줌으로써 단어의 위치를 저장해서 Encoder부분의 입력값을 만들게 됩니다.
Transformer는 순차적으로 연산하지 않기 때문에 Positional Encoding을 통해 단어간 순서 위치 정보가 필요합니다.
그럼 Positional Encoding은 무엇일까요?
Positional Encoding은 sin, cos을 통해서 주기함수로 표현하는데 이건 input길이가 달라도 항상 같은 값을 출력합니다.
- pos : 문장 내 단어의 순서
- i : 임베딩 벡터 차원에서의 순서
- d_model : 트랜스포머의 모든 층의 출력 차원을 의미 (논문에서는 512)
Ex) 토큰(단어) 4개를 512차원으로 임베딩 했다면, pos=0~3, i=0~127이다.
위 그림은 positional encoding 값을 시각화 한 그림이다.
위에서 sin, cos 수식으로 계산한 Positional Encoding값을 랜덤 임베딩 값에 더하면 단어간 수의 차이가 일정하게 변환되서 Encoder의 입력값으로 들어가게 된다.
Transformer의 내용을 한번에 담기는 너무 길어서 part는 1,2로 나눠서 작성하려고 한다.
아래 링크에서 part2에서 self-Attention과 Encoder, Decoder의 전반적인 내용을 확인할 수 있다.
https://zeuskwon-ds.tistory.com/88?category=1041966
출처
https://daje0601.tistory.com/287
'논문리뷰' 카테고리의 다른 글
[논문리뷰]Swin Transformer 논문 설명 (0) | 2023.08.10 |
---|---|
VIT(Vision Transformer) 논문리뷰 (0) | 2023.07.24 |
[Attention Is All You Need_논문2]Transformer _ Encoder, Decoder (0) | 2022.08.31 |
[로그파싱기술] "Drain3" with python (2) | 2022.08.04 |
[논문_로그파싱기술] Drain: An Online Log Parsing Approach with FixedDepth Tree 리뷰 (0) | 2022.08.04 |