Transformer의 시발점
https://arxiv.org/abs/1706.03762
기존의 RNN과 CNN의 한계를 극복하기 위해 새로운 구조인 Transformer를 제안한다
Attention 메커니즘을 기반으로하여 입력 시퀀스의 모든 단어를 동시에 처리할 수 있다
장기 의존성의 문제를 해결하고 병렬 처리가 가능해져 학습 속도를 크게 향상시킨다
트랜스포머 모델이 기계 번역 작업에서 최고 성능을 기록했음을 보여준다
순환신경망(LSTM, GRU) 시퀀스 모델링과 기계 번역 등에서 효과적으로 작동한다
그러나 훈련 데이터에 대해 병렬화가 배제되고 시퀀스 길이가 길어지면 메모리 용량에 치명적인 타격을 받는다
이는 순환 신경망의 한계점을 보여준다
입출력 시퀀스 내의 요소 간의 의존성을 거리와 상관없이 모델링할 수 있다
순환 네트워크와 결합해 사용하기 때문에 순차적 계산의 제약이 생긴다
순환 구조를 완전히 배제하고 어텐션 매커니즘에만 의존함으로써 입력과 출력 사이의 광범위한 의존을 이끈다
병렬화를 가능하게 하며 짧은 시간 내에 고품질을 출력하도록 한다(12시간, 8 P100 GPU)
Extended Neural GPU, ByteNet, 그리고 ConvS2S와 같은 모델들은 기본적으로 컨볼루션 신경망(CNN)을 사용하여 입력 및 출력 위치에 대해 숨겨진 표현을 병렬로 계산하고 입&출력 위치 간의 신호 연결위해 필요한 연산의 수가 위치 간 거리에 비례하여 증가
Transformer는 이러한 연산의 수가 상수로 줄어들어 의존성 학습이 용이
Nulti-Head Attention을 통해 평균화된 주의 가중치로 효과적인 해상도가 감소하는 단점을 보완
self-attention // intra-attention이라는 매커니즘은 단일 시퀀스의 서로 다른 위치 간의 관계를 파악하여 시퀀스의 표현을 계산
End-to-end 메모리 네트워크는 순차 정렬 순환 구조 대신 순환 어텐션 매커니즘을 기반으로하고 간단한 언어 질문 응답, 언어 모델링 작업에서 좋은 성능
트랜스포머는 순차 정렬 RNN이나 컨볼루션을 사용하지 않고 입력과 출력의 표현을 전적으로 자기주의에 의존하는 최초의 변환 모델
트랜스포머의 구조 설명, Attention mechnism의 장점을 얘기
대부분의 신경 시퀀스 변환 모델과 마찬가지로 인코더-디코더 구조
인코더: 입력 시퀀스(x1, ..., xn)를 연속적인 표현 시퀀스z = (z1, ..., zn)로 매핑
디코더: z를 바탕으로 출력 시퀀스(y1, ..., ym)를 생성
모델은 각 단계에서 자가 회귀적이며 이전에 생성된 기호를 추가 입력으로 사용해 다음 기호를 생성함
쿼리, 출력에 대한 한 쌍의 키-값이 모두 벡터로서 매핑되는 것으로 설명될 수 있다
출력은 values의 가중치 합으로 계산됨
vlaues -> 가중치가 할당된 각 values가 키에 대한 쿼리 함수로 계산됨

