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 $ 和 $ \hat{y} $ 是形狀的列向量 $ |W| $ × 1
- $ u_i $ 和 $ v_j $ 是形狀的列向量 $ D $ X 1 ( $ D $ =嵌入的維度)
- $ y $ 是 shape 的 one-hot 編碼列向量 $ |W| $ × 1
- $ \hat{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 = -\sum_{i=1}^Wy_ilog({\hat{y_i}}) $
- $ U = [u_1, u_2, …,u_k, …u_W] $ 是一個由以下組成的矩陣 $ u_k $ 列向量。
現在,我們可以寫 $$ J = - \sum_{i=1}^W y_i log(\frac{exp(u_i^Tv_c)}{\sum_{w=1}^Wexp(u_w^Tv_c)}) $$ 簡化, $$ J = - \sum_{i=1}^Wy_i[u_i^Tv_c - log(\sum_{w=1}^Wexp(u_w^Tv_c))] $$ 現在,我們知道 $ y $ 是 one-hot 編碼的,所以它的所有元素都是零,除了一個,比如說, $ k^{th} $ 指數。這意味著,上面的總和中只有一個非零項對應於 $ y_k $ 總和中的所有其他項均為零。所以成本也可以寫成: $$ J = -y_k[u_k^Tv_c - log(\sum_{w=1}^Wexp(u_w^Tv_c))] $$ 注:以上 $ y_k $ 是 1。
解決 $ \frac{\partial J}{\partial v_c} $ : $$ \frac{\partial J}{\partial v_c} = -[u_k - \frac{\sum_{w=1}^Wexp(u_w^Tv_c)u_w}{\sum_{x=1}^Wexp(u_x^Tv_c)}] $$
可以重新排列為: $$ \frac{\partial J}{\partial v_c} = \sum_{w=1}^W (\frac{exp(u_w^Tv_c)}{\sum_{x=1}^W exp(u_x^Tv_c)}u_w) - u_k $$ 使用定義(6),我們可以將上式改寫為: $$ \frac{\partial J}{\partial v_c} = \sum_{w=1}^W (\hat{y}_w u_w) - u_k $$
現在讓我們看看如何用矩陣表示法編寫它。注意:
- $ u_k $ 可以寫成矩陣向量乘法: $ U.y $
- 和 $ \sum_{w=1}^W (\hat{y}_w u_w) $ 是向量的線性變換 $ u_w $ 在 $ U $ 按比例縮放 $ \hat{y}_w $ 分別。這又可以寫成 $ U.\hat{y} $
所以整個事情可以簡潔地寫成: $$ U[\hat{y} -y] $$
最後,注意我們假設 $ u_i $ s 為列向量。如果我們從行向量開始,我們會得到 $ U^T[\hat{y} -y] $ ,和你要找的一樣。