深度學習,準確的說是神經網路,實際上源於上世紀六十年代的感知機技術,當時由於技術不成熟和算力不發達,並沒有在當時就取得特別好的成果。這門技術爆發是在計算機圖形學(cv)領域,大家驚奇地發現雖然深度學習可解釋性很差,但它作為一種仿照人類大腦的模型,在影象分類、目標檢測等領域還真就碾壓了傳統方法,甚至取得了比人類還要好的成績。之後,人們又發現,通過使用rnn,深度學習在自然語言處理這個領域也居然也取得了非常好的效果。
到目前為止,人工智慧的兩大明珠,cv和nlp的榜單的絕大部分都被深度學習方法佔據。因此,這個方向現在已經被廣泛接受作為人工智慧這個概念的代名詞。
在本篇部落格中,為了節約篇幅將會把深度學習和機器學習基礎的部分省略,預設大家已經有了這部分知識,包括最基本的全連線神經網路、反向傳播、梯度下降、卷積層。
這部分推薦當時我入門的部落格龍心塵:從初等數學的角度初探神經網路 以及龍心塵:深度學習與計算機視覺系列這兩個系列,或者邱錫鵬老師的《神經網路與深度學習》進行學習。如果對自己理解能力有信心,直接往下看也成。本系列將著重介紹深度學習在自然語言處理領域的應用。因此,傳統的統計學方法在這裡也不會被詳細介紹。有興趣的朋友可以讀《統計自然語言處理》這本書去了解,但不是必須掌握。
迴圈神經網路(recurrent neural network,rnn)是一類具有短期記憶能力的神經網路。
它一般是以層的結構作為整個網路的組成部分。這個結構之所以被稱為迴圈,是因為其會利用上一次輸出的資訊,也就是說,該層在進行計算時不僅利用 t
tt 時刻輸入x⃗t
\vec x_t
xt,還會運用本層上一次的輸出h⃗t
−1\vec h_
ht−1
,rnn模型如下圖所示。
在典型的rnn中,以上模型的數學形式為:
h t⃗
=f(u
ht−1
⃗+wx
t⃗+b
⃗)(0)\vec=f(u\vec}+w\vec+\vec b) \tag
ht=f
(uht
−1
+wxt
+b
)(0)
其中f
ff是非線性函式,可以為relu或sigmoid等函式。
這樣,模型除了當前的輸入,還可以利用之前的結果。rnn層可以看做是一層,但在時間維度上,這個模型可以展開為乙個 t
tt 層的網路,如下圖中所示。
rnn也可以通過梯度下降方法進行學習,引數的更新量也通過反向傳播得到,但由於引入了時序的概念,這一過程的方式有一定的變化。
我們定義整個序列總體的損失函式為每個時刻的損失函式累加,即:
l =∑
t=1t
ltl = \sum^_l_t
l=t=1∑
tlt
與傳統的梯度下降相同,引數u
uu的更新為
∂ l∂
u=∑t
=1t∂
lt∂u
(1)\frac=\sum^_\frac \tag
∂u∂l=
t=1∑
t∂u
∂lt
(1)
但由於在公式(0)中,得出輸出h
th_t
ht的過程中存在遞迴項ht−
1h_ht−1
,對ht−
1h_ht−1
的處理的不同,對應rnn中兩種計算梯度的策略:
bptt方法的思想比較簡單,即在一次完整的向前傳播,即整個長度為t
tt的序列得出結果後,將rnn看做是層數為t
tt的網路進行向後傳播。
對每乙個時刻t∈[
1,t]
t\in [1,t]
t∈[1,t
],rnn都可以看做是乙個沿時間維度展開的t
tt層的網路,例如當t=3時,rnn可以展開為乙個3層網路,如圖所示。
這個網路中共享u這個權重,因此要求u的梯度,實際上是對這t層網路中,每一層網路中的u求導後累加,公式為:
∂ lt
∂u=∑
k=1t
∂lt∂
hk⃗∂
hk⃗∂
u(2)
\frac = \sum^_\frac}\frac}\tag
∂u∂lt
=k=
1∑t
∂hk
∂lt
∂u
∂hk
(2
)將(2)帶入(1)得:
∂ l∂
u=∑t
=1t∑
k=1t
∂lt∂
zk⃗∂
zk⃗∂
u(3)
\frac = \sum^_\sum^_\frac}\frac}\tag
∂u∂l=
t=1∑
tk=
1∑t
∂zk
∂lt
∂u
∂zk
(3
)這樣,在一次序列的完整的向前傳播之後,通過該公式反向傳播即可獲得更新梯度。
而rtrl演算法,則是基於對以下思想:
∂ ht
∂u=∂
th∂z
t(∂+
zt∂u
+u∂h
t−1∂
u)\frac=\frac(\frac}+u\frac})
∂u∂ht
=∂z
t∂t
h(
∂u∂+
zt
+u∂u
∂ht−
1)
其中∂
+∂^+
∂+表示保持ht−
1h_ht−1
不變求導。
這其中,∂ht
−1∂u
\frac}
∂u∂ht−
1一項實際上可以在每次向前計算後得出並儲存,交給第t次計算時使用。這樣就可以在每乙個時刻t實時地更新引數。
機器學習 深度學習 自然語言處理
文字挖掘 文字分類 機器翻譯 客服系統 複雜對話系統 手工特徵耗時耗力,還不易拓展 自動特徵學習快,方便擴充套件 深度學習提供了一種通用的學習框架,可以用來表示世界,視覺和語言學資訊 深度學習可以無監督學習,也可以監督學習 我 今天 下午 打籃球 p s p w1,w2,w3,w4,w5,wn p ...
基於深度學習的自然語言處理
cbow表示可以通過求單詞表示向量和或者通過將乙個單詞詞袋向量乘 以乙個每一行對應於乙個稠密單詞表示的矩陣 這樣的矩陣也叫作嵌入矩陣 embedd i ng matricy 來得到。網路中每行神經元的值可以看作是乙個向量 全連線層可以看作是從四維到六維 的線性變換。全連線層實現了乙個向量與矩陣的乘法...
人工智慧 深度學習與自然語言處理
如何自動處理自然語言輸入 並產生語言輸出,是人工智慧的重要研究方向。這門課主要講授近2 3年深度學習在自然語言處理方面的最新發展。課程從相關機器學習模型的數學原理和最優演算法講起,將會講到神經網路在nlp中的一系列應用,包括潛在語義分析 語音到文字的轉錄 語言翻譯以及問答,同時也會講到這些模型在cp...