word2vec原理_Word2vec详细整理(1)—权重更新原理
在做graph embedding的過程中,產生了對w2v幾個疑問,索性重新回顧了一下w2v,做此總結。其中忽略了成噸的梯度更新推導,抓住主干,結論即可。
先按時間順序附上w2v的幾篇論文:
2013_Efficient Estimation of Word Representations in Vector Space
2013_Distributed Representations of Words and Phrases and their Compositionality
2014_Negative-Sampling Word-Embedding Method
2016_word2vec Parameter Learning Explained
本文不注重w2v的原因等balabala,主要是對第四篇論文的個人理解 https://arxiv.org/abs/1411.2738,以及之前對w2v的資料整理。
原文21頁,內容非常多,先整理出最基本的兩部分更新公式的推導。后面的優化方法有很多展開,之后整理好上傳。
W2v算法原理推導
CBOW簡易版:one-word context
我們通常看到的w2v原理介紹,都是下圖樣子,其實這是最簡單的連續詞袋模型(CBOW)的示意圖,其中假設上下文只有一個單詞(Input),來預測一個目標單詞(output),就是一個二元模型,其實這也是傳統的神經網絡詞向量語言模型,也就是下圖(但是w2v從輸入層到隱層的映射沒有加激活函數,而是直接對所有輸入詞向量求和取平均)。
文章中的符號表示:
v_w: input vector ,是權重矩陣W的一行
v'_w: output vector ,是權重矩陣W‘的一列
$v{wI}$: 輸入層唯一單詞的input vector
特別注意,v_m?和v'_m??只是單詞w的兩種不同表達而已(最終使用前者作為詞向量)
至于如何更新參數,直接上結論:
2. 在更新輸入層到隱層的權重W時,詞向量矩陣W只有輸入單詞那一行的導數非0,其余的行在迭代過程中導數都為0,均保持不變,所以在反向傳播時只更新W矩陣的一行,記做v{wI}。w_I表示輸入的單詞,I表示在W中輸入單詞那一行,是一個N維詞向量。
其中 e_j = y_j - t_j, 表示輸出層第j個單詞的預測誤差(輸出層 j節點輸出 減去 j節點單詞真實label(0或1,當且僅當j節點是目標單詞時,值才為1)) 。EH向量是一個N維向量,表示詞匯表中所有單詞的輸出向量和預測誤差的加權求和,每一維的計算如下:
輸入單詞I的N維詞向量第i個維度(i = {1,2,...,N})的更新公式如下,x_I = 1:
詞向量矩陣的反向傳播的更新公式表示,輸入單詞的N維詞向量每個維度的更新,都和輸出層的詞向量(W‘的每一行)與預測誤差的點積結果相關,個人感覺這個點積結果可以理解對該維度的修正。
即,輸入單詞w_I的詞向量更新,取決于它與詞匯表V中所有單詞的預測誤差。
如果對公式有不理解,可以參考文末第二篇參考文獻,用一個實際的例子模擬權重更新,博主真是有心了(第二個更新小標題寫錯了,是輸入層-> 隱層權重的更新)。
原始paper中有一段話是這么解釋訓練詞向量的過程:
其實根據更新公式我并沒有理解上面這段話,根據公式來說,輸入單詞的第j個維度更新是和所有詞匯表單詞的第j個維度的output vector 的預測誤差加權和有關,其他單詞的預測誤差也會影響輸入單詞的更新。這里存疑,但是這不重要,結論更重要,理解文章的下面一段話意思即可:
在輸出層,如果單詞作為預測單詞的概率被高估(yi > ti),那么輸入單詞的輸入向量(W對應行向量)就會遠離的輸出向量(W‘的列向量),相反就會靠近。通過多個訓練樣本(上下文-目標單詞)的訓練,每個單詞的輸入和輸出向量的相對位置趨于穩定。 (After many iterations, the relative positions of the input and output vectors will eventually stabilize.)
multi-word context(上下文有多個單詞)
在one-word CBOW中,h = Wx,直接對輸入向量線性加和,而在multi-word CBOW中,輸入向量是把窗口中的C個OHE形式的單詞向量對位相加取平均再和權重矩陣W相乘。
損失函數:
其他更新方式和one-word基本一致,不是本文重點。
Skip-Gram Model
隱藏層h的定義依然是look up 權重矩陣W中輸入單詞的那一行。
損失函數變為概率的連乘形式:
注意,在輸出層,輸出C個多項式分布來替代one-word形式的只輸出一個多項式分布。最終結果取這C個多項式分布概率最高的C個單詞作為輸出,也就是模型預測的結果,即中心詞的C個上下文單詞。其中每個輸出共享同一個W’權重矩陣。
日常在訓練skip-gram w2v時,輸入的是一個中心詞和寬度為k的窗口內上下文單詞(假設C個單詞w1,w2...,wC),最后進入模型的是(wi, w1), (wi,w2),...,(wi,wC)這樣形式,還是(wi,(w1,w2,...,wC))?
——是前者,訓練C個多項式分布。只是損失函數不同,要求掌握兩種形式的損失函數。
碼字不易,覺得有用請點個贊,感謝。
主要參考
https://zhuanlan.zhihu.com/p/53425736
https://blog.csdn.net/qq_41664845/article/details/82971728
https://blog.csdn.net/qq_41664845/article/details/83108222#commentBox
總結
以上是生活随笔為你收集整理的word2vec原理_Word2vec详细整理(1)—权重更新原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据库更新消息提醒_用Pyt
- 下一篇: php版本最低要求:5.4_Zabbix