掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在從事深度學(xué)習(xí)過程中, 如果我們想訓(xùn)練一個類別非常多的分類器 (比如一個擁有巨大詞匯庫的語言模型), 正常的訓(xùn)練過程將非常緩慢。這是由于在訓(xùn)練過程中,所有的類別都需要進行評估。為了解決這個問題,人們發(fā)明了候選采樣的技巧,每次只評估所有類別的一個很小的子集。深度學(xué)習(xí)庫 TensorFlow (TF) 實現(xiàn)了候選采樣技巧, 并提供了一些 API。

創(chuàng)新互聯(lián)建站專注于施甸企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。施甸網(wǎng)站建設(shè)公司,為施甸等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
1. 候選采樣函數(shù)
候選采樣函數(shù),從巨大的類別庫中,按照一定原則,隨機采樣出類別子集。TF 提供下面幾個候選采樣函數(shù), 其中前面三個的參數(shù)和返回值是一致的,第四個也很類似。具體參數(shù)和返回值可以移步 TF 文檔。
(1) tf.nn.uniform_candidate_sampler
均勻地采樣出類別子集。
(2) tf.nn.log_uniform_candidate_sampler
按照 log-uniform (Zipfian) 分布采樣。
這個函數(shù)主要用于處理詞作類別的情況。在語言學(xué)中,詞按照出現(xiàn)頻率從大到小排序之后,服從 Zipfian 分布。在使用這個函數(shù)之前,需要對類別按照出現(xiàn)頻率從大到小排序。
(3) tf.nn.learned_unigram_candidate_sampler
按照訓(xùn)練數(shù)據(jù)中類別出現(xiàn)分布進行采樣。具體實現(xiàn)方式:1)初始化一個 [0, range_max] 的數(shù)組, 數(shù)組元素初始為1; 2) 在訓(xùn)練過程中碰到一個類別,就將相應(yīng)數(shù)組元素加 1;3) 每次按照數(shù)組歸一化得到的概率進行采樣。
(4) tf.nn.fixed_unigram_candidate_sampler
按照用戶提供的概率分布進行采樣。
如果類別服從均勻分布,我們就用uniform_candidate_sampler;如果詞作類別,我們知道詞服從 Zipfian, 我們就用 log_uniform_candidate_sampler; 如果我們能夠通過統(tǒng)計或者其他渠道知道類別滿足某些分布,我們就用 nn.fixed_unigram_candidate_sampler; 如果我們實在不知道類別分布,我們還可以用 tf.nn.learned_unigram_candidate_sampler。
其實我蠻好奇 tf 內(nèi)部怎么實現(xiàn)快速采樣的,特別是
tf.nn.learned_unigram_candidate_sampler 概率分布在變的情況下,我知道最快的采樣算法也是 O(n) 的。不知道 tf 有沒有更快的算法。
2. 候選采樣損失函數(shù)
候選采樣函數(shù)生成類別子集。類別子集需要送給候選采樣損失函數(shù)計算損失,最小化候選采樣損失便能訓(xùn)練模型。TF 提供下面兩個候選采樣損失函數(shù)。這兩個采樣損失函數(shù)的參數(shù)和返回值是一致的, 具體參數(shù)和返回值可以移步 TF 文檔。
(1) tf.nn.sampled_softmax_loss
這個函數(shù)通過 模型的交叉熵損失。候選類別子集由采樣類別 和真實類別 組成,即 。模型***一層輸出是 , 經(jīng)過 softmax 激活函數(shù)轉(zhuǎn)成模型輸出的概率 , 得 。
因為只有候選類別子集 , 沒有類別全集 L,我們無法計算 ,進而計算交叉熵損失。通過候選類別子集,我們只能計算 。那么怎么優(yōu)化 相關(guān)的損失函數(shù),得到 呢?我們有。
其中 K 是和 y 無關(guān)的數(shù)。我們得到概率計算公式和交叉熵損失。
最小化 J 訓(xùn)練模型。
(2) tf.nn.nce_loss
NCE Loss 和 Sampled Softmax Loss 的出發(fā)點是一致, 都是想使得模型輸出 。它們的不同點在于 Sampled Softmax Loss 只支持 Single-Label 分類,而 NCE 支持 Multi-Label 分類。候選類別子集 由采樣類別 和真實類別 組成,即 。對于候選類別子集中的每一個類別,都建立一個 Logistic 二分類問題,其損失函數(shù)為
最小化 J 訓(xùn)練模型。
3. 候選采樣限制
很多時候, 負類別由問題給定。比如我們訓(xùn)練分類器玩斗地主撲克, 下面幾個性質(zhì):
在上述問題中, 不同牌局的候選動作的個數(shù)不一樣, 我們無法使用候選采樣的方法進行訓(xùn)練。候選采樣只能采樣出相同個數(shù)的類別。一方面 TF 的基本單元是 Tensor, 要求各個維度一致。另一方面是由于候選采樣為了 Word2Vec 中的 Negative sampling 等場景設(shè)計, 這些場景只需要挑選一些負類別反映非正類別的特性。
4. 總結(jié)
候選采樣加速了類別數(shù)量巨大的訓(xùn)練過程。TF 提供了候選采樣相關(guān) API,方便人們使用。
【本文為專欄作者“李立”的原創(chuàng)稿件,轉(zhuǎn)載請通過獲取聯(lián)系和授權(quán)】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流