Transformer는 시퀀스 데이터를 처리하기 위한 자연어 처리 모델로, 입력 데이터에 위치 정보를 표현하기 위해 Positional Encoding을 사용합니다. Positional Encoding은 입력 시퀀스의 단어의 위치 정보를 모델이 학습할 수 있도록 벡터로 변환하는 과정입니다. 다음은 Transformer에서 Positional Encoding을 계산하는 방법을 상세히 설명한 예입니다.
입력 시퀀스의 단어 임베딩 Transformer 모델의 첫 번째 단계는 입력 시퀀스의 단어를 임베딩하는 것입니다. 각 단어는 임베딩 행렬에 의해 고정된 차원의 벡터로 변환됩니다. 예를 들어, 입력 시퀀스의 길이가
n
이고 임베딩 차원이d
인 경우, 입력 시퀀스는n x d
크기의 행렬로 표현됩니다.위치 정보 계산 Positional Encoding은 입력 시퀀스의 단어 위치에 대한 정보를 벡터로 표현합니다. 이를 위해 Transformer는 각 단어의 위치에 따라 서로 다른 값을 가지는 Positional Encoding 벡터를 계산합니다. Positional Encoding 벡터는 사인(Sine)과 코사인(Cosine) 함수를 사용하여 계산됩니다.
각 단어의 위치를 표현하는 Positional Encoding 벡터는 다음과 같이 계산됩니다:
- 각 단어의 위치에 대한 정보를 나타내는 변수
pos
를 만듭니다.pos
는 0부터 시작하여 1씩 증가하는 숫자입니다. pos
를 임베딩 차원의 절반인d/2
로 나누어 줍니다.pos
를 라디안(radian)으로 변환합니다.- 사인과 코사인 함수를 이용하여 각각
pos
와d/2
로 나눈 값을 계산합니다.
다음은 위의 과정을 수식으로 표현한 예입니다:
scssPE(pos, 2i) = sin(pos / 10000^(2i/d))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d))
여기서 PE(pos, 2i)
는 pos
위치의 벡터의 2i
번째 차원을 나타내고, PE(pos, 2i+1)
은 pos
위치의 벡터의 2i+1
번째 차원을 나타냅니다. i
는 0부터 시작하는 차원 인덱스입니다. 10000^(2i/d)는 위치 정보의 스케일링을 담당하는 값으로, 임의로 선택할 수 있는 하이퍼파라미터입니다.
- 입력 시퀀스의 임베딩
- 입력 시퀀스의 임베딩과 Positional Encoding 결합 위에서 계산한 Positional Encoding 벡터와 입력 시퀀스의 단어 임베딩 벡터를 합칩니다. 이를 통해 입력 시퀀스의 각 단어에 위치 정보를 포함한 새로운 임베딩 벡터를 얻게 됩니다.
- 입력 시퀀스의 단어 임베딩 행렬과 Positional Encoding 벡터를 합칩니다. 임베딩 행렬에는 각 단어의 임베딩 벡터가 저장되어 있고, Positional Encoding 벡터에는 각 위치의 위치 정보가 저장되어 있습니다. 이를 더해서 새로운 벡터를 얻습니다.
- 이때, 임베딩 행렬과 Positional Encoding 벡터는 같은 차원을 가져야 합니다. 즉, 임베딩 행렬의 차원이
n x d
이고 Positional Encoding 벡터의 차원이n x d
이면, 두 벡터를 각각 더해주면 됩니다.
다음은 위의 과정을 수식으로 표현한 예입니다:
makefileInput_Embedding_with_PE = Input_Embedding + Positional_Encoding
여기서 Input_Embedding_with_PE
는 위치 정보를 포함한 입력 시퀀스의 임베딩 벡터를 나타내고, Input_Embedding
은 단어 임베딩 행렬, Positional_Encoding
은 Positional Encoding 벡터를 나타냅니다.
이와 같이 입력 시퀀스의 단어 임베딩과 Positional Encoding을 결합한 벡터를 모델의 입력으로 사용하면, Transformer는 입력 데이터의 위치 정보를 함께 고려하여 시퀀스를 처리하게 됩니다. 이를 통해 모델은 단어의 순서를 학습하고, 입력 시퀀스의 위치에 따라 다양한 문맥을 인식할 수 있게 됩니다.