回憶一下我們在15.1 節(jié)中的討論。skip-gram模型的主要思想是使用softmax操作來計(jì)算生成上下文詞的條件概率wo基于給定的中心詞wc在(15.1.4)中,其對應(yīng)的對數(shù)損失由(15.1.7)的相反數(shù)給出 。
由于 softmax 操作的性質(zhì),因?yàn)樯舷挛脑~可能是字典中的任何人V, (15.1.7)的反面 包含與詞匯表的整個大小一樣多的項(xiàng)目總和。因此, (15.1.8)中 skip-gram 模型的梯度計(jì)算和(15.1.15)中連續(xù)詞袋模型的 梯度計(jì)算都包含求和。不幸的是,這種在大型詞典(通常有數(shù)十萬或數(shù)百萬個單詞)上求和的梯度的計(jì)算成本是巨大的!
為了降低上述計(jì)算復(fù)雜度,本節(jié)將介紹兩種近似訓(xùn)練方法:負(fù)采樣和分層softmax。由于skip-gram模型與連續(xù)詞袋模型的相似性,我們將僅以skip-gram模型為例來描述這兩種近似訓(xùn)練方法。
15.2.1。負(fù)采樣
負(fù)采樣修改了原來的目標(biāo)函數(shù)。給定中心詞的上下文窗口wc,任何(上下文)詞的事實(shí)wo來自這個上下文窗口被認(rèn)為是一個事件,其概率建模為
(15.2.1)P(D=1∣wc,wo)=σ(uo?vc),
在哪里σ使用 sigmoid 激活函數(shù)的定義:
(15.2.2)σ(x)=11+exp?(?x).
讓我們首先最大化文本序列中所有此類事件的聯(lián)合概率來訓(xùn)練詞嵌入。具體來說,給定長度的文本序列T, 表示為w(t)時(shí)間步長的單詞t并讓上下文窗口大小為m, 考慮最大化聯(lián)合概率
(15.2.3)∏t=1T∏?m≤j≤m,j≠0P(D=1∣w(t),w(t+j)).
然而,(15.2.3)只考慮那些涉及正例的事件。因此, 只有當(dāng)所有詞向量都等于無窮大時(shí),(15.2.3)中的聯(lián)合概率才最大化為 1。當(dāng)然,這樣的結(jié)果是沒有意義的。為了使目標(biāo)函數(shù)更有意義,負(fù)采樣添加了從預(yù)定義分布中采樣的負(fù)樣本。
表示為S上下文詞的事件wo來自中心詞的上下文窗口wc. 對于此次涉及的事件wo,來自預(yù)定義的分布P(w) 樣本K 不是來自這個上下文窗口的噪聲詞。表示為Nk干擾詞的事件wk (k=1,…,K) 不是來自上下文窗口 wc. 假設(shè)這些事件同時(shí)涉及正例和反例S,N1,…,NK是相互獨(dú)立的。負(fù)采樣將(15.2.3)中的聯(lián)合概率(僅涉及正例)重寫為
(15.2.4)∏t=1T∏?m≤j≤m,j≠0P(w(t+j)∣w(t)),
其中條件概率是通過事件來近似的 S,N1,…,NK:
(15.2.5)P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))∏k=1,wk~P(w)KP(D=0∣w(t),wk).
表示為it和hk一個詞的索引 w(t)在時(shí)間步t文本序列和噪聲詞wk, 分別。關(guān)于 (15.2.5)中條件概率的對數(shù)損失是
(15.2.6)?log?P(w(t+j)∣w(t))=?log?P(D=1∣w(t),w(t+j))?∑k=1,wk~P(w)Klog?P(D=0∣w(t),wk)=?logσ(uit+j?vit)?∑k=1,wk~P(w)Klog?(1?σ(uhk?vit))=?logσ(uit+j?vit)?∑k=1,wk~P(w)Klog?σ(?uhk?vit).
我們可以看到現(xiàn)在每個訓(xùn)練步驟的梯度計(jì)算成本與字典大小無關(guān),而是線性取決于K. 設(shè)置超參數(shù)時(shí)K對于較小的值,負(fù)采樣的每個訓(xùn)練步驟的梯度計(jì)算成本較小。
15.2.2。分層 Softmax
作為一種替代的近似訓(xùn)練方法,hierarchical softmax 使用二叉樹,一種 如圖 15.2.1所示的數(shù)據(jù)結(jié)構(gòu),其中樹的每個葉節(jié)點(diǎn)代表字典中的一個詞V.
圖 15.2.1用于近似訓(xùn)練的分層 softmax,其中樹的每個葉節(jié)點(diǎn)代表字典中的一個詞。
表示為L(w)從根節(jié)點(diǎn)到表示單詞的葉節(jié)點(diǎn)的路徑上的節(jié)點(diǎn)數(shù)(包括兩端)w在二叉樹中。讓n(w,j)成為jth該路徑上的節(jié)點(diǎn),其上下文詞向量為 un(w,j). 例如,L(w3)=4在 圖 15.2.1中。分層 softmax 將(15.1.4)中的條件概率近似為
(15.2.7)P(wo∣wc)=∏j=1L(wo)?1σ([[n(wo,j+1)=leftChild(n(wo,j))]]?un(wo,j)?vc),
哪里的功能σ在(15.2.2)中定義,并且 leftChild(n)是節(jié)點(diǎn)的左子節(jié)點(diǎn)n: 如果 x是真的,[[x]]=1; 否則 [[x]]=?1.
為了說明,讓我們計(jì)算生成單詞的條件概率w3給定的詞wc在圖 15.2.1中。這需要詞向量之間的點(diǎn)積vc 的wc以及從根到路徑(圖15.2.1中粗體路徑)上的非葉節(jié)點(diǎn)向量w3,向左、向右、然后向左遍歷:
(15.2.8)P(w3∣wc)=σ(un(w3,1)?vc)?σ(?un(w3,2)?vc)?σ(un(w3,3)?vc).
自從σ(x)+σ(?x)=1,它認(rèn)為生成字典中所有單詞的條件概率 V基于任何詞wc總結(jié)為一個:
(15.2.9)∑w∈VP(w∣wc)=1.
幸運(yùn)的是,因?yàn)長(wo)?1順序是 O(log2|V|)由于二叉樹結(jié)構(gòu),當(dāng)字典大小時(shí)V是巨大的,與不使用近似訓(xùn)練相比,使用分層 softmax 的每個訓(xùn)練步驟的計(jì)算成本顯著降低。
15.2.3。概括
負(fù)采樣通過考慮涉及正例和負(fù)例的相互獨(dú)立的事件來構(gòu)建損失函數(shù)。訓(xùn)練的計(jì)算成本線性依賴于每一步的噪聲詞數(shù)量。
Hierarchical softmax利用二叉樹中從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的路徑構(gòu)造損失函數(shù)。訓(xùn)練的計(jì)算成本取決于每一步字典大小的對數(shù)。
15.2.4。練習(xí)
我們?nèi)绾卧谪?fù)采樣中對噪聲詞進(jìn)行采樣?
驗(yàn)證(15.2.9)成立。
如何分別使用負(fù)采樣和分層 softmax 來訓(xùn)練連續(xù)詞袋模型?
Discussions
-
pytorch
+關(guān)注
關(guān)注
2文章
808瀏覽量
13383
發(fā)布評論請先 登錄
相關(guān)推薦
請問電腦端Pytorch訓(xùn)練的模型如何轉(zhuǎn)化為能在ESP32S3平臺運(yùn)行的模型?
Pytorch模型訓(xùn)練實(shí)用PDF教程【中文】
PyTorch 1.6即將原生支持自動混合精度訓(xùn)練
![<b class='flag-5'>PyTorch</b> 1.6即將原生支持自動混合精度<b class='flag-5'>訓(xùn)練</b>](https://file.elecfans.com/web1/M00/C1/2D/pIYBAF8NZoGAExeAAAAsJ-QOzco276.png)
pytorch實(shí)現(xiàn)斷電繼續(xù)訓(xùn)練時(shí)需要注意的要點(diǎn)
PyTorch教程11.9之使用Transformer進(jìn)行大規(guī)模預(yù)訓(xùn)練
![<b class='flag-5'>PyTorch</b>教程11.9之使用Transformer進(jìn)行大規(guī)模預(yù)<b class='flag-5'>訓(xùn)練</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程13.5之在多個GPU上進(jìn)行訓(xùn)練
![<b class='flag-5'>PyTorch</b>教程13.5之在多個GPU上進(jìn)行<b class='flag-5'>訓(xùn)練</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程之15.2近似訓(xùn)練
![<b class='flag-5'>PyTorch</b>教程之<b class='flag-5'>15.2</b><b class='flag-5'>近似</b><b class='flag-5'>訓(xùn)練</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程15.4之預(yù)訓(xùn)練word2vec
![<b class='flag-5'>PyTorch</b>教程15.4之預(yù)<b class='flag-5'>訓(xùn)練</b>word2vec](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程15.9之預(yù)訓(xùn)練BERT的數(shù)據(jù)集
![<b class='flag-5'>PyTorch</b>教程15.9之預(yù)<b class='flag-5'>訓(xùn)練</b>BERT的數(shù)據(jù)集](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PyTorch教程15.10之預(yù)訓(xùn)練BERT
![<b class='flag-5'>PyTorch</b>教程15.10之預(yù)<b class='flag-5'>訓(xùn)練</b>BERT](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論