https://github.com/huggingface/transformers

RNN → LSTM → LSTM + attention → Only attention (Transformer)
어텐션 모듈을 통해 병렬적인 학습이 가능하도록 설계된 구조
→ 효율적인 학습 가능 (기존 모델은 한 단어에 대한 계산이 앞 단어에 대한 계산이 끝나야 가능해서 병목 현상Bottleneck이 일어날 수 있었음)
언어 뿐 아니라 다양한 모달리티의 데이터도 처리 가능 (ex. Vision Transformer)
내부에 인코더 파트와 디코더 파트 존재, 이 둘 사이를 이어주는 연결고리 존재

(오리지널 버전) 인코더 6개 + 디코더 6개
(오리지널 버전) 레이어 간에는 같은 파라미터 공유 X

두개의 하위 레이어로 구성된 동일한 구조를 가짐
(동일한 파라미터 값을 갖지는 X)
| 2. Feed Forward Neural Network | 각 position마다 동일한 구조의 FFNN이 독립적으로 적용 |
| 1. Self-Attention layer | 특정 단어를 인코딩할 때 주변 단어들을 고려하는 역할 수행 |
↑ As we are encoding the word "it" in encoder #5 (the top encoder in the stack), part of the attention mechanism was focusing on "The Animal", and baked a part of its representation into the encoding of "it".
세 개의 하위 레이어를 가짐
| 3. Feed Forward | 인코더와 동일한 방식의 FFNN |
| 2. Encoder-Decoder Attention | 인코더와 디코더 간 어텐션(디코더의 특정 토큰이 input의 어느 부분과 관련 있는지 파악) 수행 |
| 1. Self-Attention | 마스킹이 적용된 셀프 어텐션 수행 |

↑ Transformer 모델의 한 레이어의 단순화된 전체 구조. 이 레이어가 N번 쌓임
↑ Transformer의 한 레이어에는 3개의 multi-head attention 존재
특징
1. 셀프 에텐션
2. 병렬처리
3. 멀티 헤드 어텐션
트랜스포머(Transformer) 파헤치기—1. Positional Encoding
https://www.blossominkyung.com/deeplearning/transfomer-positional-encoding
입력 텍스트를 임베딩으로 변환


단어의 위치 정보를 제공






입력 벡터에 대한 세가지 벡터 생성
Query, Key, Value에 대응하는 행렬을 곱해서 생성

현재 표현하고자 하는 단어(Q)에 대해 어떤 단어들을 고려해야 하는지(K)를 알려주는 스코어 산출

2에서 계산한 스코어를 (=8 in the original paper since =64)로 나눔
3의 결과물에 softmax를 적용하여 해당 단어에 대한 집중도 산출
4에서 얻은 확률값과 해당 단어의 Key값을 곱함
5에서 산출된 모든 값들을 더해 출력으로 반환

※ 위의 모든 과정이 행렬 연산으로 수행됨
: Matrix calculation or self-attention
한 Query 토큰에 대하여 다양한 관점으로 표현할 수 있는 능력 제공
어텐션 결과물들은 concatenation 후 가중치 행렬과의 연산을 통해 원래 입력 차원과 동일한 차원에 출력 벡터를 생성
각 어텐션 블록에서 Residual Connection, Layer Normalization 수행
디코더 과정에서도 이 절차 적용

teacher forcing을 사용하므로 문장을 한번에 입력받지만 미래 정보는 참고하면 안됨
디코딩 단계에서 셀프 어텐션은 Query 토큰보다 뒤에 위치한 토큰들에 대한 정보는 하지 않다고 가정하고 해당 부분을 전부 마스킹(Masking) 처리
순차적으로 수행할 필요 없이 한번에 수행 가능




in terms of BLEU score
BLEU (Bilingual Evaluation Understudy) score
성과지표
데이터의 X가 순서정보를 가진 단어들(문장)로 이루어져 있고, y또한 단어들의 시리즈(문장)로 이루어진 경우에 사용
번역을 하는 모델에 주로 사용
3요소
- n-gram을 통한 순서쌍들이 얼마나 겹치는지 측정 (precision)
- 문장길이에 대한 과적합 보정 (Brevity Penalty)
- 같은 단어가 연속적으로 나올때 과적합 되는 것을 보정 (Clipping)

ex. n-gram(1~4)을 통한 순서쌍들이 얼마나 겹치는지 측정 (precision)


Transformer variations
Transformer에서 어떤 모델들이 RNN 및 LSTM 대신에 사용되었으며, 이 모델의 장점은 무엇인가?
transformer에서는 기존의 RNN 및 LSTM과 같은 순환형 모델을 사용하지 않고 attention을 중심으로 새로운 구조를 제시하였다. tranformer의 encoder 파트에서는 multi-head self-attention과 feed-forward neural network가 사용되고 decoder 파트에서는 masked multi-head self attention, encoder-decoder mult-head attention, feed-forward nerual network가 사용된다. 이 모델의 장점은 input을 한번에 받아 병렬적으로 처리함으로써 연산 시간이 단축되고 RNN, LSTM보다 long-term dependencies를 더 잘 저장한다는 점이다. 또한 언어뿐 아니라 다양한 모달리티의 데이터 처리가 가능하다.
포지셔날 인코딩(Positional Encoding)이 Transformer에서 왜 필요한지 간단하게 설명하시오.
transformer는 순차적으로 입력을 처리하는 RNN과 다르게 전체 시퀀스를 한 번에 입력받기 때문에 위치 정보를 저장해 줄 필요가 있다. 따라서 모든 단어 임베딩에 positional encoding vector를 더하여(sum) 입력 벡터를 산출함으로써 단어와 단어 간의 선행 관계를 표시해준다.
Transformer의 Self-Attention 레이어에서 Query, Key, Value 벡터의 역할은 무엇이고, 이들을 어떻게 생성하는지 설명하시오.
Query는 현재 처리하고자 하는 단어 임베딩이고, Key는 Query와 다른 단어들과의 매칭을 위한 레이블이며, Value는 Key와 연결된 실제 단어 임베딩이다. 이들은 가중치를 곱하여 생성할 수 있다.
Multi-head Attention은 어떻게 작동하며, 왜 한 Query 토큰에 대해 다양한 관점으로 표현할 수 있는 능력이 필요한지 설명하시오.
Multi-head attention은 여러 개의 어텐션 헤드를 동시에 사용하여 다양한 관점에서 정보를 수집하고 학습한다. 각 헤드는 서로 다른 가중치 행렬을 사용하여 어텐션을 계산하며, 각각의 헤드의 결과를 결합하여 최종 출력을 산출한다. 이는 다양한 언어 처리 작업에서 효과적이며 특히 문맥을 고려하여 어텐션을 수행해야 하는 자연어 번역과 같은 작업에서 유용하다.
Position-wise Feed-Forward Networks가 Transformer에서 어떤 역할을 하는지 설명하시오.
position-wise feed-forward network는 transformer 각 위치의 특성을 강화하고 다양한 위치에 대한 특징을 캡처함으로써 아키텍처의 효율적인 특성 학습과 모델의 표현력을 향상시키는 데 기여하며, 특히 텍스트와 같은 순차적인 데이터를 처리하는 데 유용하다.
Masked Multi-Head Attention이 디코딩 과정에서 왜 필요한지 간단히 설명하시오.
decoding에서는 encoding과 달리 현재 처리하는 단어 기준에서 미래의 단어를 참고하면 안 되지만 teacher forcing을 사용하면 문장 전체를 한번에 입력받아 버린다. 따라서 Query 토큰 이후 미래 시점을 전부 마스킹하고 어텐션을 수행하여야 한다.