Transformer는 2017년에 구글이 발표한 논문인 "Attention is all you need"에서 나온 모델로 기존의 seq2seq의 구조는 인코더-디코더를 따르면서도, 어텐션만으로 구현한 모델이다.
기존의 seq2seq 모델의 인코더-디코더 구조로 인해 인코더의 입력 시퀀스를 하나의 벡터로 압축하는 과정에서 입력 시퀀스의 정보가 일부 손실되는 단점을 어텐션으로 보정하여 해결했는데, 이 어텐션을 RNN의 보정의 용도가 아니라 어텐션을 주도적으로 인코더와 디코더를 만든다.
번역기에 쓰이는 모델인 encoder와 decoder를 보자.
인코더에 입력 문장이 들어가고 디코더로 출력 문장을 만든다.
번역기에만 쓰이는 건 아니다.
트랜스포머도 기본적으로 인코더와 디코더로 구성되어 있다.
이의 블랙박스화 부분을
입력된 문장들을 쌓아 올린 인코더의 층으로부터 정보를 뽑아 각 디코더 층으로 전달한다음 누적해 쌓아 올려 출력 문장의 단어를 하나씩 만드는 구조이다.
좀 더 자세히 보자.
입력으로 사용되는 임베딩 벡터들이 트랜스포머의 입력으로 사용되기 전에 포지셔널 인코딩값이 더해지는 것이다. 이를 좀더 자세히 보자면
이렇게 더해주는 이유는 단어를 하나씩 받는 것이 아니라, 한번에 모든 단어를 받기 때문이다.
트랜스포머가 RNN과 결정적으로 다른 부분으로써 RNN은 순차적으로 들어오는데, 트랜스포머는 한번에 받기때문에 임베딩 벡터에다가 위치정보를 통해 순서도 지정해주게 된다.
임베딩 벡터의 차원을 의미하고 있고, pos는 입력 문장의 임베딩 벡터 위치이고, i는 임베딩 벡터 내의 차원의 인덱스이다. 임베딩 행렬과 포지셔널 행렬을 더해주면서 각 단어 벡터에 위치정보를 더해준다.