저는 단어 표현에 대한 임베딩을 연구하고 있습니다. 많은 dnn 라이브러리에서 embedding 레이어를 지원합니다. 그리고 이것은 정말 좋은 튜토리얼입니다.임베딩 레이어의 초기 값은 무엇입니까?
Word Embeddings: Encoding Lexical Semantics
는하지만 난 여전히 삽입 값을 계산하는 방법을 잘 모르겠습니다. 아래의 예에서는 어떤 훈련을하기 전에 어떤 값을 출력합니다. 임의의 가중치를 사용합니까? Embedding(2, 5)
의 목적을 알고 있지만 초기 계산이 확실하지 않습니다. 그리고 Embedding의 가중치를 배울 수있는 방법에 대해서는 확신 할 수 없습니다.
word_to_ix = {"hello": 0, "world": 1}
embeds = nn.Embedding(2, 5) # 2 words in vocab, 5 dimensional embeddings
lookup_tensor = torch.LongTensor([word_to_ix["hello"]])
hello_embed = embeds(autograd.Variable(lookup_tensor))
print(hello_embed)
--------
Variable containing:
-2.9718 1.7070 -0.4305 -2.2820 0.5237
[torch.FloatTensor of size 1x5]
나는 내 생각을 분명히합니다. 우선, 위 Embedding(2, 5)
은 형태가 (2, 5)
인 매트릭스입니다.
Embedding(2, 5) =
[[0.1,-0.2,0.3,0.4,0.1],
[-0.2,0.1,0.8,0.2,0.3]] # initiated by some function, like random normal distribution
그런 hello
는 [1, 0]
입니다. 그러면 hello
표현은 [1, 0].dot(Embedding(2, 5)) = [0.1,-0.2,0.3,0.4,0.1]
으로 계산됩니다. 이것은 실제로 Embedding의 첫 번째 행입니다. 내가 제대로 알고 있니?
업데이트
나는 정확히 그 가치에 대해 정규 분포를 사용한다 삽입의 코드를 발견했다. 네,하지만 이것은 단지 기본값 일 뿐이며 레이어를 임베드 할 때 임의의 가중치를 설정할 수 있습니다. https://github.com/chainer/chainer/blob/adba7b846d018b9dc7d19d52147ef53f5e555dc8/chainer/links/connection/embed_id.py#L58
균일 배포 또한 commom입니다. – Mehdi