Self-Study
skipgram word2vec 的漸變
我正在研究斯坦福 NLP 深度學習課的書面作業問題http://cs224d.stanford.edu/assignment1/assignment1_soln
我試圖理解 3a 的答案,他們正在尋找中心詞向量的導數。
假設你得到一個預測的詞向量對應於skipgram的中心詞c,詞預測是使用word2vec模型中的softmax函數進行的。
其中w表示第 w 個單詞並且(w = 1, … , W) 是詞彙表中所有單詞的“輸出”詞向量。假設將交叉熵成本應用於此預測,並且單詞o是預期單詞。
在哪裡是所有輸出向量的矩陣,並且讓是單詞的softmax預測的列向量,y是one-hot標籤,也是一個列向量。
交叉熵在哪裡
所以中心向量梯度的答案是
有人可以告訴我實現這一目標的步驟嗎?我一直在使用這個問題作為word2vec 中交叉熵損失的參考導數,但我特別想知道表示。
首先,讓我們列出我們所得到的以及我們對不同向量形狀的假設。讓,
- |W| 是詞彙中的單詞數
- y 和 ˆy 是形狀的列向量 |W| × 1
- ui 和 vj 是形狀的列向量 D X 1 ( D =嵌入的維度)
- y 是 shape 的 one-hot 編碼列向量 |W| × 1
- ˆy 是形狀的softmax預測列向量 |W| × 1
- $ \hat{y}i = P(i|c) = \frac{exp(u_i^Tv_c)}{\sum{w=1}^Wexp(u_w^Tv_c)} $
- 交叉熵損失: J=−∑Wi=1yilog(^yi)
- U=[u1,u2,…,uk,…uW] 是一個由以下組成的矩陣 uk 列向量。
現在,我們可以寫 J=−W∑i=1yilog(exp(uTivc)∑Ww=1exp(uTwvc))
簡化, J=−W∑i=1yi[uTivc−log(W∑w=1exp(uTwvc))]現在,我們知道 y 是 one-hot 編碼的,所以它的所有元素都是零,除了一個,比如說, kth 指數。這意味著,上面的總和中只有一個非零項對應於 yk 總和中的所有其他項均為零。所以成本也可以寫成: J=−yk[uTkvc−log(W∑w=1exp(uTwvc))]注:以上 yk 是 1。解決 ∂J∂vc : ∂J∂vc=−[uk−∑Ww=1exp(uTwvc)uw∑Wx=1exp(uTxvc)]
可以重新排列為: ∂J∂vc=W∑w=1(exp(uTwvc)∑Wx=1exp(uTxvc)uw)−uk
使用定義(6),我們可以將上式改寫為: ∂J∂vc=W∑w=1(ˆywuw)−uk現在讓我們看看如何用矩陣表示法編寫它。注意:
- uk 可以寫成矩陣向量乘法: U.y
- 和 ∑Ww=1(ˆywuw) 是向量的線性變換 uw 在 U 按比例縮放 ˆyw 分別。這又可以寫成 U.ˆy
所以整個事情可以簡潔地寫成: U[ˆy−y]
最後,注意我們假設 ui s 為列向量。如果我們從行向量開始,我們會得到 UT[ˆy−y] ,和你要找的一樣。