더북(TheBook)

이를 토큰 ID에 적용하여 임베딩 벡터를 얻어 보죠.

print(embedding_layer(torch.tensor([3])))

반환된 임베딩 벡터는 다음과 같습니다.

tensor([[-0.4015,  0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)

토큰 ID 3의 임베딩 벡터를 앞의 임베딩 행렬과 비교해 보면 네 번째 행의 값과 같다는 것을 알 수 있습니다(파이썬의 인덱스는 0부터 시작하므로 인덱스 3에 해당하는 행이 네 번째입니다). 다른 말로 하면 임베딩 층은 토큰 ID를 기반으로 가중치 행렬에서 행을 추출하는 검색 연산을 수행합니다.

NOTE

원-핫 인코딩에 익숙한 사람을 위해서 설명하면 여기서 설명한 임베딩 층은 본질적으로 원-핫 인코딩(one-hot encoding) 다음에 완전 연결 층(fully connected layer)을 두어 행렬 곱셈을 수행하는 것보다 효율적인 방법일 뿐입니다.9 깃허브에 있는 보너스 노트북(https://mng.bz/ZEB5)에서 이를 확인할 수 있습니다. 임베딩 층은 원-핫 인코딩과 행렬 곱셈을 효율적으로 구현한 것에 지나지 않으므로 역전파로 최적화할 수 있는 신경망 층이라고 볼 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.