Hierarchical softmax(分層softmax)簡(jiǎn)單描述.
最近在做分布式模型實(shí)現(xiàn)時(shí),使用到了這個(gè)函數(shù). 可以說(shuō)非常體驗(yàn)非常的好. 速度非常快,效果和softmax差不多.
我們知道softmax在求解的時(shí)候,它的時(shí)間復(fù)雜度和我們的詞表總量V一樣O(V),是性線性的,從它的函數(shù)方程式中,我們也可以很容易得出:
softmax:
f(x) = e^x / sum( e^x_i ) ;
它的需要對(duì)所有的詞 e^x 求和; 所以當(dāng)V非常大的時(shí)候,哪怕時(shí)間復(fù)雜度是O(V),這個(gè)求解的過(guò)程耗時(shí)也比較“嚴(yán)重”;
設(shè)想一下,當(dāng)我們?cè)谟?xùn)練模型時(shí), 我們知道目標(biāo)詞x,但是我們卻需要去求解所有的詞,并求和。
當(dāng)然,有很多去研究如何優(yōu)化這一過(guò)程,提出過(guò)各種各樣的設(shè)想,其中 Hierarchical softmax 就是其中璀璨的一種。
那么說(shuō)道這,什么是 Hierarchical softmax ?
形如:

我們?nèi)?gòu)造一棵這樣的樹(shù),這不是一般的二叉樹(shù),是依據(jù)訓(xùn)練樣本數(shù)據(jù)中的單詞出現(xiàn)的頻率,構(gòu)建起來(lái)的一棵Huffman tree ,頻率越高,
節(jié)點(diǎn)越短.
當(dāng)我們構(gòu)造了這樣之后,如下:

我們發(fā)現(xiàn)對(duì)于每一個(gè)節(jié)點(diǎn),都是一個(gè)二分類[0,1],也就是我們可以使用sigmod來(lái)處理節(jié)點(diǎn)信息;
sigmod函數(shù)如下:
,
此時(shí),當(dāng)我們知道了目標(biāo)單詞x,之后,我們只需要計(jì)算root節(jié)點(diǎn),到該詞的路徑累乘,即可. 不需要去遍歷所有的節(jié)點(diǎn)信息,時(shí)間復(fù)雜度變?yōu)镺(log2(V))

【參考資料】:
1. https://towardsdatascience.com/hierarchical-softmax-and-negative-sampling-short-notes-worth-telling-2672010dbe08
2.http://building-babylon.net/2017/08/01/hierarchical-softmax/


浙公網(wǎng)安備 33010602011771號(hào)