2017-03-06 68 views
0

關於skip-gram模型,爲了訓練目的,輸入是單詞(單熱表示),輸出是其上下文單詞(多個單熱表示)。例如,(A,B),(A,C),(A,D) 我的問題是:當我們運行訓練過程時,我們一對一運行模型對,或者我們只輸入[A,B | C | D]一起?skip-gram模型的不同訓練對之間的一致性

另一個問題是關於單詞向量矩陣「M」(輸入層和隱藏層之間的矩陣)。由於輸入是單熱的,因此輸入的結果(size | V |)x M是大小爲| V |的向量這是一個單詞向量矩陣的行。我的問題是:當我們運行反向傳播時,似乎只更新了一行單詞向量矩陣。

這是真的嗎? (A,B),(A,C),(A,D),如何保持不同對的不同反向傳播的一致性?例如,一旦對(A,B)完成,字向量矩陣中的行就被更新。通過更新,(A,B)的錯誤將會減少。然後我們運行pair(A,C),挑選相同的行並通過反向傳播進行更新。現在這個時候,(A,C)的錯誤將會減少。但(A,B)的校正將被擦除,這意味着(A,B)的反向傳播被丟棄。我的理解在這裏正確嗎?

由於

回答

0

可以認爲它是呈現對單獨作爲訓練樣本:(A,B),(A,C),(A,d)。這就是算法的定義。 (但是,某些實現可能實際上可以將它們作爲批處理來執行。)

請注意,使用負採樣時'輸出'僅爲「單熱」。 (在分層softmax中,預測一個詞需要可變的huffman編碼的輸出節點集合具有特定的0/1值。)

是的,在skip-gram中,每個訓練示例(例如「A預測B」 )只會導致一個單詞的向量(「單詞向量矩陣的行」)被更新,因爲只涉及一個單詞。

請注意,雖然本文描述了使用焦點詞預測其附近的單詞,但作爲實現問題的已發佈Google word2vec.c代碼(以及其他模擬實現)使用上下文詞語來預測焦點詞。從本質上講,它只是構建循環的一種不同方式(並因此訂購了訓練對的例子),我相信他們對CPU緩存效率略高。 (A,C)示例的後續反向行爲不一定會「擦除」先前的(A,B)反向行爲 - 取決於B的外向表示,它可能會強化它(在某些方面/方向/維度),或削弱它(以其他方式/方向/維度)。實質上,在所有不同的例子之間重複的拔河比賽,最終產生了權重的排列,這種排列方式反映了A,B和C的一些有用的相似性。

嚴格理解什麼是最好的方法發生的事情是查看實現的源代碼,例如original Google word2vec.cPython implementation in gensim

相關問題