轉自:https://blog.csdn.net/lanyu_01/article/details/80097350?utm_source=blogxgwz0
目錄:
1 Continuous Bag-of-Word Model
1.1 One-word context Update equation for hidden→output weights Update equation for input→hidden weights
1.2 Multi-word context
2 Skip-Gram Model
3 Optimizing Computational Efficiency
3.1 Hierarchical Softmax
3.2 Negative Sampling 由於word2vec模型學習生成的詞向量表示方法能夠攜帶句子的語義信息(semantic meanings),因此非常適用於多種NLP任務。 這篇論文詳細地推導和解釋了word2vec模型的參數更新公式,包括:CBOW(continuous bag-of-word)模型和SG(skip-gram)模型,以及兩種參數優化技術:hierarchical softmax 和 negative sampling.
1 Continuous Bag-of-Word Model
1.1 One-word context
我們從CBOW模型的最簡單版本開始介紹——One-word context。即我們假定context(預測目標單詞的上下文信息)只有一個單詞,也就是說One-word context 模型是在只要一個上下文單詞(one context word)的情況下來預測一個目標單詞(one target word)的。(注:對於初學神經網絡的讀者,建議先看完附錄A之后,在回到此處閱讀下文)。
如圖1描述的就是One-word context定義之下的神經網絡模型。這里我們假設文本詞匯量的大小為V,隱藏層的大小為N,相鄰層的神經元是全連接的。輸入層是一個用one-hot方式編碼的單詞向量x=(x1,...,xV)x=(x1,...,xV),其中只有一個xixi為1,其余均為0。 從輸入層到 隱藏層的權重值可以用一個V×NV×N維的矩陣WW來表示,即 W=⎛⎝⎜⎜⎜ω11ω21...ωV1ω12ω22...ωV2............ω1Nω2N...ωVN⎞⎠⎟⎟⎟ W=(ω11ω12...ω1Nω21ω22...ω2N............ωV1ωV2...ωVN) 其中WW矩陣的每一行代表的是一個與輸入層相關的單詞的N維向量表示形式vωvω。那么假設我們給定了一個輸入單詞(a context),其單詞向量的第k個元素xk=1xk=1,其余均為0,則有
h=WTx=WT(k,∙)xk=vTωI(1)(1)h=WTx=W(k,∙)Txk=vωIT 從(1)式我們可以看出,hh向量完全是從WW矩陣第k行復制過來的(同vωIvωI均為N維向量)。vωIvωI即為輸入單詞ωIωI的一種向量表示(其實就是輸入向量,我們后面會提到)。
分析完輸入層到隱藏層之后,我們再看隱藏層到輸出層,同樣連接權重用一個新的N × V矩陣W′={ω′ij}W′={ωij′}來表示如下:
W′=⎛⎝⎜⎜⎜⎜ω′11ω′21...ω′N1ω′12ω′22...ω′N2............ω′1Vω′2V...ω′NV⎞⎠⎟⎟⎟⎟ W′=(ω11′ω12′...ω1V′ω21′ω22′...ω2V′............ωN1′ωN2′...ωNV′) 通過這些權重,我們可以為詞表中的每一個單詞都計算出一個得分μjμj
μj=v′ωjTh(2)(2)μj=vωj′Th 其中,v′ωjvωj′即為矩陣W′W′的第j列向量(也是N維向量,其實就是單詞w的輸出向量,我們后面會提到)。
經過以上討論之后,我們可以使用一種對數-線性分類模型softmax函數來計算單詞的后驗分布(是多項式分布)
p(ωj|ωI)=yj=exp(μj)∑Vj′=1exp(μj′)(3)(3)p(ωj|ωI)=yj=exp(μj)∑j′=1Vexp(μj′) 其中, yjyj表示輸出層第j個神經單元的輸出值。將(1)式和(2)式代入(3)式我們可以得到:
p(ωj|ωI)=exp(v′ωjTvωI)∑Vj′=1exp(v′ωjTvωI)(4)(4)p(ωj|ωI)=exp(vωj′TvωI)∑j′=1Vexp(vωj′TvωI) 注意:正如前文所述,vωvω和v′ωvω′是單詞的兩種向量表示形式。其中vωvω實際上是權重矩陣WW(input->hidden)的某一行向量,v′ωvω′則是權重矩陣W′W′(hidden->output)的某一列向量。我們將vωvω和v′ωvω′分別稱為“輸入向量(input vector)”和“輸出向量(output vector)”(二者均為N維向量)。
Update equation for hidden→output weights
接下來讓我們推到權重矩陣的更新公式,盡管在實際的計算過程中這樣做是不切實際的(我們在之后再談)。 在我們推導hidden→output權重的更新公式的過程中,需要用到神經網絡的反向傳播算法,對這部分內容不熟悉的讀者可以參考附錄A的內容。 由以上描述可知,該模型訓練的目標就是求公式(4)的最大值。公式(4)代表的就是給定上下文信息(這里為一個單詞ωIωI)以及其權重矩陣的情況下,預測其實際輸出單詞(即上下文信息的中心詞ωOωO)的條件概率。
maxp(ωO|ωI)=maxyj∗=maxlogyj∗=μj∗−log∑j′=1Vexp(μj′):=−E(5)(6)(7) (5)maxp(ωO|ωI)=maxyj∗(6)=maxlogyj∗(7)=μj∗−log∑j′=1Vexp(μj′):=−E
其中,E=−logp(ωO|ωI)E=−logp(ωO|ωI) 為該模型的損失函數(我們需要找出它的最小值),μ∗jμj∗的表示方式由公式(2)而來,j∗j∗則為實際輸出單詞的索引下標。我們注意到該損失函數可以理解為一種特殊情形下的交叉熵計算。 現在我們開始推導從隱藏層到輸出層的權重矩陣在模型訓練過程中的參數更新公式。首先我們對損失函數E=−logp(ωO|ωI)E=−logp(ωO|ωI) 求關於得分μjμj的偏導數,得結果為:
∂E∂μj=yj−tj:=ej(8)(8)∂E∂μj=yj−tj:=ej 其中,tj=1(j=j∗)tj=1(j=j∗) ,即當且僅當輸出層的第j個神經單元為真實的輸出單詞時 tjtj的取值為1。接下來我們根據鏈式法則求出損失函數EE關於矩陣W′W′元素 ω′ijωij′的偏導數為:
∂E∂ω′ij=∂E∂μj⋅∂μj∂ω′ij=ej⋅hi(9)(9)∂E∂ωij′=∂E∂μj⋅∂μj∂ωij′=ej⋅hi 因此,采用隨機梯度下降算法(SGD),我們最終得到了隱藏層到輸出層(hidden→→output)權重的更新公式如下:
ω′ij(new)=ω′ij(old)−η⋅ej⋅hi(10) (10)ωij′(new)=ωij′(old)−η⋅ej⋅hi
or v′ωj(new)=v′ωj(old)−η⋅ej⋅h for j=1,2,...V.(11) (11)vωj′(new)=vωj′(old)−η⋅ej⋅h for j=1,2,...V. 其中, η>0η>0為參數更新的學習速率;ej=yj−tjej=yj−tj;hihi 為隱藏層的第i個神經單元;v′ωjvωj′為ωjωj的輸出向量。
由公式(11)我們可以看出:在更新權重參數的過程中,我們需要檢查詞匯表中的每一個單詞,計算出它的輸出概率yjyj,並與期望輸出tjtj(取值只能為0或者1)進行比較。比較過程如下:
1)如果yj>tjyj>tj(“overestimating”),那么就從向量v′ωjvωj′中減去隱藏向量hh的一部分(例如vωIvωI),這樣向量v′ωjvωj′就會與向量vωIvωI相差更遠。 2)如果yj<tjyj<tj(“underestimating”,這種情況只有在tj=1tj=1時,才會發生,此時ωj=ωOωj=ωO),則將隱藏向量hh的一部分加入v′ωOvωO′,使得v′ωOvωO′與vωIvωI更接近。 3)如果yjyj與tjtj非常接近,則此時ej=yj−tjej=yj−tj由於(公式(8))非常接近於0,故更新參數基本上沒什么變化。
這里需要再次提醒的是:vωvω和v′ωvω′是單詞ωω的兩種不同的向量表示形式。
Update equation for input→hidden weights
在介紹完hidden→→output的權重矩陣更新公式之后,我們接着介紹input→→hidden的權重矩陣WW的更新過程。我們繼續對損失函數EE求關於隱藏層hihi 的偏導數,得:
∂E∂hi=∑Vj=1∂E∂μj⋅∂μj∂hi=∑Vj=1ej⋅ω′ij:=EHi(12)(12)∂E∂hi=∑j=1V∂E∂μj⋅∂μj∂hi=∑j=1Vej⋅ωij′:=EHi 其中hihi為隱藏層第i個神經單元的輸出;μjμj在公式(2)中已經定義,表示輸出層第j個神經單元的輸入;ej=yj−tjej=yj−tj為輸出層第j個單詞的預測誤差。因此EH應該是一個N維向量,它的每一個元素代表的是詞匯表中的每個單詞的預測誤差ejej與ω′ijωij′在j=1到V上的乘積之和。
接下來,我們需要求出損失函數EE關於權重矩陣WW的偏導數。首先,分解公式(1),我們知道隱藏層激活單元的輸出hihi是輸入層xx與權重的線性組合,即
hi=∑Vk=1xk⋅ωki(13)(13)hi=∑k=1Vxk⋅ωki 因此對於權重矩陣WW的每一個元素,我們求關於EE的偏導數,得到:
∂E∂ωki=∂E∂hi⋅∂hi∂ωki=EHi⋅xk(14)(14)∂E∂ωki=∂E∂hi⋅∂hi∂ωki=EHi⋅xk 因此我們利用張量乘積的方式,便可得到:
∂E∂W=x⊗EH=xEHT(15)(15)∂E∂W=x⊗EH=xEHT 我們再次得到了一個N×VN×V的矩陣。由於xx向量只有一個非0元素,因此∂E∂W∂E∂W 只有一行是N維非0向量EHTEHT,因此矩陣WW的更新公式為:
vωI(new)=vωI(old)−η⋅EHT(16)(16)vωI(new)=vωI(old)−η⋅EHT 其中vωIvωI是矩陣WW的其中一行,是唯一的上下文單詞(context word)的“輸入向量”,也是矩陣WW唯一的導數非0的行向量。 除了vωIvωI以外,矩陣WW的其他行向量在參數更新迭代過程中都會保持不變(因為其導數為0)。
與矩陣W′W′的更新過程相似,對於公式(16),我們分析如下:
1)如果過高地估計了某個單詞ωjωj作為最終輸出單詞的概率(即:yj>tjyj>tj),則上下文單詞ωIωI(context word )的輸入向量與單詞ωjωj的輸出向量在更新的過程中會相差越來越大。
2)如果相反,某個單詞ωjωj作為最終輸出單詞的概率被低估(即:yj<tjyj<tj),則單詞ωIωI的輸入向量與單詞ωjωj的輸出向量在更新過程中會越來越接近。
3)如果對於單詞ωIωI的概率預測是准確的,則對於單詞的輸入向量在更新過程中幾乎保持不變。
因此,上下文單詞ωIωI(context word )的輸入向量的更新取決於詞匯表中所有單詞的預測誤差。預測誤差越大,則該單詞對於上下文單詞的輸入向量的更新過程影響越大。
在介紹完One-word context的CBOW模型之后,我們接着介紹multi-word context下的CBOW模型。
1.2 Multi-word context
根據字面意思我們就可以看出,基於multi-word context的CBOW模型就是利用多個上下文單詞來推測中心單詞target word的一種模型。其結構如圖2所示:
其隱藏層的輸出值的計算過程為:首先將輸入的上下文單詞(context words)的向量疊加起來並取其平均值,接着與input→→hidden的權重矩陣相乘,作為最終的結果,公式如下:
h=1CWT(x1+x2+⋯+xC)=1C(vω1+vω2+⋯+vωC)T(17)(18) (17)h=1CWT(x1+x2+⋯+xC)(18)=1C(vω1+vω2+⋯+vωC)T 其中CC為上下文單詞的個數,ω1,...,ωCω1,...,ωC為上下文單詞,vωvω為單詞ωω的輸入向量。損失函數為:
E=−logp(ωO|ωI,1,...,ωI,C)=−μj∗+log∑j′=1Vexp(μj′)=−v′ωOT⋅h+log∑j′=1Vexp(v′ωjT⋅h)(19)(20)(21) (19)E=−logp(ωO|ωI,1,...,ωI,C)(20)=−μj∗+log∑j′=1Vexp(μj′)(21)=−vωO′T⋅h+log∑j′=1Vexp(vωj′T⋅h) 同樣,由hidden→→output的權重更新公式與one-word-context模型下的一模一樣,即類似於公式(11),我們直接寫在下面:
v′ωj(new)=v′ωj(old)−η⋅ej⋅h for j=1,2,...,V(22)(22)vωj′(new)=vωj′(old)−η⋅ej⋅h for j=1,2,...,V
由input→→hidden 的權重矩陣更新公式與公式(16)類似,只不過現在我們需要對每一個上下文單詞ωI,cωI,c都執行如下更新公式:
vωI,c(new)=vωI,c(old)−1C⋅η⋅EHT for c=1,2,...,C.(23)(23)vωI,c(new)=vωI,c(old)−1C⋅η⋅EHT for c=1,2,...,C. 其中vωI,cvωI,c為上下文context中第c 個單詞的輸入向量;ηη為正學習速率;EH=∂E∂hiEH=∂E∂hi由公式(12)給出。
2 Skip-Gram Model
與CBOW模型正好相反,Skip-Gram模型是根據中心單詞(target word)來預測其上上下文信息(context words)。如圖3所示,為Skip-Gram模型的結構示意圖。
我們仍然使用vωIvωI來表示輸入層上唯一的那個單詞的輸入向量,因此,我們對於隱藏層的輸出值hh的計算公式與第一節公式(1)相同,表示如下:
h=WT(k,∙):=vωI(24)(24)h=W(k,∙)T:=vωI 公式(24)顯示:hh向量其實就是input->hidden權重矩陣WW的某一行結合輸入單詞ωIωI的向量拷貝。在輸出層,與CBOW模型的輸出為單個多項式分布不同的是,SG模型在輸出層輸出了C個多項式分布。每個輸出都使用相同的hidden->output矩陣計算:
p(ωc,j=ωO,c|ωI)=yc,j=exp(μc,j)∑Vj′=1exp(μ′j)(25)(25)p(ωc,j=ωO,c|ωI)=yc,j=exp(μc,j)∑j′=1Vexp(μj′) 其中,ωc,jωc,j表示輸出層的第c個panel的第j個單詞(何為panel?就是輸出層的表示每個上下文單詞的神經元的組合,圖中一種有C個context words,所以總共有C個panel);ωO,cωO,c實際上表示的是輸出上下文單詞(output context words)的第c個單詞;ωIωI是唯一的輸入單詞;yc,jyc,j為輸出層的第c個panel上的第j個神經單元的概率輸出值;μc,jμc,j表示的是輸出層第c個panel的第j個神經元的輸入值;由於輸出層的所有panels共享同一權重矩陣W′W′,因此:
μc,j=μj=v′ωjT⋅h, for c=1,2,...,C(26)(26)μc,j=μj=vωj′T⋅h, for c=1,2,...,C 其中,v′ωjvωj′為詞匯表第j個單詞ωjωj的輸出向量;同樣,它也是取自於hidden→→output權重矩陣W′W′的一列。
SG模型參數更新公式的推導過程與one-word-context 模型的推導過程大體上一樣。這里我們將損失函數變為:
E=−logp(ωO,1,ωO,2,...,ωO,C|ωI)=−log∏c=1Cexp(μc,j∗c)∑Vj′=1exp(μj′)=−∑c=1Cμj∗c+C⋅log∑j′=1Vexp(μj′)(27)(28)(29) (27)E=−logp(ωO,1,ωO,2,...,ωO,C|ωI)(28)=−log∏c=1Cexp(μc,jc∗)∑j′=1Vexp(μj′)(29)=−∑c=1Cμjc∗+C⋅log∑j′=1Vexp(μj′) 其中,j∗cjc∗為第c個輸出層輸出的上下文單詞在詞匯表中的真實索引。 在得到損失函數EE之后,我們對輸出層的每一個panel上的所有激活單元的輸入值μc,jμc,j,均求其關於EE的偏導數,得:
∂E∂μc,j=yc,j−tc,j:=ec,j(30)(30)∂E∂μc,j=yc,j−tc,j:=ec,j 其中ec,jec,j為輸出層神經元的預測誤差,與公式(8)類似。為了簡化符號,我們定義一個VV維的向量EI={EI1,...,EIV}EI={EI1,...,EIV}作為所有上下文單詞的預測誤差之和,EIjEIj用公式定義如下:
EIj=∑Cc=1ec,j(31)(31)EIj=∑c=1Cec,j 接下來,我們計算hidden->output權重矩陣W′W′關於EE的偏導數為:
∂E∂ω′ij=∑Cc=1∂E∂μc,j⋅∂μc,j∂ω′ij=EIj⋅hi(32)(32)∂E∂ωij′=∑c=1C∂E∂μc,j⋅∂μc,j∂ωij′=EIj⋅hi 這樣,我們就得到了hidden→→output權重矩陣W′W′的參數更新公式為:
ω′ij(new)=ω′ij(old)−η⋅EIj⋅hi(33)(33)ωij′(new)=ωij′(old)−η⋅EIj⋅hi 或者
v′ωj(new)=v′ωj(old)−η⋅EIj⋅h for j=1,2,...,V.(34)(34)vωj′(new)=vωj′(old)−η⋅EIj⋅h for j=1,2,...,V. 上述參數更新公式的直觀概念理解與上文公式(11)無二,除了一點就是:輸出層的預測誤差的計算是基於多個上下文單詞context words,而不是單個目標單詞 target word;需注意的是對於每一個訓練樣本,我們都要利用該參數更新公式來更新hidden→→output權重矩陣W′W′的每個元素。
同樣,對於input→→hidden權重矩陣WW的參數更新公式的推導過程,除了考慮要將預測誤差ejej替換為EIjEIj外,其他也與上文公式(12)到公式(16)類似。這里我們直接給出更新公式:
vωI(new)=vωI(old)−η⋅EHT(35)(35)vωI(new)=vωI(old)−η⋅EHT 其中,EHEH是一個NN維向量,組成該向量的每一個元素可以用如下公式表示: EHi=∑Vj=1EIj⋅ω′ij(36)(36)EHi=∑j=1VEIj⋅ωij′ 公式(36)的直觀理解與公式(16)類似,這里不作描述。
3 Optimizing Computational Efficiency
總結以上的模型介紹,我們發現所有模型的詞匯表中的每個單詞都存在兩個向量表示形式:輸入向量vωvω與輸出向量v′ωvω′.對於輸入向量的參數學習成本並不高,但對於輸出向量的學習成本代價是非常昂貴的。根據更新公式(22)和(23),我們可以發現,為了更新輸出向量v′ωvω′,對於每一個訓練樣例,我們必須迭代遍歷詞匯表中所有的單詞ωjωj,計算出它們的輸入值μjμj、概率預測值yjyj(或者SG模型中的yc,jyc,j),預測誤差ejej(或者SG模型的EIjEIj)。最終使用預測誤差更新它們的輸出向量v′jvj′. 顯然,對於每一個訓練樣例都要對所有單詞計算上述各值,其成本是昂貴的。特別是對於大型的詞匯表,這種計算方式是不切實際的。因此為了解決這個問題,直觀的方式是限制必須要更新的訓練樣例的輸出向量的數目。一種有效的實現方式就是:hierarchical softmax(分層softmax),另一種實現通過采樣的方式解決,我們在下個章節來討論。 這兩種方法都是通過只優化輸出向量更新的計算過程來實現的。在我們的公式推導過程中,我們關心的有三個值:(1)EE,新的目標函數;(2)∂E∂v′ω∂E∂vω′,新的關於輸出向量的更新公式;(3)∂E∂h∂E∂h,為了更新輸入向量反向傳播的預測誤差的加權和。
3.1 Hierarchical Softmax
Hierarchical softmax 是一種有效的計算 softmax 的方式。該模型使用一棵二叉樹來表示詞匯表中的所有單詞。所有的VV個單詞都在二叉樹的葉節點上。非葉子節點一共有V−1V−1個。對於每個葉子節點,從根節點root到該葉子節點只有一條路徑;這條路徑用來評估用該葉子節點代表該葉子節點上單詞的概率值。二叉樹的結構如圖4所示:
Figure 4: An example binary tree for the hierarchical softmax model. 其中白色的樹節點代表的是詞匯表中的單詞,灰色節點為內部節點。圖中高亮顯示的是一條從根節點到ω2ω2的路徑。該條路徑的長度為L(ω2)=4L(ω2)=4。n(ω,j)n(ω,j)表示從根節點到單詞ωω 的路徑上的第j個節點。
在hierarchical softmax模型中,所有的詞匯單詞沒有輸出向量表示形式。不同的是,二叉樹的每一個內部節點都有一個輸出向量v′n(ω,j)vn(ω,j)′。因此一個單詞作為輸出單詞的概率計算公式定義如下:
p(ω=ωO)=∏L(ω)−1j=1σ([[n(ω,j+1)=ch(n(ω,j))]]⋅v′n(w,j)Th)(37)(37)p(ω=ωO)=∏j=1L(ω)−1σ([[n(ω,j+1)=ch(n(ω,j))]]⋅vn(w,j)′Th) 其中,ch(n)ch(n)為節點nn的左孩子節點;v′n(ω,j)vn(ω,j)′是內部節點n(ω,j)n(ω,j)的向量表示(輸出向量);hh是隱藏層的輸出值(在SG模型中,h=vωIh=vωI;而在CBOW模型中,h=1C∑Cc=1vωch=1C∑c=1Cvωc);[[x]][[x]]是一種特殊的函數定義如下:
[[x]]={1−1,if x is trueotherwise(38) (38)[[x]]={1if x is true−1,otherwise 接下來,我們通過一個直觀地例子來理解公式(37)。如圖4所示,假定我們需要計算單詞ω2ω2作為輸出單詞的概率。我們將這個概率定義為從根節點開始隨機游走到葉節點ω2ω2的概率。則在每一個內部節點(包括根節點),我們都需要確定其路徑指向左孩子節點還是右孩子節點的概率。我們將經過內部節點的路徑指向左孩子的概率定義為:
p(n,left)=σ(v′nT⋅h)(39)(39)p(n,left)=σ(vn′T⋅h) 我們可以看出,公式(39)的值取決於內部節點的向量表示v′nvn′和隱藏層的輸出值hh(hh的值取決於輸入單詞的向量表示)。顯然,內部節點的路徑指向右孩子的概率則可以表示為:
p(n,right)=1−σ(v′nT⋅h)=σ(−v′nT⋅h)(40)(40)p(n,right)=1−σ(vn′T⋅h)=σ(−vn′T⋅h) 順着圖4中從根節點到單詞ω2ω2節點的路徑,我們可以計算出ω2ω2作為輸出單詞的概率為:
p(ω2=ωO)=p(n(ω2,1),left)⋅p(n(ω2,2),left)⋅p(n(ω2,3),right)=σ(v′n(ω2,1)Th)⋅σ(v′n(ω2,2)Th)⋅σ(−v′n(ω2,3)Th)⋅(41)(42) (41)p(ω2=ωO)=p(n(ω2,1),left)⋅p(n(ω2,2),left)⋅p(n(ω2,3),right)(42)=σ(vn(ω2,1)′Th)⋅σ(vn(ω2,2)′Th)⋅σ(−vn(ω2,3)′Th)⋅ 不難證明 ∑Vi=1p(ωi=ωO)=1(43)(43)∑i=1Vp(ωi=ωO)=1 現在我們開始推導內部節點的向量表示形式的參數更新公式。為了簡化步驟,我們首先考慮單個上下文單詞(one-word context)的模型。 為了簡化公式,我們定義子公式的簡化符號如下:
[[⋅]]:=[[n(ω,j+1)=ch(n(ω,j))]](44)(44)[[⋅]]:=[[n(ω,j+1)=ch(n(ω,j))]] v′j:=v′nω,j(45)(45)vj′:=vnω,j′ 則,給定一個訓練樣例,其誤差函數我們可以定義如下:
E=−logp(ω=ωO|ωI)=−∑L(ω)−1j=1logσ([[⋅]]v′jTh)(46)(46)E=−logp(ω=ωO|ωI)=−∑j=1L(ω)−1logσ([[⋅]]vj′Th) 對於誤差函數EE,我們取其關於v′jhvj′h的偏導數,得:
∂E∂v′jh=(σ([[⋅]]v′jTh)−1)[[⋅]]={σ(v′jTh)−1,σ(v′jTh),[[.]]=1[[.]]=-1=σ(v′jTh)−tj(47)(48)(49) (47)∂E∂vj′h=(σ([[⋅]]vj′Th)−1)[[⋅]](48)={σ(vj′Th)−1,[[.]]=1σ(vj′Th),[[.]]=-1(49)=σ(vj′Th)−tj 其中tj=1tj=1(如果[[⋅]]=1[[⋅]]=1)或者tj=0tj=0(如果[[⋅]]=−1[[⋅]]=−1)。
緊接着我們計算內部節點n(ω,j)n(ω,j)的向量表示v′jvj′關於函數EE的偏導數,得:
∂E∂v′j=∂E∂v′jh⋅∂v′jh∂v′j=(σ(v′jTh)−tj)⋅h(50)(50)∂E∂vj′=∂E∂vj′h⋅∂vj′h∂vj′=(σ(vj′Th)−tj)⋅h 因此,更新公式為:
v′j(new)=v′j(old)−η(σ(v′jTh)−tj)⋅h , for j=1,2,...,L(ω)−1(51)(51)vj′(new)=vj′(old)−η(σ(vj′Th)−tj)⋅h , for j=1,2,...,L(ω)−1 我們可以將σ(v′jTh)−tjσ(vj′Th)−tj理解為內部節點n(ω,j)n(ω,j)的預測誤差。每一個內部節點的“任務”就是預測其隨機游走路徑是指向左孩子節點還是指向右孩子節點。tj=1tj=1意味着節點n(ω,j)n(ω,j)的路徑指向左孩子節點;tj=0tj=0則表示指向右孩子節點。σ(v′jTh)σ(vj′Th)是預測結果。對於一個訓練實例,如果內部節點的預測值非常接近於真實值,則它的向量表示v′jvj′的更新變化很小;否則v′jvj′向量指向一個適當的方向是的該實例的預測誤差逐漸減小。以上更新公式既能應用於CBOW模型,又能應用於SG模型。當在SG模型中使用該更新公式時,我們需要對C個output context words的每一個單詞都重復此更新過程。
為了使用反向傳播該預測誤差來學習訓練input→→hidden的權重,我們對誤差函數EE求關於隱藏層輸出值的偏導數,如下:
∂E∂h=∑j=1L(ω)−1∂E∂v′jh⋅∂v′jh∂h=∑j=1L(ω)−1(σ(v′jTh)−tj)⋅v′j:=EH(52)(53)(54) (52)∂E∂h=∑j=1L(ω)−1∂E∂vj′h⋅∂vj′h∂h(53)=∑j=1L(ω)−1(σ(vj′Th)−tj)⋅vj′(54):=EH 接下來我們根據公式(23)便可以獲得CBOW模型輸入向量的更新公式。對於SG模型,我們需要計算上下文信息中的每個單詞的EHEH值,並將EH值的和帶入公式(35),就能夠得到輸入向量的更新公式。
從以上更新公式我們可以看出:經過改進的模型Hierarchical softmax的每個訓練樣例的每個上下文單詞的計算復雜度從O(V)O(V)降為O(log(V))O(log(V))級別。但是模型的參數幾乎沒有什么改變(內部節點對應V-1維向量,而原始模型的單詞的輸出向量維數為V)。
3.2 Negative Sampling
Negative Sampling模型的思想比hierarchical softmax模型更直接了當,即:在每次迭代的過程中,有大量的輸出向量需要更新,為了解決這一困難,negative sampling提出了只更新其中一部分輸出向量的解決方案。 顯然,最終需要輸出的上下文單詞(正樣本)在采樣的過程中應該保留下來並更新,同時我們需要采集一些單詞作為負樣本(因此稱為“negative sampling”)。在采樣的過程中,我們可以任意選擇一種概率分布。我們將這種概率分布稱為“噪聲分布”(the noise distribution),用Pn(ω)Pn(ω)來表示。我們可以根據經驗選擇一種較好的分布。
在 word2vec中,我們無需使用一種能夠產生良好定義的后驗多項式分布的負采樣形式,本文作者證明了使用下面簡單的訓練目標函數能夠產生可靠的、高質量的 word embeddings:
E=−logσ(v′ωOTh)−∑ωj∈Wneglogσ(−v′ωjTh)(55)(55)E=−logσ(vωO′Th)−∑ωj∈Wneglogσ(−vωj′Th) 其中ωOωO是輸出單詞(the positive sample),v′ωOvωO′是輸出向量;hh是隱藏層的輸出值:在CBOW模型中h=1C∑Cc=1vωch=1C∑c=1Cvωc,在SG模型中h=vωIh=vωI;Wneg={ωj|j=1,...,K}Wneg={ωj|j=1,...,K}是基於分布Pn(ω)Pn(ω)采樣的一系列單詞。 為了獲得negative sampling模型的詞向量更新公式,我們首先計算E關於輸出單元ωjωj的輸入v′ωjThvωj′Th的偏導數:
∂E∂v′ωjTh={σ(v′ωjTh)−1,σ(v′ωjTh),if ωj=ωOif ωj∈Wneg =σ(v′ωjTh)−tj(56)(57) (56)∂E∂vωj′Th={σ(vωj′Th)−1,if ωj=ωOσ(vωj′Th),if ωj∈Wneg(57) =σ(vωj′Th)−tj 其中,當ωjωj是一個正樣本時,tj=1tj=1;否則tj=0tj=0。接下來我們計算E關於單詞ωjωj的輸出向量的偏導數:
∂E∂v′ωj=∂E∂v′ωjTh⋅∂v′ωjTh∂v′ωj=(σ(v′ωjTh)−tj)h(58)(58)∂E∂vωj′=∂E∂vωj′Th⋅∂vωj′Th∂vωj′=(σ(vωj′Th)−tj)h 因此輸出向量的更新公式為:
v′ωj(new)=v′ωj(old)−η(σ(v′ωjTh)−tj)h(59)(59)vωj′(new)=vωj′(old)−η(σ(vωj′Th)−tj)h negative sampling的關鍵就是公式(59)的更新過程只應用於詞匯表的子集{ωj|ωj∈{ωO}⋃Wneg}{ωj|ωj∈{ωO}⋃Wneg},而並非應用於整個詞匯表。 以上更新公式(59)的直觀理解與公式(11)類似。公式(59)對兩種應用模型CBOW和SG都適用。對於SG模型,我們每次更新一個上下文單詞。
接着利用反向傳播機制,計算E關於隱藏層輸出hh的偏導數:
∂E∂h=∑ωj∈{ωO}⋃Wneg∂E∂v′ωjTh⋅∂v′ωjTh∂h=∑ωj∈{ωO}⋃Wneg(σ(v′ωjTh)−tj)v′ωj:=EH(60)(61) (60)∂E∂h=∑ωj∈{ωO}⋃Wneg∂E∂vωj′Th⋅∂vωj′Th∂h(61)=∑ωj∈{ωO}⋃Wneg(σ(vωj′Th)−tj)vωj′:=EH 將EH代入公式(23),我們就可以得到CBOW模型關於輸入向量的更新公式;對於SG模型,我們需要計算出每個上下文單詞的EH值,將EH值的和代入公式(35)就能夠得到其輸入向量的更新公式。 --------------------- 作者:lanyu_01 來源:CSDN 原文:https://blog.csdn.net/lanyu_01/article/details/80097350 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
