2017-09-22 10 views
2

저는 단어 표현에 대한 임베딩을 연구하고 있습니다. 많은 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

답변

1

예. 랜덤 가중치로 시작합니다. 일반 정규 분포 대신 잘린 정규 분포를 사용하는 것이 더 일반적이라고 생각합니다. 그러나 그것은 아마도 차이점을 크게 만들지 못할 것입니다.

+0

균일 배포 또한 commom입니다. – Mehdi

2

Initializationsrandom weights의 레이어를 설정하는 방법을 정의합니다. 당신은 그것을하기 위해 어떤 값을 사용할 수 있습니다. 하지만 초기 값은 Word Embedding에 영향을줍니다. this과 같은 더 나은 초기 값을 선택하려고 시도하는 Pre-trained Word Embedding에 대한 많은 접근법이 있습니다.

+0

흥미로운 정보 주셔서 감사합니다. – jef