神經網路語言模型中,詞向量為什麼可以隨著模型的迭代而改變?

echoKangYL發表於2019-03-12

在神經網路語言模型中,通常我們認為詞向量是模型的輸入。

對此不太熟悉的朋友可以參考部落格:自然語言處理NLP(3)——神經網路語言模型、詞向量

神經網路語言模型的架構是這個樣子的:
神經網路語言模型
然而,在模型訓練的過程中,輸入層的詞向量可以隨著模型的迭代而改變,就像調整上圖中的權重:W,U,HW,U,H一樣。

可能很多人有同樣的疑問:詞向量作為模型的輸入,怎麼能改變呢?
朋友們可以先仔細思考一下這個問題~

(強行分割線……)

實際上完全不矛盾,因為神經網路語言模型真正的輸入根本就不是詞向量。

其實,神經網路語言模型真正的輸入是各個詞的one-hot向量,上圖中的look-up表 CC 將其轉化為詞向量之後才輸入網路中。而真正的輸入:one-hot向量是完全不變的。

如果還是有些疑惑的話,我們來舉個例子:

假設詞彙表中有20w個詞,詞向量的維度為100維。
簡單起見,我們只將一個詞 ww 輸入網路。

很明顯,詞 ww 可以表示為一個1*20w的one-hot向量,其中只有一位值為1,其他維度的值均為0。
經過了一個大小為20w*100的look-up表之後,ww 被表示成了1*100的向量——也就是我們通常所說的詞向量。
在模型訓練過程中,可以隨著模型迭代而逐漸變化的是這個100維的詞向量,更深一步地說,逐漸變化的其實是這個大小為20w*100的look-up表。
其實,在這個描述中,look-up表和網路中的權重在意義上完全相同!

推廣到多個詞,過程完全相同,只是在將各個詞轉化為詞向量之後需要進行拼接或者其他操作即可。

理解了上面的過程,對這個問題就有了答案:
在模型訓練過程中,真正的輸入是表示各個詞的one-hot向量,look-up表類似一個權重矩陣,將one-hot向量轉化為詞向量,再進行後續操作。可以將look-up表看作一個特殊的權值矩陣,在模型迭代過程中,表中的權值可以變化,以更好地擬合模型輸出。

如果本文中某些表述或理解有誤,歡迎各位大神批評指正。

謝謝!

相關文章