NLP面試問題個人總結-交叉熵&RNN


列出幾種文本特征提取算法

答:文檔頻率、信息增益、互信息、X^2統計、TF-IDF

(引用自:https://www.cnblogs.com/jiashun/p/CrossEntropyLoss.html)

信息:

由於概率I 是一個)0至1的值,所以當事件發生的概率越大時,信息量越小。

相對熵

相對熵又稱KL散度(Kullback-Leibler (KL) divergence),用於衡量對於同一個隨機變量x的兩個單獨的概率分布P(x)和Q(x)之間的差異。

KL散度的值越小表示兩個分布越接近.

在一定程度上面,相對熵可以度量兩個隨機分布的距離。也常常用相對熵來度量兩個隨機分布的距離。當兩個隨機分布相同的時候,他們的相對熵為0,當兩個隨機分布的差別增大的時候,他們之間的相對熵也會增大。 

熵:

是表示隨機變量不確定的度量,是對所有可能發生的事件產生的信息量的期望。

信息增益:

分類前的信息熵減去分類后的信息熵

交叉熵:

我們將KL散度公式進行變形得到:

 

 

 這里前半部分是事件P自己的信息熵, 后面那部分可以作為事件P和事件q的信息熵(交叉)

交叉熵廣泛用於邏輯回歸的Sigmoid和Softmax函數中作為損失函數使用。

 

二分類交叉熵誤差:

模型最后需要預測的結果只有兩種情況,對於每個類別我們的預測得到的概率為 [公式] 和 [公式] 。此時表達式為:

意思就是每個類別都做一個信息熵的計算,然后加起來,(目的最小)

同樣,預測輸出越接近真實樣本標簽 0,損失函數 L 越小;預測函數越接近 1,L 越大。函數的變化趨勢也完全符合實際需要的情況

 

多分類交叉熵誤差:

M表示標簽的種類數

交叉熵誤差函數和softmax(神經網絡用到的輸出函數)和sigmoid函數(logistic回歸用到的函數)的復合函數是凸函數,即存在全局最優解

 

2 RNN基本原理

(引用自:https://zhuanlan.zhihu.com/p/32755043

 

 

RNN循環神經元的計算過程:

  1. 將輸入時間步提供給網絡,也就是提供給網絡[公式]
  2. 接下來利用輸入和前一時刻的狀態計算當前狀態,也就是[公式]
  3. 當前狀態變成下一步的前一狀態[公式]
  4. 我們可以執行上面的步驟任意多次(主要取決於任務需要),然后組合從前面所有步驟中得到的信息。
  5. 一旦所有時間步都完成了,最后的狀態用來計算輸出[公式]
  6. 輸出與真實標簽進行比較並得到誤差。
  7. 誤差通過后向傳播(后面將介紹如何后向傳播)對權重進行升級,進而網絡訓練完成。

反向傳播:

  1. 首先使用預測輸出和實際輸出計算交叉熵誤差
  2. 網絡按照時間步完全展開
  3. 對於展開的網絡,對於每一個實踐步計算權重的梯度
  4. 因為對於所有時間步來說,權重都一樣,所以對於所有的時間步,可以一起得到梯度(而不是像神經網絡一樣對不同的隱藏層得到不同的梯度)
  5. 隨后對循環神經元的權重進行升級

交叉熵誤差:

[公式]

[公式]

 

梯度消失和梯度爆炸問題都是因為網絡太深,網絡權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮一下三種方案解決:

 

  1. 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。
  2. 用Batch Normalization。
  3. LSTM的結構設計也可以改善RNN中的梯度消失問題。

 

 

梯度爆炸問題和消失問題:

RNN基於這樣的機制,信息的結果依賴於前面的狀態或前N個時間步。普通的RNN可能在學習長距離依賴性方面存在困難。例如,如果我們有這樣一句話,“The man who ate my pizza has purple hair”。在這種情況下,purple hair描述的是The man,而不是pizza。所以這是一個長距離的依賴關系

如果我們在這種情況下后向傳播,我們就需要應用鏈式法則。在三個時間步后對第一個求梯度的公式如下:

∂E/∂W = ∂E/∂y3* ∂y3/∂h3* ∂h3/∂y2 *∂y2/∂h1 .. 這就是一個長距離的依賴關系.

在這里,我們應用了鏈式規則,如果任何一個梯度接近0,所有的梯度都會成指數倍的迅速變成零。這樣將不再有助於網絡學習任何東西。這就是所謂的消失梯度問題。

同理:

梯度爆炸就是由於單個或多個梯度值變得非常高,梯度變得非常大。

 

3 RNN常見的幾種設計模式

(引用自:https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/82922386)

為了來處理消失梯度問題。人們提出了LSTM結構(長短期記憶網絡)和GRU(門控性單位)可以用來處理消失的梯度問題。

 

 LSTM也有這樣的鏈式結構,但重復模塊有不同的結構。不是有一個單一的神經網絡層,而是有四個,他們之間以一種非常特殊的方式進行交互。

LSTM一共三個門:遺忘門\輸入門\輸出門

 例子: He is a boy and She is a girl.

LSTM 的第一個門是遺忘門,用sigmoid 來激活,為0就是遺忘,為1就是記住.

遺忘門

 


 輸入門

下一步是決定我們將要在單元狀態中存儲哪些新的信息。這有兩個部分。首先,激活函數為sigmoid的稱為“輸入門”的層決定我們將更新哪些值。接下來,激活函數為tanh的層創建一個新的候選值向量,,可以添加到單元狀態。 下一步,我們將結合這兩部分更新狀態。

在語言模型的例子中,我們希望將新的主語的性別添加到單元狀態,以替換我們“遺忘”的舊主語。


 更新細胞狀態

 我們讓舊的狀態乘以來“遺忘”我們決定忘記的事情。然后我們加上,這是新的候選值,按照我們決定更新每個單元狀態值的比例進行縮放。

 


 輸出層

最后,我們需要決定輸出的內容。這個輸出將基於我們的單元狀態,但將是一個過濾版。首先,我們運行一個sigmoid層,決定我們要輸出單元狀態的哪些部分。然后,我們通過tanh函數(把值轉換為[-1,1]區間)把它的單元狀態與sigmoid門的輸出相乘,這樣我們只輸出我們決定的部分。

對於語言模型來說,因為它只是看到一個主語,所以它可能要輸出與動詞相關的信息。例如,它可能會輸出主語是單數還是復數,以便我們知道如果接下來是動詞,應該是什么形式。


 

 

總結:

遺忘門確定前一個步長中哪些相關的信息需要被保留;

輸入門確定當前輸入中哪些信息是重要的,需要被添加的;

輸出門確定下一個隱藏狀態應該是什么。


 

GRU:

與 LSTM 相比,GRU 去除掉了細胞狀態,使用隱藏狀態來進行信息的傳遞。它只包含兩個門:更新門和重置門。

更新門

更新門的作用類似於 LSTM 中的遺忘門和輸入門。它決定了要忘記哪些信息以及哪些新信息需要被添加。

重置門

重置門用於決定遺忘先前信息的程度。

這就是 GRU。GRU 的張量運算較少,因此它比 LSTM 的訓練更快一下。很難去判定這兩者到底誰更好,研究人員通常會兩者都試一下,然后選擇最合適的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM