word2vec參數學習解釋
摘 要
近兩年來由Mikolov等人提出的word2vec模型和應用引起了社會的極大的關注。使用word2vec模型學習的單詞的向量表示已經被證明能夠攜帶語義信息,且在各種NLP任務中都是有用的。越來越多的研究人員希望嘗試使用word2vec,但我注意到對於word2vec參數學習過程目前還缺乏一個全面解釋的資料,因此限制了許多神經網絡方面瞭解不深的人去理解word2vec的工作原理。
本文提供了word2vec模型的參數更新方程的詳細推導和解釋,包括原始的連續詞袋(CBOW)模型和skip-gram模型,以及一些高級技巧--分層的soft-max和負抽樣。在附錄中,回顧了神經元網絡模型和反向傳播的基礎知識
1 連續詞袋(CBOW)模型
1.1 One-word context (只考慮目標單詞前面一個單詞的情況)
我們從Mikolov等人最簡單版本的連續詞袋模型(CBOW)開始介紹。連續詞袋模型做出這樣的假設一個單詞出現的可能性與其上下文的單詞組成有關,這意味着對於CBOW模型我們可以通過給定的上下文單詞環境來預測一個目標單詞,就像一個二元模型。
圖一爲簡化的通過上下文來定義詞向量的網絡模型,我們設置詞彙量的大小爲V,隱藏層的大小爲N,相鄰層上的節點完全連接。輸入向量是一個one-hot編碼的向量,對於給定的輸入上下文單詞,one-hot編碼中每個單詞的向量表示爲,其中只有一個節點爲1,而所有其他節點爲0。
輸入層和輸出層之間的權重可以由的矩陣表示。
其中矩陣的每一行代表的是一個與輸入層相關的單詞的維向量表示形式 。那麼假設我們給定了一個輸入單詞,其單詞向量的第個元素,其餘,則有:
(1)
向量完全是由矩陣第行計算出來的 (因爲除外,其餘都爲0),是輸入字的向量表示。
分析完輸入層到隱藏層之後,我們再看隱藏層到輸出層,有一個新的的權重矩陣,它也是一個矩陣。使用這些權重,我們可以計算詞彙表中每個單詞的分數:
(2)
其中是矩陣的第列,然後我們使用一個滿足多項式分佈的對數線性分類模型soft-max來獲取單詞的後驗概率。
(3)
其中是輸出層中節點的輸出,我們將式子(1)和(2)代入式子(3),得到:
(4)
注意和是單詞的兩種表示方式,是矩陣的一行,是由輸入層→隱藏層的權值矩陣。是矩陣的一列,是由隱藏層→輸出層的權值矩陣。在之後的分析中,我們默認將稱爲單詞的“input vector”,將稱爲單詞的“output vector”。
更新隱藏層→輸出層權重的等式
現在我們開始推到CBOW模型的權值更新方程。雖然實際的計算方式有點不切實際(之後解釋),但是這不妨礙我們推到這個方程來增加我們對這個原始模型的理解。推到過程需要一些神經網絡的知識基礎:有關反向傳播基礎知識的綜述,請參閱附錄A。
由上一階段的描述可知,現在訓練的目標(這節只針對一個單詞)就是求公式(4)的最大值。其意在當我們給定了上下文信息以及其權值矩陣的情況下,在詞彙表中計算每個詞成爲中心單詞的概率,從而預測目標單詞。
這裏我們設置一個爲我們的損失函數(一個最小化的目標),是目標單詞在輸出層的索引。可以發現,對於這個損失函數的計算,我們可以將其理解爲一種特殊情況下對2個概率分佈的交叉熵測量。
現在我們來推到一下隱藏層到輸出層之前的權重更新方程,首選我們對損失函數求關於的偏導,這樣得:
其中,即當且僅當輸出層的第個單詞爲目標單詞時,的值爲1,其餘情況都爲0。可以看出這個導數實質上是輸出層的預測誤差。
接下來我們通過鏈式法則來求出損失函數在上的偏導, 並通過此來計算隱藏層到輸出層的梯度。
之後我們使用隨機梯度下降方法,得到最終的隱藏層→輸出層的權重更新方程
或者說:
其中爲梯度下降算法的學習率() ,,其中是隱藏層的第個神經元,是輸出單詞的向量表示。可以看出,通過對比輸出的可能性和期望的輸出(取值只能爲0或者1)來更新權重意味着我們需要遍歷詞彙表中所有單詞。
這個過程中:
當 ('高估')的時候,,那麼會從上減去隱藏向量的一部分,這樣向量就與向量相差更遠;
當 ('低估')的時候,,那麼會從上加上隱藏向量的一部分,這樣向量就與向量相差更近;
當 ('相近')的時候,,那麼會從的值在更新過程基本不會發生變化;
更新隱藏層→輸出層權重的等式
在介紹完hidden→output的權重矩陣更新公式之後,我們接着介紹input→hidden的權重矩陣的更新過程。在上面小節中我們解釋了損失函數,現在我們對在上求偏導:
(12)
其中爲隱藏層上第個神經元的輸出;,表示輸出層第j個神經單元的輸入;爲輸出層第j個單詞的預測誤差。所以我們設定一個維的向量,它的每一個元素代表的是詞彙表中的每個單詞的預測誤差與詞彙表中每個輸出單詞的向量的乘積之和。
接下來,我們需要求出損失函數關於權重矩陣的偏導數。首先,我們知道隱藏層激活單元的輸出是輸入層的值與其權重的線性組合,由此分解式子(1)我們可以得到:
(13)
對於權重矩陣的每一個元素,通過式(12)和式(13),我們可以求得其在損失函數上的偏導:
(14)
以線性代數的角度來說:
(15)
通過式(15)我們得到一個的矩陣,由於只有一個非零值(one-hot),所以的結果也只有一行是非零的,非零N維向量就是那一行的值,由此我們得到權重矩陣的更新方程:
其中是矩陣中輸入單詞(即one-hot編碼中非零的哪行對應的單詞)的輸入向量。我們不用去關心除外的其他行向量,因爲其的值爲0,由式(14)可以看出其偏導也爲0。