阿里巴巴吳煒:深度學習原理和在自然語言處理上的應用
大家好我是吳煒,目前在阿里巴巴主要從事點擊率預估和相關性方面的數據挖掘工作。今天給大家帶來的主題《深度學習原理和在自然語言處理上的應用》
現在,深度學習如火如荼,各大巨頭像軍備競賽般爭奪深度學習的大牛們,Yann Lecun加盟非死book,Geoffrey Hinton 加盟谷歌,Andrew NG加盟百度…..隨著這些巨頭公司門的推動,深度學習在工業界也得到了普遍的應用,特別是在圖像、語音識別領域更是取得了突破 性的進展,基本取代傳統方法。
本次分享主要分成神經網絡的原理,深度學習,深度學習在NLP中的應用
神經網絡模型由兩個處理階段組成,每個階段都類似于感知器模型,因此神經網絡也被稱為多層感知器(multilayer perceptron), 或 者MLP。然而,與感知器模型相比,一個重要的區別是神經網絡在隱含單元中使用連續的sigmoid非線性函數,而感知器使用階梯函數這一非線性函 數。這意味著神經網絡函數關于神 經網絡參數是可微的,這個性質在神經網絡的訓練過程中起著重要的作用。
如果網絡中的所有隱含單元的激活函數都取線性函數,那么對于任何這種網絡,我們總可以 找到一個等價的無隱含單元的網絡。這是由于連續的線性變換的 組合本身是一個線性變換。然 而,如果隱含單元的數量小于輸入單元的數量或者小于輸出單元的數量,那么網絡能夠產生的 變換不是最一般的從輸入到輸出的線 性變換,因為在隱含單元出的維度降低造成了信息丟失。
另一種方法是事先固定基函數的數量,但是允許基函數可調節。換句話說,就是使用參數形 式的基函數,這些參數可以在訓練階段調節。在模式識別中,這 種類型的最成功的模型時前饋 神經網絡,也被稱為多層感知器(multilayer perceptron),將在本章討論。實際上,“多層感知 器”是 一個相當不正確的命名,因為模型是由多層logistic回歸模型(帶有連續的非線性性質)組 成,而不是由多層感知器(帶有非連續的非線性性質)組成。 對于許多應用來說,與具有同樣 泛化能力的支持向量機相比,最終的模型會相當簡潔,因此計算的速度更快。這種簡潔性帶來 的代價就是,與相關向量機一樣, 構成了網絡訓練根基的似然函數不再是模型參數的凸函數。然而,在實際應用中,考察模型在訓練階段消耗的計算資源是很有價值的,這樣做會得到一個 簡潔的模 型,它可以快速地處理新數據。
圖中給出的網絡結構是在實際中最常用的一個。然而,它很容易擴展。例如,可以增加額 外的處理層,每層包含一個加權線性組合,以及一個使用非線性激 活函數 進行的元素級別的變換。注意,在文獻中,關于計算這種網絡的層數,有一些令人困惑的地 方。因此圖中的網絡可能被描述成一個3層網絡(計算單元的 層數,把輸入當成單元),或者 有時作為一個單一隱含層網絡(計算隱含單元層的數量)。我們推薦的計算方法是把圖中的網 絡稱為兩層網絡,因為它是可調節 權值的層數,這對于確定網絡性質很重要。
神經網絡結構的另一個擴展是引入跨層(skip-layer)鏈接,每個跨層鏈接都關聯著一個對應 的可調節參數。例如,在一個兩層的神經網絡中, 跨層鏈接可能直接從輸入鏈接到輸出。原則 上,有著sigmoid隱含單元的網絡總能夠模擬跨層鏈接(對于有界輸入值),模擬的方法是使用 足夠小的第一 層權值,從而使得隱含單元幾乎是線性的,然后將隱含單元到輸出的權值設置為 足夠大來進行補償。然而在實際應用中,顯示地包含跨層鏈接可能會更方便。此 外,網絡可以是稀疏的。稀疏的網絡中,并不是所有有可能的鏈接方式都被鏈接上。
由于在網絡圖和它的數學函數表達式之間有一個直接的對應關系,因此我們可以通過考慮更 復雜的網絡圖來構造更一般的網絡映射。然而,這些網絡必須被 限制為前饋(feed-forward)結 構,換句話說,網絡中不能存在有向圈,從而確保了輸出是輸入的確定函數。用一個簡單 的例子說明了這一點。這 樣的網絡中每個(隱含或者輸出)單元都計算了一個下面的函數
前饋網絡的近似性質被廣泛研究,因為神經網絡擁有稱為通用近似(universal approximator)的性質。 例如,一個帶有線性輸出 的兩層網絡可以在任意精度下近似任何輸入變量較少的連續函數,只 要隱含單元的數量足夠多。這個結果對于一大類隱含單元激活函數都成立,但是不包括多項 式 函數。雖然這些定理是毋庸置疑的,但是關鍵的問題是,給定一組訓練數據,如何尋找合適的 參數值。
神經網絡的性質
上圖是簡單的二分類問題的例子,數據集是人工生成的數據。模型為神經網絡,網絡具有兩個輸入結 點,兩個帶有tanh激活函數的隱含單元,以及帶有 logistic sigmoid激活函數的一個輸出單元。藍色虛線表 示每個隱含單元的z = 0.5的輪廓線,紅線表示網絡的y = 0.5的決策 面。為了對比,綠線表示根據生成數 據的概率分布計算出的最有的決策邊界。
目前為止,我們把神經網絡看成從輸入變量x到輸出變量y的參數化非線性函數中的一大 類。確定網絡參數的一個簡單的方法類似于我們在對多項式曲線擬合問題的討論,因此我 們需要最小化平方和誤差函數。
其中f (·)在分類問題中是一個非線性激活函數,在回歸問題中為恒等函數。我們的目標是推廣 這個模型,使得基函數φj (x)依賴于參數,從而 能夠讓這些參數以及系數{wj }能夠在訓練階段調 節。當然,有許多種方法構造參數化的非線性基函數。神經網絡使用與上面公式形式相同的 基函數,即每 個基函數本身是輸入的線性組合的非線性函數,其中線性組合的系數是可調節參 數。
所以基本的神經網絡,它可以被描述為一系列的函數變換。首先,我們構造輸入變 量x1, . . . , xD的M個線性組合
其中j = 1, . . . , M,且上標(1)表示對應的參數是神經網絡的第一“層”
aj被稱為激活
每個激活都使用一個可微的非線性激活函數h(·)進行變換
zj = h(aj)
非線性函數h(·)通常被選為S形的函數,例如logistic sigmoid函數或者雙曲正切函數。
這些值再次線性組合,得到輸出單元激活
k=1,2,..K是輸出的總數量
我們可以將各個階段結合,得到整體的網絡函數。對于sigmoid輸出單元激活函數,整體的網絡函數為
上圖就是公式的一個解釋
輸入變量、隱含變量、輸出變量都表示為結點,權 參數被表示為結點之間的鏈接,其中偏置參數被表示為來自額外的輸入變量x0 和隱含變量z0 的鏈接。箭 頭表示信息流在網絡中進行前向傳播的方向。
以上就是大致介紹了神經網絡的基本原理
目前為止,我們把神經網絡看成從輸入變量x到輸出變量y的參數化非線性函數中的一大 類。
如果對于神經網絡進行擴展:1:增加層數 2:增加激活函數的選擇 3:增加跨層的鏈接
神經網絡就擴展為常說的深度神經網絡,使用數據集對于這個網絡進行訓練,得到參數w的過程就被叫做深度學習
在自然語言處理(NLP)領域,深度學習才剛剛開始,下面讓我們看看深度學習在NLP領域能夠給我們帶來怎樣的驚喜。
如上圖所示是一個由兩個卷積層、兩個Pooling層組成的一個典型的LeNet5模型,第一個卷積層,通過6個5*5的卷積矩陣去卷積32*32 的圖像,產生6個28*28的特征圖(Feature Map),其中,可以認為,每一個卷積矩陣提取的是一種特征,生成6種類型的特征;然后通過一個 Pooling層對6個特征圖做Pooling操作(Pooling Size:2*2,也即每2*2大小的區域內取最大值,生成一個新的像素,可以理解 為:選擇最能代表該區域特征的像素點,也可以排除噪音的干擾,增強特征),生成6個14*14大小的特征圖;接下來又接有一個卷積層,這個并不是一個全連 接的結構,而是采用部分連接,連接模式如下表所示
其中,橫向的數字表示的是16種連接模式,也即該層卷積生成的16種特征圖,豎向的數字表示S2層的6個特征圖,以C3層的第3號特征圖的產生為例 進行說明,表中X表示有連接,通過連接S2層中的3,4,5號特征圖分別用5*5的卷積核卷積,然后疊加之后產生C3層的第3號特征圖。
Collobert et al.在2011年發了一篇論文“Natural language processing almost from scratch”,介紹了深度學習在NLP領域的應用
主要介紹了兩種,一種是窗口級別的任務,另一種是句子級別的任務。窗口級別的任務,識別的對象只與其上下文窗口有關,比如詞性標注,該論文的做法是 直接將上下文窗口內的幾個詞的詞向量連接,作為深度學習模型的輸入訓練模型,同時根據任務的不同會對損失函數進行修改,比如在詞性標注任務中會加上一個概 率轉移矩陣,具體不做詳細敘述,可以參考一下論文。
如上圖所示是該論文中提出的CNN的文本分類框架。第一層是一個映射層,將原始句子中的每個詞映射為詞向量表示(可以是事先利用無標注數據訓練好 的,也可以是隨機初始化,但是隨機初始化的效果并不是很好),這樣一個句子就可以用矩陣(n*k,n為詞向量維度,k為句子長度)表示,然后將相鄰的幾個 詞(窗口大小自定義,設為w,一般取值為3)的詞向量進行連接,生成一個3n*k的矩陣,然后乘以一個卷積矩陣M,得到卷積之后的矩陣(3n*h,其中h 是模型的一個hyper-param,按照圖像卷積的思維去理解的話,可以認為是特征圖的個數,表示提取了多少種特征,最終生成的向量維度也就是h),卷 積之后的矩陣每列取最大值(Max-pooling)之后,就得到了句子的特征向量表示,同時可以將不同長度的句子映射為相同長度的向量表示,長度為h; 然后該向量表示作為神經網絡的輸入,最終預測句子類別。
如果按照圖像的思維去理解的話,可以認為是用h個n*(因為在文本中,我們不能對詞向量進行切割,所以只能設置寬度為詞向量維度n)3的卷積核卷積 輸入矩陣,只是在上圖中將連續的3個詞向量進行了連接,然后乘以3n*h的矩陣,結果是一樣的,但是如果按照圖像的方法去做的話,需要將句子填充成等長的 句子,如果用零填充的話,卷積完之后是0,對結果是沒有任何影響。
Collobert和 Weston在2011年提出提出的這個模型,改變了文本分類的傳統思維,該模型不需要人工設計特征,只需要利用文本的原始輸入向量,通過卷積、池化等操作自動提取特征,進行有效分類,深度學習在自然語言處理中的最大賣點。
參考材料:
CNN原理介紹:http://blog.csdn.net/zouxy09/article/details/8781543
http://www.geekcome.com/content-10-3761-1.html
Deep learning 做NLP的經典論文
Collobert et al. Natural Language Processing almost from scratch.
以上是今天的分享內容,謝謝大家的關注
End.