本文沒有繁文縟節,純數學推導,建議先閱讀《word2vec中的數學原理詳解》html
1、邏輯迴歸
能夠閱讀《邏輯迴歸算法分析》理解邏輯迴歸。web
sigmoid函數:
σ(x)=1+e−x1算法
σ′(x)=σ(x)[1−σ(x)]app
[logσ(x)]′=σ(x)σ′(x)=1−σ(x)機器學習
[log(1−σ(x))]′=1−σ(x)−σ′(x)=−σ(x)svg
邏輯迴歸用於解決二分類問題,定義好極大對數似然函數,採用梯度上升的方法進行優化。事實上,word2vec的算法本質就是邏輯迴歸。函數
2、CBOW
根據上下文詞,預測當前詞,將預測偏差反向更新到每一個上下文詞上,以達到更準確的預測的目的。學習
記:優化
一、
pw:從根節點出發,到達
w的路徑;編碼
二、
lw:路徑
pw包含節點的個數;
三、
p1w,p2w,⋯,plww:路徑
pw中第
lw個節點,其中
p1w是根節點,
plww是
w對應的節點
四、
d2w,d3w,⋯,dlww ϵ {0,1}:詞
w的哈夫曼編碼,它由
lw−1位編碼構成,
djw表示路徑
pw第
j個節點對應的編碼(根節點不編碼)。
五、
θ1w,θ2w,⋯,θlw−1w ϵ Rm:路徑
pw中非葉子節點對應的向量,
θjw表示路徑
pw第
j個非葉子節點對應的向量
六、
Label(pjw)=1−djw,j=2,3,⋯,lw:表示路徑
pw第
j個節點對應的分類標籤(根節點不分類)
一、Hierarchical Softmax
極大似然:
∏wϵCp(w∣Context(w))
極大對數似然:
£=∑wϵClog p(w∣Context(w))
條件機率:
p(w∣Context(w))=∏j=2lwp(djw∣Xw,θj−1w),其中:
p(djw∣Xw,θj−1w)=⎩⎨⎧σ(XwTθj−1w), djw=01−σ(XwTθj−1w),djw=1,注意:在word2vec中的哈夫曼樹中,編碼0表示正類,編碼1表示負類。
Xw=∣Context(w)∣∑uϵContext(w)v(u)
寫成總體即:
p(djw∣Xw,θj−1w)=[σ(XwTθj−1w)]1−djw⋅[1−σ(XwTθj−1w)]djw,代入對數似然函數得:
£=∑wϵClog∏j=2lwp(djw∣Xw,θj−1w)
=∑wϵClog∏j=2lw{[σ(XwTθj−1w)]1−djw⋅[1−σ(XwTθj−1w)]djw}
=∑wϵC∑j=2lw{(1−djw)⋅log[σ(XwTθj−1w)]+djw⋅log[1−σ(XwTθj−1w)]}
爲求導方便,記:
£(w,j)=(1−djw)⋅log[σ(XwTθj−1w)]+djw⋅log[1−σ(XwTθj−1w)]
£(w,j)關於
θj−1w的梯度:
∂θj−1w∂£(w,j)=∂θj−1w∂{(1−djw)⋅log[σ(XwTθj−1w)]+djw⋅log[1−σ(XwTθj−1w)]}
=(1−djw)[1−σ(XwTθj−1w)]Xw−djw[σ(XwTθj−1w)]Xw
={(1−djw)[1−σ(XwTθj−1w)]−djw[σ(XwTθj−1w)]}Xw
=[1−djw−σ(XwTθj−1w)]Xw
因而,
θj−1w的更新可寫爲:
θj−1w := θj−1w+η[1−djw−σ(XwTθj−1w)]Xw
因爲在
£(w,j)中
θj−1w與
Xw是對稱的,因此
£(w,j)關於
Xw的梯度:
∂Xw∂£(w,j)=[1−djw−σ(XwTθj−1w)]θj−1w
用
∂Xw∂£(w,j)來對上下文詞
v(u),uϵContext(w)進行更新:
v(u):=v(u)+η∑j=2lw∂Xw∂£(w,j)
以樣本
(Context(w),w)爲例,訓練僞代碼以下:
e=0
Xw=∣Context(w)∣∑uϵContext(w)v(u)
FORj=2:lwDO
{
q=σ(XwTθj−1w)
g=η[1−djw−q]
e:=e+gθj−1w
θj−1w:=θj−1w+gXw
}
FORuϵContext(w)DO
{
v(u):=v(u)+e
}
這裏有必要對以上僞代碼的含義作一個說明,固然,直接經過導數推導過程來理解也能夠,但導數的推導過程並無表達其真實的內在含義,下文中有相似的地方,再也不說明。
一、
σ(XwTθj−1w):
其含義是在已知上下文的前提下,在當前詞的哈夫曼路徑上作分類預測,根據路徑上的父節點
θj−1w,預測其子節點
θjw,獲得的子節點的分類標籤。固然,這裏獲得的分類標籤是[0,1]之間的實數,而不是{0, 1}二分類,這個值與0,1之間的差距便是預測偏差。把
σ(XwTθj−1w)理解成子節點
θjw正分類的機率也是能夠的。
二、
1−djw−q:
1−djw的含義是子節點
θjw的真實分類標籤,
1−djw−q則是真實標籤與預測標籤之間的偏差。
三、
e:=e+gθj−1w:
這裏是一個關鍵點,回到咱們最開始的優化函數上,要求是的最大對數似然:
£=∑wϵClog p(w∣Context(w)),即求極大值,因此要用梯度上升的方法進行優化(機器學習中通常是梯度降低),因此e的更新是加法(梯度降低是減法)。
當梯度爲正的時,
gθj−1w>0,則
e:=e+gθj−1w相加後變大,將
e更新到
v(u)後讓
Xw變大,
Xw變大後
σ(XwTθj−1w)也就變大,也就是說預測的分類標籤越像1(正類),也能夠理解成預測爲正類的機率增大。爲何要讓
σ(XwTθj−1w)增大呢?反過來思考,當梯度爲正的時,
(1−djw−q)>0,這時只有當
djw=0時其值纔可能爲正,而
djw=0表示正類,分類標籤爲1,因此優化時要讓
σ(XwTθj−1w)趨近於1。
一樣,當梯度爲負的時,
gθj−1w<0,則
e:=e+gθj−1w相加後變小,將
e更新到
v(u)後讓
Xw變小,
Xw變小後
σ(XwTθj−1w)也就變小,也就是說預測的分類標籤越像0(負類),也能夠理解成預測爲正類的機率減少。一樣,反過來思考,當梯度爲負的時,
(1−djw−q)<0,這時只有當
djw=1時其值纔可能爲負,而
djw=1表示負類,分類標籤爲0,因此優化時要讓
σ(XwTθj−1w)趨近於0。
四、
θj−1w:=θj−1w+gXw:
同上
五、
FORj=2:lwDO:
該循環的含義是上下文預測的是葉子節點的詞(當前詞在葉子節點上),要通過該詞的哈夫曼路徑才能到達,因此要循環累計路徑上(除根節點)每一次分類的偏差。
總結:根據上下文詞,遍歷當前詞的哈夫曼路徑,累計(除根節點之外)每一個節點的二分類偏差,將偏差反向更新到每一個上下文詞上(同時也會更新路徑上節點的輔助向量)。
二、Negative Sampling
對
w的負樣本子集
NEG(w)的每一個樣本,定義樣本標籤:
Lw(w~)=⎩⎨⎧1,w=w~0,w̸=w~
極大似然:
∏wϵCp(w∣Context(w))
極大對數似然:
£=∑wϵClog p(w∣Context(w))
條件機率:
p(w∣Context(w))=∏uϵ{w}∪NEG(w)p(u∣Context(w)),其中:
p(u∣Context(w))=⎩⎨⎧σ(XwTθu), Lw(u)=11−σ(XwTθu),Lw(u)=0
Xw=∣Context(w)∣∑uϵContext(w)v(u)
寫成總體即:
p(u∣Context(w))=[σ(XwTθu)]Lw(u)⋅[1−σ(XwTθu)]1−Lw(u),代入對數似然函數得:
£=∑wϵClog ∏uϵ{w}∪NEG(w)p(u∣Context(w))
=∑wϵClog ∏uϵ{w}∪NEG(w)[σ(XwTθu)]Lw(u)⋅[1−σ(XwTθu)]1−Lw(u)
=∑wϵC∑uϵ{w}∪NEG(w){Lw(u)⋅log[σ(XwTθu)]+[1−Lw(u)]⋅log[1−σ(XwTθu)]}
爲求導方便,記:
£(w,u)=Lw(u)⋅log[σ(XwTθu)]+[1−Lw(u)]⋅log[1−σ(XwTθu)]
£(w,u)關於
θu的梯度:
∂θu∂£(w,u)=∂θu∂{Lw(u)⋅log[σ(XwTθu)]+[1−Lw(u)]⋅log[1−σ(XwTθu)]}
=Lw(u)⋅[1−σ(XwTθu)]Xw−[1−Lw(u)]⋅[σ(XwTθu)]Xw
={Lw(u)⋅[1−σ(XwTθu)]−[1−Lw(u)]⋅[σ(XwTθu)]}Xw
=[Lw(u)−σ(XwTθu)]Xw
因而,
θu的更新可寫爲:
θu := θu+η[Lw(u)−σ(XwTθu)]Xw
因爲在
£(w,u)中
θu與
Xw是對稱的,因此
£(w,u)關於
Xw的梯度:
∂Xw∂£(w,u)=[Lw(u)−σ(XwTθu)]θu
用
∂Xw∂£(w,u)來對上下文詞
v(u),uϵContext(w)進行更新:
v(u):=v(u)+η∑uϵ{w}∪NEG(w)∂Xw∂£(w,u)
以樣本
(Context(w),w)爲例,訓練僞代碼以下:
e=0
Xw=∣Context(w)∣∑uϵContext(w)v(u)
FORuϵ{w}∪NEG(w)DO
{
q=σ(XwTθu)
g=η[Lw(u)−q]
e:=e+gθu
θu:=θu+gXw
}
FORuϵContext(w)DO
{
v(u):=v(u)+e
}
總結:根據上下文詞,對當前詞作一次負採樣(包括當前詞,當前詞是正樣本),遍歷每一個樣本,累計上下文對每一個樣本的預測偏差,將偏差反向更新到每一個上下文詞上(同時也會更新樣本向量)。
3、Skip-gram
根據當前詞,預測上下文詞,將預測偏差反向更新到當前詞上,以達到更準確的預測的目的。但word2vec並無按這個思路訓練,而是依然按照CBOW的思路,用上下文中的每一個詞(注意這裏的區別,CBOW是合併了上下文,即
∑uϵContext(w)v(u)),對當前詞進行預測,再將預測偏差反向更新到該上下文詞上。
一、Hierarchical Softmax
極大似然:
∏wϵCp(Context(w)∣w)
極大對數似然:
£=∑wϵClog p(Context(w)∣w)
條件機率:
p(Context(w)∣w)=∏uϵContext(w)p(u∣w),其中:
p(u∣w)=∏j=2lup(dju∣v(w),θj−1u)
p(dju∣v(w),θj−1u)=⎩⎨⎧σ(v(w)Tθj−1u), dju=01−σ(v(w)Tθj−1u),dju=1
寫成總體即:
p(dju∣v(w),θj−1u)=[σ(v(w)Tθj−1u)]1−dju⋅[1−σ(v(w)Tθj−1u)]dju,代入對數似然函數得:
£=∑wϵClog∏uϵContext(w)∏j=2lup(dju∣v(w),θj−1u)
=∑wϵClog∏uϵContext(w)∏j=2lu[σ(v(w)Tθj−1u)]1−dju⋅[1−σ(v(w)Tθj−1u)]dju
=∑wϵC∑uϵContext(w)∑j=2lu{(1−dju)⋅log [σ(v(w)Tθj−1u)]+dju⋅log[1−σ(v(w)Tθj−1u)]}
爲求導方便,記:
£(w,u,j)=(1−dju)⋅log [σ(v(w)Tθj−1u)]+dju⋅log[1−σ(v(w)Tθj−1u)]
£(w,u,j)關於
θj−1u的梯度:
∂θj−1u∂£(w,u,j)=∂θj−1u∂{(1−dju)⋅log [σ(v(w)Tθj−1u)]+dju⋅log[1−σ(v(w)Tθj−1u)]}
=(1−dju)[1−σ(v(w)Tθj−1u)]v(w)−dju[σ(v(w)Tθj−1u)]v(w)
={(1−dju)[1−σ(v(w)Tθj−1u)]−dju[σ(v(w)Tθj−1u)]}v(w)
=[1−dju−σ(v(w)Tθj−1u)]v(w)
因而,
θj−1u的更新可寫爲:
θj−1u := θj−1u+η[1−dju−σ(v(w)Tθj−1u)]v(w)
因爲在
£(w,u,j)中
θj−1u與
v(w)是對稱的,因此
£(w,u,j)關於
v(w)的梯度:
∂v(w)∂£(w,u,j)=[1−dju−σ(v(w)Tθj−1u)]θj−1u
用
∂v(w)∂£(w,u,j)來對當前詞
v(w)進行更新:
v(w):=v(w)+η∑uϵContext(w)∑j=2lu∂v(w)∂£(w,u,j)
以樣本
(w,Context(w))爲例,訓練僞代碼以下:
e=0
FORuϵContext(w)DO
{
FORj=2:luDO
{
q=σ(v(w)Tθj−1u)
g=η[1−dju−q]
e:=e+gθj−1u
θj−1u:=θj−1u+gv(w)
}
}
v(w):=v(w)+e
值得注意的是,word2vec並非按上面的流程進行訓練的,而依然按CBOW的思路,對每個上下文詞,預測當前詞,分析以下:
極大似然:
∏wϵC∏uϵContext(w)p(w∣u)
極大對數似然:
£=∑wϵC∑uϵContext(w)log p(w∣u)
條件機率:
p(w∣u)=∏j=2lwp(djw∣v(u),θj−1w),其中:
p(djw∣v(u),θj−1w)=⎩⎨⎧σ(v(u)Tθj−1w), djw=01−σ(v(u)Tθj−1w),djw=1
寫成總體即:
p(djw∣v(u),θj−1w)=[σ(v(u)Tθj−1w)]1−djw⋅[1−σ(v(u)Tθj−1w)]djw,代入對數似然函數得:
£=∑wϵC∑uϵContext(w)log∏j=2lwp(djw∣v(u),θj−1w)
=∑wϵC∑uϵContext(w)log∏j=2lw[σ(v(u)Tθj−1w)]1−djw⋅[1−σ(v(u)Tθj−1w)]djw
=∑wϵC∑uϵContext(w)∑j=2lw{(1−djw)⋅log[σ(v(u)Tθj−1w)]+djw⋅log[1−σ(v(u)Tθj−1w)]}
爲求導方便,記:
£(w,u,j)=(1−djw)⋅log[σ(v(u)Tθj−1w)]+djw⋅log[1−σ(v(u)Tθj−1w)]
£(w,u,j)關於
θj−1w的梯度:
∂θj−1w∂£(w,u,j)=∂θj−1w∂{(1−djw)⋅log[σ(v(u)Tθj−1w)]+djw⋅log[1−σ(v(u)Tθj−1w)]}
=(1−djw)[1−σ(v(u)Tθj−1w)]v(u)−djw[σ(v(u)Tθj−1w)]v(u)
={(1−djw)[1−σ(v(u)Tθj−1w)]−djw[σ(v(u)Tθj−1w)]}v(u)
=[1−djw−σ(v(u)Tθj−1w)]v(u)
因而,
θj−1w的更新可寫爲:
θj−1w := θj−1w+η[1−djw−σ(v(u)Tθj−1w)]v(u)
因爲在
£(w,u,j)中
θj−1w與
v(u)是對稱的,因此
£(w,u,j)關於
v(u)的梯度:
∂v(u)∂£(w,u,j)=[1−djw−σ(v(u)Tθj−1w)]θj−1w
用
∂v(u)∂£(w,u,j)來對上下文詞
v(u),uϵContext(w)進行更新:
v(u):=v(u)+η∑j=2lw∂v(u)∂£(w,u,j)
以樣本
(w,Context(w))爲例,訓練僞代碼以下:
FORuϵContext(w)DO
{
e=0
FORj=2:lwDO
{
q=σ(v(u)Tθj−1w)
g=η[1−djw−q]
e:=e+gθj−1w
θj−1w:=θj−1w+gv(u)
}
v(u):=v(u)+e
}
總結:根據上下文詞(用該上下文詞來預測當前詞),遍歷當前詞的哈夫曼路徑,累計(除根節點之外)每一個節點的二分類偏差,將偏差反向更新到該上下文詞上(同時也會更新路徑上節點的輔助向量)。
二、Negative Sampling
對
w的負樣本子集
NEG(w)的每一個樣本,定義樣本標籤:
Lw(w~)=⎩⎨⎧1,w=w~0,w̸=w~
極大似然:
∏wϵCp(Context(w)∣w)
極大對數似然:
£=∑wϵClog p(Context(w)∣w)
條件機率:
p(Context(w)∣w)=∏uϵContext(w)p(u∣w),其中:
p(u∣w)=∏zϵ{u}∪NEG(u)p(z∣w)
p(z∣w)=⎩⎨⎧σ(v(w)Tθz), Lu(z)=11−σ(v(w)Tθz),Lu(z)=0
寫成總體即:
p(z∣w)=[σ(v(w)Tθz)]Lu(z)⋅[1−σ(v(w)Tθz)]1−Lu(z),代入對數似然函數得:
£=∑wϵClog∏uϵContext(w)∏zϵ{u}∪NEG(u)p(z∣w)
=∑wϵClog∏uϵContext(w)∏zϵ{u}∪NEG(u)[σ(v(w)Tθz)]Lu(z)⋅[1−σ(v(w)Tθz)]1−Lu(z)
=∑wϵC∑uϵContext(w)∑zϵ{u}∪NEG(u){Lu(z)⋅log[σ(v(w)Tθz)]+[1−Lu(z)]⋅log[1−σ(v(w)Tθz)]}
爲求導方便,記:
£(w,u,z)=Lu(z)⋅log[σ(v(w)Tθz)]+[1−Lu(z)]⋅log[1−σ(v(w)Tθz)]
£(w,u,z)關於
θz的梯度:
∂θz∂£(w,u,z)=∂θz∂{Lu(z)⋅log[σ(v(w)Tθz)]+[1−Lu(z)]⋅log[1−σ(v(w)Tθz)]}