기존 RNN/CNN의 한계
→ 시퀀스의 길이가 길 수록 학습 시간과 난이도 상승
→ Context Vector에 시퀀스의 모든 정보를 압축하여 병목 현상 가능성 존재
위 문제를 해결하기 위해 소스 문장의 모든 정보를 저장하여 출력 단위에서 매번 입력으로 받음
RNN/CNN을 사용하지 않고 Attention 매커니즘만 이용하여 병렬 처리를 가능케 함
임베딩 단계 : 단어 임베딩과 위치 정보를 입력하여 어텐션 모델에 전달
인코더 : 어텐션과 정규화 과정을 반복하여 문장에서 정보 추출, 디코더에 전달
디코더 : 인코더에서 전달된 값을 바탕으로 출력 문장 생성
어텐션 : 문장 토큰 간 Dependency 계산
Encoder Self-attention : 하나의 문장에서 각 단어가 서로에게 가지는 연관성 계산
Masked Decoder Self-attention : 디코더 단계에서 앞에 등장한 단어만 참고하도록 마스크를 씌운 어텐션
Encoder-Decoder attention : 인코더의 Key, Value / 디코더의 Query 값을 통해 입력 단어와 출력 단어의 연관성 계산
단어 임베딩 및 위치 정보 임베딩
입력값을 모델에 입력하기 위해 벡터 형태로 변환
RNN을 사용하지 않기 때문에 위치 정보를 따로 입력해야 함
→ Positional Embedding 기법 사용, 위치 정보를 동시에 입력
→ 논문에서는 주기 함수 (코사인, 사인 함수)를 이용하여 학습 난이도를 낮추고 상대적인 위치를 학습하도록 기대함
→ 하지만 다른 위치 정보를 부여할 수 있는 임베딩 모델을 사용할 수 있음
성능 향상을 위해 두 입력값 간 Residual Learning 수행
→ Residual Learning : 특정 값을 보존하기 위해 특정 Layer를 건너뛰어 복사된 값을 직접 전달하여 잔차를 줄이는 학습 방법 (F(x) + x)
→ 잔차 학습으로 잔여된 값만 학습이 되어 학습 수렴 속도가 상승하며, global optima를 잘 찾을 수 있음