2

私は単語表現の埋め込みを研究しています。多くのdnnライブラリでは、埋め込みレイヤーをサポートしています。これは本当に素敵なチュートリアルです。埋め込みレイヤの初期値は何ですか?

Word Embeddings: Encoding Lexical Semantics

しかし、私はまだ埋め込み値を計算する方法がわからないです。以下の例では、訓練の前にも何らかの値を出力します。それはいくつかのランダムな重みを使用していますか? Embedding(2, 5)の目的を実現していますが、最初の計算が不明です。そして、埋め込みの重みをどのように学ぶかについてはわかりません。

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]によって計算されます。これは実際に埋め込みの最初の行です。私は理解していますか?


更新

私は正確にその値を正規分布を使用している埋め込みコードを発見しました。はい、それは単なるデフォルト値であり、埋め込みレイヤーに任意のウェイトを設定することができます。 https://github.com/chainer/chainer/blob/adba7b846d018b9dc7d19d52147ef53f5e555dc8/chainer/links/connection/embed_id.py#L58

答えて

1

はい。あなたはランダムな重みで始めます。通常の正規分布の代わりに切り捨て正規分布を使用する方が一般的だと思います。しかし、それはおそらく大きな違いにはなりません。

+0

また、一様分布も同じです。 – Mehdi

2

Initializationsレイヤの最初のrandom weightsを設定する方法を定義します。あなたはそれを行うために任意の値を使用することができます。しかし、初期値はWord Embeddingに影響します。彼らがthisのようなより良い初期値を選ぶことを試みるPre-trained Word Embeddingのための多くのアプローチがあります。

+0

興味深い情報ありがとう – jef

関連する問題