Self-Study

skipgram word2vec 的漸變

  • December 26, 2016

我正在研究斯坦福 NLP 深度學習課的書面作業問題http://cs224d.stanford.edu/assignment1/assignment1_soln

我試圖理解 3a 的答案,他們正在尋找中心詞向量的導數。

假設你得到一個預測的詞向量對應於skipgram的中心詞c,詞預測是使用word2vec模型中的softmax函數進行的。

其中w表示第 w 個單詞並且(w = 1, … , W) 是詞彙表中所有單詞的“輸出”詞向量。假設將交叉熵成本應用於此預測,並且單詞o是預期單詞。

在哪裡是所有輸出向量的矩陣,並且讓是單詞的softmax預測的列向量,y是one-hot標籤,也是一個列向量。

交叉熵在哪裡

所以中心向量梯度的答案是

有人可以告訴我實現這一目標的步驟嗎?我一直在使用這個問題作為word2vec 中交叉熵損失的參考導數,但我特別想知道表示。

首先,讓我們列出我們所得到的以及我們對不同向量形狀的假設。讓,

  1. |W| 是詞彙中的單詞數
  2. yˆy 是形狀的列向量 |W| × 1
  3. uivj 是形狀的列向量 D X 1 ( D =嵌入的維度)
  4. y 是 shape 的 one-hot 編碼列向量 |W| × 1
  5. ˆy 是形狀的softmax預測列向量 |W| × 1
  6. $ \hat{y}i = P(i|c) = \frac{exp(u_i^Tv_c)}{\sum{w=1}^Wexp(u_w^Tv_c)} $
  7. 交叉熵損失: J=Wi=1yilog(^yi)
  8. U=[u1,u2,,uk,uW] 是一個由以下組成的矩陣 uk 列向量。

現在,我們可以寫 J=Wi=1yilog(exp(uTivc)Ww=1exp(uTwvc))

簡化, J=Wi=1yi[uTivclog(Ww=1exp(uTwvc))]
現在,我們知道 y 是 one-hot 編碼的,所以它的所有元素都是零,除了一個,比如說, kth 指數。這意味著,上面的總和中只有一個非零項對應於 yk 總和中的所有其他項均為零。所以成本也可以寫成: J=yk[uTkvclog(Ww=1exp(uTwvc))]
注:以上 yk 是 1。

解決 JvcJvc=[ukWw=1exp(uTwvc)uwWx=1exp(uTxvc)]

可以重新排列為: Jvc=Ww=1(exp(uTwvc)Wx=1exp(uTxvc)uw)uk

使用定義(6),我們可以將上式改寫為: Jvc=Ww=1(ˆywuw)uk

現在讓我們看看如何用矩陣表示法編寫它。注意:

  1. uk 可以寫成矩陣向量乘法: U.y
  2. Ww=1(ˆywuw) 是向量的線性變換 uwU 按比例縮放 ˆyw 分別。這又可以寫成 U.ˆy

所以整個事情可以簡潔地寫成: U[ˆyy]

最後,注意我們假設 ui s 為列向量。如果我們從行向量開始,我們會得到 UT[ˆyy] ,和你要找的一樣。

引用自:https://stats.stackexchange.com/questions/253244