Embedding
입력 데이터가 이미지와 같이 연속인 경우—이미지 데이터는 0-255 사이의 이산 값이지만 0-1사이의 값으로 정규화해서 사용하므로 연속 형태가 된다— 와 달리, 단어와 같이 불연속(정수)인 경우 gradient를 계산하는데 비효율적이기 때문에 연속(실수) 형태로 바꾸어서 사용해야 한다.
이산 데이터를 연속으로 바꾸는 방법은 여러가지가 있지만 Embedding이라는 방법을 사용하는 것이 일반적이다. Embedding은 단순히 이산 데이터를 연속으로 mapping 할 뿐만 아니라, 학습을 통해 유사한 의미를 갖는 데이터들이 유사한 Embedding 공간에 배치되도록 한다. 잘 학습된 Embedding은 Embedding 공간 내에서 데이터에 대한 연산도 수행할 수 있다. (데이터를 Embedding space에 mapping하는 것이므로 Latent space에 projection해서 데이터를 압축하는 것과는 차이가 있다)
하나의 이산 값은 embedding을 통해 실수형 벡터에 매핑된다. 이때 매핑되는 벡터의 차원은 설정한 embedding의 차원 수에 의해 결정된다. 예컨대 embedding 차원의 크기가 3이고 1이라는 정수 입력에 대해 embedding을 수행하면 [-0.0251, -1.6092, 0.7171] 과 같은 벡터에 매핑 된다.
하나의 값이 embedding 차원 크기의 벡터로 매핑되기 때문에 입력이 벡터였다면 embedding의 출력은 행렬이 된다. 만일 embedding 차원의 크기가 3이고 입력이 [2, 5, 3]과 같은 벡터였다면 출력은 [[ 1.4970, 1.3448, -0.9685], [ 0.4362, -0.4004, 0.9400], [-0.6431, 0.0748, 0.6969]]과 같은3x3의 행렬이 된다.
최초 embedding 값은 무작위로 설정되고 이후 신경망을 통과한 다음 backpropagation을 통해 업데이트 된다. embedding은 데이터의 의미를 반영하기 때문에 매우 중요한데, 적절한 embedding을 생성하는데 많은 데이터와 학습이 필요하기 때문에 대규모 pretrained embedding 모델을 사용하고 원하는 task에 맞게 fine-tuning 하는 경우도 많다. 물론 embedding을 직접 수행하면 해당 작업에 특화된 모델을 생성할 수 있다.
Contextual Embedding
embedding은 동일한 입력에 대해 동일한 벡터에 매핑하는 것이 기본이지만, 단어의 경우 동일한 단어가 여러 의미를 갖는 경우가 존재하기 때문에 입력의 context를 고려하여 embedding을 동적으로 생성한다.
예컨대 bank라는 단어는 어떤 단어와 함께 쓰이냐에 따라 ‘은행’이라는 단어가 될 수도 있고 ‘강둑’이라는 단어가 될 수가 있다. contextual embedding 모델은 단어를 우선 기본적인 embedding 레이어를 통과시킨 후 attention과 같은 추가적인 신경망 층을 사용해 주변 단어의 정보를 반영하여 embedding을 업데이트 한다.
Positional Embedding
최초 embedding을 업데이트하는 contextual embedding 방식과 달리, 별도의 벡터를 갖고, 그 벡터를 embedding과 합산하여 사용하는 방식도 가능한데 대표적인 예가 positional embedding이다. 이것은 단어의 위치 정보를 encoding하는 positional encoding 벡터를 별도로 계산한 후 embedding과 합산하여 신경망에 전달된다. 이때 positional encoding 벡터는 계산에 의해 위치 정보를 담고 있기 때문에 역전파의 대상이 아니며 따라서 역전파 시에는 원래의 embedding만 업데이트 된다.
Word Embedding Models
최초 널리 사용된 word embedding 모델은 Word2Vec이었고 그후 GloVe와 같은 모델이 사용되었다. 현재는 BERT와 같은 Transformer 기반 모델들이 주로 사용된다.