입력: 쿼리 Query(Q), 키 Key(K), 값 Value(V)
Q: 쿼리 집합, K: 키 집합, V: 값 집합 => 행렬로 묶어 동시에 처리
모든 키값에 대한 쿼리의 내적(dot product)을 계산하고, 로 나누어 스케일링 후 소프트맥스(softmax) 함수를 적용해 값(values)에 대한 가중치 얻음
디코더 스택의 self-attention 서브 레이어는 이후 위치를 참조하지 못하도록 마스킹되고 출력 임베딩이 한 위치씩 오프셋되어 예측이 이전 위치의 출력에만 의존할 수 있도록 보장
어텐션 함수로 주로 쓰이는 함수: additive attention, dot-product(multiplicative) attention
값이 클수록 내적값도 커져서 소프트맥수 함수가 매우 작은 기울기를 갖는 영역으로 밀려남
쿼리, 키, 값에 대해서 여러번 선형 투영한 후 병렬로 어텐션 함수를 수행하고 Context 벡터를 계산
'encoder-decoder attention' layers: 이전 디코더 레이어에서 온 쿼리들과 출력 인코더로부터 기억된 키, 값들. 이를 통해 디코더의 모든 위치가 입력 시퀀스의 모든 위치에 걸쳐 적용됨. 이는 [38, 2, 9]와 같은 시퀀스 간 모델에서 일반적인 encoder-decoder attention 메커니즘을 모방.
The encoder contains self-attention layers: 이전 인코더 레이어의 출력값이 키, 값으로 옴. 각 인코더의 위치가 이전 레이어의 모든 인코더와 매치됨
self-attention layers in the decoder: 디코더의 각 위치가 해당 위치까지 디코더의 모든 위치에 매치됨. 자동 회귀 속성을 보존하기 위해 디코더의 왼쪽 방향 정보 흐름을 방지. 불법 연결에 해당하는 소프트맥스 입력의 모든 값을 마스킹(-∞로 설정)하여 scaled dot-product 내부를 구현.
각 위치에 대해 독립적으로 그리고 동일하게 적용됨
Attention만으로는 충분하지 않기 때문에 인코더와 디코더에는 FFN(Feed-Forward Network)가 추가됨
각 입력 벡터에 대해 독립적으로 작동하고, Attention이 끝난 후 각 단어의 표현을 좀 더 복잡하게 변환함
각 단어의 위치별로 동일하게 적용되며, 각 단어의 벡터 표현을 추가로 가공하는 역할
=> 각 단어: 독립적 처리로 문장 내 다른 단어들과는 상관없이 변환 이루어짐
Embeddings: 입력 텍스트와 출력을 벡터로 변환하는 과정
-> 학습된 Embedding을 사용해 입출력 토큰을 d_model 차원의 벡터로 변환
디코더 출력에 선형 변환, Softmax 함수 적용해 다음 토큰에 대한 확률 예측
Embedding 벡터: 모델 학습동안 점진적으로 업데이트됨
=> 의미적으로 가까운 단어들이 비슷한 벡터 공간에서 배치되도록 학습
입력 Embedding: 입력 문장을 벡터로 변환
출력 Embedding: 디코더가 예측한 다음 단어를 다시 벡터로 변환해 다음 단어를 예측
-> 디코더 출력 + 선형 변환 + Softmax 함수 => 다음 나올 단어 확률 예측
입출력 디코더: 동일 임베딩 방식, 동일 가중치 행렬 공유
입력 Embedding & Pre-Softmax 선형 변환 => 동일 가중치 행렬 공유
=> 모델의 파라미터 수를 줄이고 메모리 효율성을 높임
=> 안정적인 학습 유도
해당 Transformer 모델에는 재귀적(RNN) 또는 합성곱 신경망(CNN)이 없기에 시퀀스 순서를 고려할 수 있도록 Positioning Encoding을 입력Embedding에 추가
Transformer 모델은 순서 의존성이 없음 => 시퀀스 내 단어들의 순서 이해를 위해 Positioning Encoding이 필요. 단어 간 순서 학습을 도와줌
학습되지 않은 새로운 시퀀스 길이에 대해서도 잘 작동함
입력 시퀀스의 각 토큰이 다른 토큰과 얼마나 관련이 있는지 계산하는 방법
1. 각 토큰에 대한 가중치 벡터 계산
2. 가중치 벡터를 사용하여 각 토큰의 출력을 계산
셀프 어텐션은 입력 시퀀스의 순서 보존하지 않음
입력 시퀀스의 모든 정보를 고려하여 출력 생성
입력 시퀀스의 순서를 보존하지 않기 때문에 입력 시퀀스 순서가 중요하지 않은 작업에 적합
셀프 어텐션을 사용해 입력 시퀀스의 모든 정보를 고려 가능 -> 장거리 의존성 학습
다양한 작업에 대해 효과적인 성능
기계 번역, 자연어 요약, 질문 응답 등 다양한 자연어 처리 작업에 사용
이미지 분류, 이미지 캡셔닝, 물체 인식 등 다양한 컴퓨터 비전 작업에 사용
음성 인식 작업에 사용
=> 다양한 분야에서 효과적인 성능