Mark Chang's Blog

Machine Learning, Deep Learning and Python

Hierarchical Probabilistic Neural Network Language Model (Hierarchical Softmax)

Introduction

將類神經網路應用在自然語言處理領域的模型有Neural Probabilistic Language Model(NPLM),但在實際應用時,運算瓶頸在於 output layer 的神經元個數,等同於總字彙量

每訓練一個字時,要讓 output layer 在那個字所對應的神經元輸出值為 ,而其他 個神經元的輸出為 , 這樣總共要計算 次,會使得訓練變得沒效率。

若要減少於 output layer 的訓練時間,可以把 output layer 的字作分類階層,先判別輸出的字是屬於哪類,再判斷其子類別,最後再判斷是哪個字。

Hierarchical Softmax

給定訓練資料為 ,輸出字的集合為 。當輸入的字串為 ,輸出的字為 時,訓練的演算法要將機率 最佳化。

如果 10000 種字,若沒有分類階層,訓練時就要直接對 做計算,即是對這 10000種字做計算,使 所對應的神經元輸出為 1 ,其它 9999 個神經元輸出 0 ,這樣要計算 10000 次,如下圖:

若在訓練前,就事先把 中的字彙分類好,以 代表字 的類別,則可以改成用以下機率做最佳化:

根據以上公式,先判斷 是在哪類,要算 的值,再判斷 中的哪個字,要算 的值。

若把它們分成 100 類,則每個類別有 100 種字。訓練時需要分成兩步來計算,第一步先計算 ,此時只要對 100 種分類做計算,使 所對應的神經元輸出 1 ,其它 99 個神經元輸出 0 。第二步是算 ,即是讓 底下對應到 的神經元輸出 1 ,其它99 個神經元輸出 0 ,這樣只需要計算 200 次即可,所做的計算只有原本的 ,如下圖:

更進一步地,可以將 output layer 分成更多層,也就是說,將它用成樹狀結構,每一個節點代表一次分類,這樣一層層分下去,直到葉子節點,可分出是哪個字彙。分越多層,訓練時要計算的次數就會越小,分到最細的情況下,就變成二元分類樹,這樣所需的計算總量只有原本的 倍。

根據這個二元分類樹,可以把 中的每一個字,對應到一個由 01 所組成的二元字串 ,若字串中第一個數字為 0 ,則表示這個字在第一層神經元所計算出的值為 0,以此類推。若要用這個二元分類樹計算 可用以下公式來計算:

其中, 為長度小於 的二元字串,即是在二元分類樹中不是葉子也不是根的節點。

例如字串 即表示先從根節點往 0 的分支走到子節點,再從這個子節點走到 1 的分支的子節點,此子節點可用字串 01 來表示。若要計算以上公式的條件機率,方法為,先給這些子節點有它們自己的語意向量,再用 NPLM 把子節點的語意向量和 當成輸入值一起輸入 NPLM 來計算。

例如,假設詞庫裡總共有 8 個字, 則 ,若字彙 的二元字串值 ,則它在二元分類樹的位置如下圖所示:

為:

訓練時,將訓練資料 輸入到 NPLM 的類神經網路中,並以二元分類樹的節點來代替它的 output layer

首先,先從根節點的神經元開始訓練,這一步是要算 。由於 ,所以要以根節點的神經元輸出為 1 來調整 NPLM 模型的參數,如下圖:

再來,從根節點往左走,選 1 分支的子神經元來訓練,這一步是要算 。因為這是基於 的條件機率,所以要用字串 1 所對應它的語意向量和 一起輸入到 NPLM 。另外,由於 ,要以輸出為 0 來調整 NPLM 模型的參數,如下圖:

然後,從剛剛那個神經元的節點開始,選 0 分支的子神經元來訓練,這一步是要算 。因為這是基於 的條件機率,所以要先將字串 10 所對應的語意向量和 一起輸入到 NPLM 。另外,由於 ,要以輸出為 0 來調整 NPLM 模型的參數,如下圖:

最後,選擇 0 的分支往下走,即可走到 ,結束了針對 這筆資料的訓練過程。

Hierarchical Clustering

在訓練之前,要先把字彙的階層分類給建立好。要建立這個分類階層,有很多種方式,例如,使用 WordNet 所建立的上下位關係,來建立階層,或者可以用 Hierarchical Clustering ,像是Brown Clustering之類的,自動從訓練資料中建立分類階層。

Conclusion

Hierarchical Softmax 來置換掉原本 NPLMoutput layer ,可以使得原本要計算 次的訓練,縮減為 次,大幅提升了訓練速度。因此, Hierarchical Softmax 被日後眾多種類神經網路相關的模型所採用,包括近年來很熱門的 word2vec 也是。

Reference

Frederic Morin , Yoshua Bengio. Hierarchical probabilistic neural network language model. 2005

Comments