1 列出幾種文本特征提取算法
答:文檔頻率、信息增益、互信息、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循環神經元的計算過程:
- 將輸入時間步提供給網絡,也就是提供給網絡
。
- 接下來利用輸入和前一時刻的狀態計算當前狀態,也就是
- 當前狀態變成下一步的前一狀態
- 我們可以執行上面的步驟任意多次(主要取決於任務需要),然后組合從前面所有步驟中得到的信息。
- 一旦所有時間步都完成了,最后的狀態用來計算輸出
- 輸出與真實標簽進行比較並得到誤差。
- 誤差通過后向傳播(后面將介紹如何后向傳播)對權重進行升級,進而網絡訓練完成。
反向傳播:
- 首先使用預測輸出和實際輸出計算交叉熵誤差
- 網絡按照時間步完全展開
- 對於展開的網絡,對於每一個實踐步計算權重的梯度
- 因為對於所有時間步來說,權重都一樣,所以對於所有的時間步,可以一起得到梯度(而不是像神經網絡一樣對不同的隱藏層得到不同的梯度)
- 隨后對循環神經元的權重進行升級
交叉熵誤差:
梯度消失和梯度爆炸問題都是因為網絡太深,網絡權值更新不穩定造成的,本質上是因為梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮一下三種方案解決:
- 用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函數。
- 用Batch Normalization。
- 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 的訓練更快一下。很難去判定這兩者到底誰更好,研究人員通常會兩者都試一下,然后選擇最合適的。