深度学习-自然语言处理中的近似训练
自然語言處理中的近似訓練
跳字模型的核心在于使用softmax運算得到給定中心詞wcw_cwc?來生成背景詞wow_owo?的條件概率
P(wo∣wc)=exp(uo?vc)∑i∈Vexp(ui?vc).P(w_o \mid w_c) = \frac{\text{exp}(\boldsymbol{u}_o^\top \boldsymbol{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)}.P(wo?∣wc?)=∑i∈V?exp(ui??vc?)exp(uo??vc?)?.
該條件概率相應的對數損失
?log?P(wo∣wc)=?uo?vc+log?(∑i∈Vexp(ui?vc)).-\log P(w_o \mid w_c) = -\boldsymbol{u}_o^\top \boldsymbol{v}_c + \log\left(\sum_{i \in \mathcal{V}} \text{exp}(\boldsymbol{u}_i^\top \boldsymbol{v}_c)\right).?logP(wo?∣wc?)=?uo??vc?+log(i∈V∑?exp(ui??vc?)).
由于softmax運算考慮了背景詞可能是詞典V\mathcal{V}V中的任一詞,以上損失包含了詞典大小數目的項的累加。不論是跳字模型還是連續詞袋模型,由于條件概率使用了softmax運算,每一步的梯度計算都包含詞典大小數目的項的累加。
對于含幾十萬或上百萬詞的較大詞典,每次的梯度計算開銷可能過大。為了降低該計算復雜度,我們可以使用兩種近似訓練方法,即負采樣(negative sampling)或層序softmax(hierarchical softmax)。由于跳字模型和連續詞袋模型類似,本節僅以跳字模型為例介紹這兩種方法。
負采樣(negative sampling)
負采樣修改了原來的目標函數。給定中心詞wcw_cwc?的一個背景窗口,我們把背景詞wow_owo?出現在該背景窗口看作一個事件,并將該事件的概率計算為
P(D=1∣wc,wo)=σ(uo?vc)P(D=1\mid w_c, w_o) = \sigma(\boldsymbol{u}_o^\top \boldsymbol{v}_c)P(D=1∣wc?,wo?)=σ(uo??vc?)
其中的σ\sigmaσ函數與sigmoid激活函數的定義相同:
σ(x)=11+exp?(?x).\sigma(x) = \frac{1}{1+\exp(-x)}.σ(x)=1+exp(?x)1?.
我們先考慮最大化文本序列中所有該事件的聯合概率來訓練詞向量。具體來說,給定一個長度為TTT的文本序列,設時間步ttt的詞為w(t)w^{(t)}w(t)且背景窗口大小為mmm,考慮最大化聯合概率
∏t=1T∏?m≤j≤m,j≠0P(D=1∣w(t),w(t+j)).\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(D=1\mid w^{(t)}, w^{(t+j)}).t=1∏T??m≤j≤m,?j?=0∏?P(D=1∣w(t),w(t+j)).
然而,以上模型中包含的事件僅考慮了正類樣本。這導致當所有詞向量相等且值為無窮大時,以上的聯合概率才被最大化為1。很明顯,這樣的詞向量毫無意義。
負采樣通過采樣并添加負類樣本使目標函數更有意義。設背景詞wow_owo?出現在中心詞wcw_cwc?的一個背景窗口為事件PPP,我們根據分布P(w)P(w)P(w)采樣KKK個未出現在該背景窗口中的詞,即噪聲詞。設噪聲詞wkw_kwk?(k=1,…,Kk=1, \ldots, Kk=1,…,K)不出現在中心詞wcw_cwc?的該背景窗口為事件NkN_kNk?。假設同時含有正類樣本和負類樣本的事件P,N1,…,NKP, N_1, \ldots, N_KP,N1?,…,NK?相互獨立,負采樣將以上需要最大化的僅考慮正類樣本的聯合概率改寫為
∏t=1T∏?m≤j≤m,j≠0P(w(t+j)∣w(t)),\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)}),t=1∏T??m≤j≤m,?j?=0∏?P(w(t+j)∣w(t)),
其中條件概率被近似表示為 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).P(w^{(t+j)} \mid w^{(t)}) =P(D=1\mid w^{(t)}, w^{(t+j)})\prod_{k=1,\ w_k \sim P(w)}^K P(D=0\mid w^{(t)}, w_k).P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))k=1,?wk?~P(w)∏K?P(D=0∣w(t),wk?).
設文本序列中時間步ttt的詞w(t)w^{(t)}w(t)在詞典中的索引為iti_tit?,噪聲詞wkw_kwk?在詞典中的索引為hkh_khk?。有關以上條件概率的對數損失為
?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).\begin{aligned} -\log P(w^{(t+j)} \mid w^{(t)}) =& -\log P(D=1\mid w^{(t)}, w^{(t+j)}) - \sum_{k=1,\ w_k \sim P(w)}^K \log P(D=0\mid w^{(t)}, w_k)\ \\ =&- \log \sigma\left(\boldsymbol{u}_{i_{t+j}}^\top \boldsymbol{v}_{i_t}\right) - \sum{k=1,\ w_k \sim P(w)}^K \log\left(1-\sigma\left(\boldsymbol{u}_{h_k}^\top \boldsymbol{v}_{i_t}\right)\right)\\\ =&- \log \sigma\left(\boldsymbol{u}_{i_{t+j}}^\top \boldsymbol{v}_{i_t}\right) - \sum{k=1,\ w_k \sim P(w)}^K \log\sigma\left(-\boldsymbol{u}_{h_k}^\top \boldsymbol{v}_{i_t}\right). \end{aligned} ?logP(w(t+j)∣w(t))==?=??logP(D=1∣w(t),w(t+j))?k=1,?wk?~P(w)∑K?logP(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??).?
現在,訓練中每一步的梯度計算開銷不再與詞典大小相關,而與KKK線性相關。當KKK取較小的常數時,負采樣在每一步的梯度計算開銷較小。
總結
以上是生活随笔為你收集整理的深度学习-自然语言处理中的近似训练的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注意力机制--转载自我的学生隆兴写的博客
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习