深度學習最近兩年在音頻分析,視頻分析,游戲博弈等問題上取得了巨大的成果。由于微軟,谷歌等科技巨頭的推動及應用上的可見突破,使得深度學習成為目前學術界和工業(yè)界的超熱門話題。包括國內很多公司也樂見其成,適時宣布自己的產品或算法也擁抱了深度學習。不過對于具體如何使用,達到了什么效果等問題諱莫如深。
事實上,關于深度學習的大量研究成果在上世紀已經完成,包括卷積神經網絡(CNN)、長短時記憶網絡(LSTM),多層網絡的表達能力等。宣稱自己在使用某個算法工具其實并不具備天然的正義性,如何能將工具用好,解決關鍵場景才是我們應該關心的問題。
為提升對非結構化數據的處理,玻森(bosonnlp.com)內部也在開展深度學習的討論。接下來的一段時間,我們將不定期更新深度學習的討論notes。
我們不談情懷,不討論人工智能是否要統(tǒng)治人類,也不論奇點是否臨近。我們就談點落地的深度學習基礎數學理論,及背后的幾何直觀。世界太大,認知有限,這點上我們遵從維特根斯坦的觀點,“凡能夠說的,都能夠說清楚;凡不能談論的,就應該保持沉默”。
人類大腦的神經系統(tǒng)相當復雜,其具體的工作機制至今仍是前沿的生物課題。在1957年時由 Cornell 大學的學者 Frank Rosenblatt 博士所提出的感知機(Perceptron)模型可以認為是對人類神經系統(tǒng)的一個高度簡化概括:
其中w與b作為模型的參數。
Frank Rosenblatt 博士恐怕是史上對人工智能貢獻最大的心理學家。他的興趣不僅停留在從數學上抽象出感知機和提出相應的學習算法,還親自打造了下面這臺被稱之為Mark I Perceptron的“實體”感知機,其具備512個隱藏單元哦!
當加權求和輸入值時,感知器會與0做對比,以確定自己是否處于激發(fā)狀態(tài)。實際的神經元在人腦中數以百億計。上式中神經元所輸出的狀態(tài)非0即1,而實際在計算機所建立的模型中,往往將其泛化:
其中f為激活函數(activation function)。
神經網絡可以看做是感知機的一種泛化形式,通過遞歸嵌套及選擇不同的激活函數,我們可以不斷將原始數據x進行變換,或特征抽取。
通過對上述式子的嵌套,我們可以構造具有更為復雜表達能力的函數。如兩層嵌套形式:
注意到感知機實際上相當于采用Step函數作為激活函數。其他常用的激活函數有Sigmoid, Tanh, ReLU等。其中Sigmoid函數
在早期的神經網絡研究文獻中被廣泛使用。目前對于大多非結構化數據,人們發(fā)現分段線性(piece-wise linear)函數
具備更好的魯棒性,并能夠更快收斂。常見的激活函數可以參見下表。
無環(huán)結構:一層神經元的輸出作為下一層神經元的輸入,信息總是向前反饋。這一類型的神經網絡也叫 Feed-forward Nerual Network。卷積網絡(Convolutional Nerual Network)也包括在其中。
有環(huán)結構:一層神經元的輸出可以作為當前神經元的輸入,即產生了反饋循環(huán)(feedback loop)。反饋環(huán)表示了神經網絡的內部狀態(tài),使得網絡的輸出與之前的輸入數據相關。如果把時間維度展開的話,有環(huán)結構也相當于隨著時間走的無環(huán)結構。這一類型的神經網絡也叫Recurrent Neural Network (RNN)。
對于給定的網絡拓撲結構,具體網絡參數的確定其實是一個標準的優(yōu)化問題。我們通過定義一個損失函數(cost function),來衡量當前神經網絡的輸出與我們期望的輸出之間的距離。
我們構造的Net(x,w)以w為參數的,x為輸入的網絡的輸出值。而對w參數的尋找,在深度學習中最常用的是隨機梯度下降法(Stochastic Gradient Descent)。其基本思想仍然是讓變量沿著損失函數在目前參數的盡可能下降的方向進行調整
其中 η稱之為學習率,用以控制修改參數的激進程度。后面的討論中我們會提到,其實嚴格按照梯方向更新并無必要,只需要確保更新能夠降低損失函數即可。這個觀察與Liang Huang etc.在前些年所發(fā)表的Structured Perceptron with Inexact Search可以進行類比。
如果我們能夠得到參數w的 Hessian 矩陣,可以規(guī)避η選擇的問題,但對于只采用梯度這樣一階信息的優(yōu)化方法,如何選擇學習率,是否能利用某個參數的歷史更新信息來估算Hessian矩陣等,都是比較有意思的研究問題。有興趣的朋友可以參考Schaul etc.的No More Pesky Learning Rates。
感知機是 universal 的嗎,即感知機是否能近似任意函數?
感知機可以表達與非門 NAND。而我們知道,在邏輯電路中,NAND 是 universal 的,即可以表示任意其他的邏輯門。
NOT(X) = NAND(X, X)
AND(X, Y) = NOT(NAND(X, Y))
OR(X, Y) = NAND(NOT(X), NOT(Y))
XOR(X, Y) = OR(AND(X, NOT(Y)), AND(Y, NOT(X)))
因此,計算機模擬的多層感知器可以模擬任何運算。特別的,XOR 的模擬亦可說明多層感知器在分類任務中可以完成非線性分類。
感知機和 Sigmoid 等價嗎?
Sigmoid 可以很容易用來模擬感知機或 step function 輸出。為驗證這一點,Sigmoid 的所有輸入值擴大c倍(c?1),即c(wx+b),除wx+b=0這個輸入點,sigmoid的行為處處與感知器的輸行為可以任意接近。利用討論1的結論,可以證明二者等價。
打亂神經網絡的輸入順序會影響學習的結果嗎?
全連通的神經網絡不會。因為這樣的神經網絡對輸入數據沒有區(qū)分,且輸出是當下數據的最優(yōu)解,即相對應的權重向量和bias。但局部連通的神經網絡比如 Convolutional Nerual Network 就會有影響。
為什么不直接采用“有多少被錯誤分類的數據個數”作為 cost function 來評估神經網絡的表現?
“有多少被錯誤分類的數據個數”雖然常常是我們優(yōu)化的最終目標,但因為該函數并不屬于凸函數(convex function),對其優(yōu)化較為困難(事實上優(yōu)化該 cost function 可以被證明是一個NP問題)。所以人們常采用凸函數作為其“代理”。相關資料可以參考 surrogate loss function。
為什么梯度下降是朝著下降最快的方向?為什么隨機梯度能夠收斂?
根據 Cauchy-Schwarz 不等式,我們得知向量的點積△C≈▽Cost?△w,在△w和負梯度的夾角為0°時取得最小值。因此,在負梯度方向上,損失函數降的最快。并且只要變化向量△v和負梯度方向的夾角為銳角,△C即為負。因此,單個數據的下降方向雖然不是整體最優(yōu)(下降最快)的方向,但只要是走在收斂的路上,就能使得函數逼近極值,因此可以收斂。
下次討論我們主要會圍繞后向傳播算法(backpropagation)及背后的直觀意義,歡迎關注~
聯系客服