神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)
神經(jīng)網(wǎng)絡(luò):一種可以通過觀測數(shù)據(jù)使計算機學(xué)習(xí)的仿生語言范例
深度學(xué)習(xí):一組強大的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)技術(shù)
神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)目前提供了針對圖像識別,語音識別和自然語言處理領(lǐng)域諸多問題的最佳解決方案娱挨。傳統(tǒng)的編程方法中诽凌,我們告訴計算機如何去做,將大問題劃分為許多小問題舍扰,精確地定義了計算機很容易執(zhí)行的任務(wù)倦蚪。而神經(jīng)網(wǎng)絡(luò)不需要我們告訴計算機如何處理問題,而是通過從觀測數(shù)據(jù)中學(xué)習(xí)边苹,計算出他自己的解決方案陵且。
神經(jīng)元和感知機
神經(jīng)網(wǎng)絡(luò)是由一個個基本的神經(jīng)元neurons組合而成的,而這些神經(jīng)元模擬人腦中神經(jīng)細胞个束,擁有若干個輸入和輸出(對應(yīng)樹突和軸突)慕购,通常在學(xué)術(shù)界我們將其稱為感知機。
對于一個神經(jīng)元細胞茬底,擁有接受信號的樹突和輸出信號的軸突沪悲,根據(jù)這種模式,學(xué)者設(shè)計一個輸入輸出模式的單元阱表,并命名為感知機:
感知機-perceptrons
2.1 原理闡述
先簡單的構(gòu)思下殿如,你覺得感知機是如何工作的?感知機需要幾個二進制輸入捶枢,?X1握截,X2,…Xn?X1烂叔,X2谨胞,…Xn ,并產(chǎn)生一個二進制輸出:
上圖所示的 ?Perceptron?Perceptron 有三個輸入蒜鸡,但是實際的輸入可能遠多于三個或是少與三個胯努。 ?Rosenblatt?Rosenblatt 提出了一個簡單的規(guī)則來計算輸出牢裳,他首先引入了 ?weights (權(quán)重)概念,?ω1叶沛,ω2,...?ω1蒲讯,ω2,...。以實數(shù)權(quán)重 ?ω 表示輸入到輸出的重要性灰署,神經(jīng)元的輸出 0 或 1 判帮,這取決于加權(quán)因子(即 ?weights) 小于或大于某一閾值。就像權(quán)重溉箕,閾值為一個實數(shù)晦墙,是一個神經(jīng)元的參數(shù)。
公式表示為:
這就是我們熟知的激活函數(shù)的最初形態(tài)肴茄,?0 狀態(tài)代表抑制晌畅, ?1 狀態(tài)代表激活。這簡單的數(shù)學(xué)公式幫助我們了解 ?perceptrons? 是如何工作的寡痰。姑且我們把它理解為: 它是一種通過權(quán)衡輸入信息的重要性來決定你的輸出抗楔。
2.2 實例理解
舉個簡單的例子,假設(shè)在這個周末拦坠,你聽說你的城市將有一個搖滾音樂節(jié)连躏,你喜歡搖滾,現(xiàn)在想做決定看是否去音樂節(jié)贪婉。假設(shè)你通過權(quán)衡三個因素來做出你的決定:
1)當天的天氣好嗎反粥?
2)你的男朋友或女朋友是否想陪你一起去?
3)到達目的地的交通是否便利疲迂。
下面我們把它公式化才顿,我們以相應(yīng)的二進制變量來表示這三個因素 ?x1,x2,x3?x1,x2,x3 。假設(shè)我們把天氣好表示為?x1=1?x1=1 尤蒿,反之?x1=0?x1=0 郑气。相似地假設(shè),有人陪?x2=1?x2=1 , 反之 ?x2=0?x2=0; 交通便利?x3=1?x3=1 ,反之 ?x3=0?x3=0 腰池。
現(xiàn)在尾组,假設(shè):
1、你非常喜歡搖滾音樂示弓,所以即使的男讳侨、女朋友不去,你也很可能會去參加這個搖滾音樂節(jié)奏属。
2跨跨、但也許你真的討厭的壞天氣,如果初先壞天氣,你很可能就不去了勇婴。
你可以使用感知器模型來做這類決策忱嘹,這時我們設(shè)置權(quán)重因子?w1=6,w2=2,w3=2.?w1=6,w2=2,w3=2. 對?w1?w1值越大,表明天氣因素對你有更重要的意義耕渴,遠不如是否有人陪伴或是交通情況拘悦。最后茬高,假設(shè)你選擇一個 閾值為?5?5 的感知器霉祸。有了這些選擇织狐,感知機可實現(xiàn)你理想的決策模型呜笑,當天氣好的時候,輸出?1?1沃呢;?0?0 表示天氣不好蚌斩。這時,無論你的男朋友或女朋友是否想去吻商,或是交通情況是否便利,這兩項將不再影響你的輸出糟红。
通過不同的權(quán)重和閾值艾帐,我們可以得到不同的決策模型。例如盆偿,假設(shè)我們選擇了一個閾值為?3?3柒爸。然后,如果天氣好事扭,感知器 會判定你應(yīng)該去參加這個音樂節(jié)捎稚。亦或是天氣不好,但是你的男求橄、女朋友愿意陪你去并且交通便利今野,感知器 也會判定定你應(yīng)該去參加這個音樂節(jié)」夼總而言之条霜,權(quán)值或是閾值的改變,它將會是一個不同的決策模型涵亏。
顯然宰睡,感知器不是人類的一個完整的決策模型,人的神經(jīng)網(wǎng)絡(luò)要復(fù)雜得多!但是气筋,例子說明的是一個感知器是如何衡量不同種類的約束條件的重要性拆内,以作出決定。就這方面而言宠默,舉例還算是恰當麸恍。當然,一個復(fù)雜的網(wǎng)絡(luò)感知器就可以做出非常微妙的決定:
epoch:1個epoch表示過了1遍訓(xùn)練集中的所有樣本光稼。
Common Activation Functions激活函數(shù)
激活函數(shù)是用來加入非線性因素的或南,因為線性模型的表達能力不夠孩等。
以下,同種顏色為同類數(shù)據(jù)采够。
某些數(shù)據(jù)是線性可分的肄方,意思是,可以用一條直線將數(shù)據(jù)分開蹬癌。比如下圖:
這時候你需要通過一定的機器學(xué)習(xí)的方法权她,比如感知機算法(perceptron learning algorithm) 找到一個合適的線性方程。
但是有些數(shù)據(jù)不是線性可分的逝薪。比如如下數(shù)據(jù):
第二組數(shù)據(jù)你就沒有辦法畫出一條直線來將數(shù)據(jù)區(qū)分開隅要。
這時候有兩個辦法,第一個辦法董济,是做線性變換(linear transformation)步清,比如講x,y變成x^2,y^2,這樣可以畫出圓形虏肾。如圖所示:
如果將坐標軸從x,y變?yōu)橐詘^2,y^2為標準廓啊,你會發(fā)現(xiàn)數(shù)據(jù)經(jīng)過變換后是線性可分的了。大致示意圖如下:
另外一種方法是引入非線性函數(shù)封豪。我們來看異或問題(xor problem)谴轮。以下是xor真值表
這個真值表不是線性可分的,所以不能使用線性模型吹埠,如圖所示
我們可以設(shè)計一種神經(jīng)網(wǎng)絡(luò)第步,通過激活函數(shù)來使得這組數(shù)據(jù)線性可分。
激活函數(shù)我們選擇閥值函數(shù)(threshold function)缘琅,也就是大于某個值輸出1(被激活了)粘都,小于等于則輸出0(沒有激活)。這個函數(shù)是非線性函數(shù)胯杭。
神經(jīng)網(wǎng)絡(luò)示意圖如下:
其中直線上的數(shù)字為權(quán)重驯杜。圓圈中的數(shù)字為閥值。第二層做个,如果輸入大于1.5則輸出1鸽心,否則0;第三層居暖,如果輸入大于0.5顽频,則輸出1,否則0.
我們來一步步算太闺。
第一層到第二層(閥值1.5)
第二層到第三層(閥值0.5)
可以看到第三層輸出就是我們所要的xor的答案糯景。
經(jīng)過變換后的數(shù)據(jù)是線性可分的(n維,比如本例中可以用平面),如圖所示:
總而言之蟀淮,激活函數(shù)可以引入非線性因素最住,解決線性模型所不能解決的問題。
多層前饋神經(jīng)網(wǎng)絡(luò)Multi-layer Perceptrons
之前我們已經(jīng)介紹了單個神經(jīng)元(感知機)怠惶,我們仿照人腦神經(jīng)系統(tǒng)涨缚,把這些神經(jīng)元給全連接起來,便可以得到一個多層感知機 (Multi-layer Perceptron, MLP)策治,也叫做多層神經(jīng)網(wǎng)絡(luò)脓魏。在多層神經(jīng)網(wǎng)絡(luò)中,第一層叫做輸入層(input layer)通惫,最后一層叫做輸出層(output layer)茂翔,中間的都叫做隱層(hidden layer),下面是一個單隱層神經(jīng)網(wǎng)絡(luò)的教材例子
正則化 regularization
如果你懷疑神經(jīng)網(wǎng)絡(luò)過度擬合了(即high variance problem)履腋,難么最先想到的方法是正則化珊燎。正則化通常有助于避免過度擬合或減少網(wǎng)絡(luò)誤差。下面來講正則化的原理府树。
L2 regularization是最常見的正則化方法俐末,而你可能也聽說過 L1 regularization。
Dropout 正則化
除了L2 regularization奄侠,還有一個非常實用的正則化方法——dropout。我們來看看它的工作原理载矿。假設(shè)我們訓(xùn)練如圖的神經(jīng)網(wǎng)絡(luò)垄潮,它存在過擬合。
這就是dropout所要處理的闷盔。我們復(fù)制一下這個網(wǎng)絡(luò)弯洗,dropout會遍歷他的每一層,并設(shè)置消除神經(jīng)網(wǎng)絡(luò)中節(jié)點的概率逢勾。我們類似擲硬幣的設(shè)置每個節(jié)點得以保留和消除的概率皆為0.5牡整,設(shè)置完概率我們會消除一些節(jié)點,然后對應(yīng)的刪掉從這些節(jié)點進出的連線溺拱。最后得到一個如下圖所示的節(jié)點更少逃贝,規(guī)模更小的網(wǎng)絡(luò)。然后對這個網(wǎng)絡(luò)做back propagation(反向傳播)訓(xùn)練迫摔。
這只是其中一種情況沐扳,我們同樣以這種方式設(shè)置概率來處理其它樣本。對每個樣本我們都將采用一個精簡后的神經(jīng)網(wǎng)絡(luò)來訓(xùn)練它句占。這個方法單純遍歷結(jié)點沪摄,編碼也是隨機的,可它真的有效。
early stopping
還有另外一種常用的方法叫作杨拐。當你運行梯度下降時祈餐,可以繪制training error曲線(在訓(xùn)練集上用0-1記錄分類誤差次數(shù)),或只繪制呈單調(diào)下降趨勢的cost function 的優(yōu)化過程哄陶。
在訓(xùn)練過程中昼弟,我們希望訓(xùn)練誤差代價函數(shù)?
?都在下降。通過early stopping奕筐,我們不單可以繪制上面這些內(nèi)容舱痘,還可以繪制dev set error(驗證集誤差)。
它可以是驗證集上的分類誤差离赫,或驗證集上的代價函數(shù)(cost function)芭逝、邏輯損失(logistic loss)、對數(shù)損失(log loss)等渊胸。
你會發(fā)現(xiàn)旬盯,dev set error會先呈下降趨勢,然后在某個節(jié)點處開始上升翎猛。So胖翰,early stopping的作用是“你覺得神經(jīng)網(wǎng)絡(luò)在這個迭代過程中表現(xiàn)得很好了,我們在此停止訓(xùn)練吧”切厘,并得到對應(yīng)的dev set error萨咳。
當你還未在神經(jīng)網(wǎng)絡(luò)上運行太多迭代的時候,參數(shù)w接近0(因為隨機初始化w時疫稿,它的值可能都是較小的隨機值培他,所以在長時間訓(xùn)練網(wǎng)絡(luò)之前,w依然很幸抛)舀凛。隨著迭代的進行,經(jīng)過訓(xùn)練w的值會變得越來越大途蒋。
所以early stopping要做的就是在中間點停止迭代過程猛遍,我們得到了一個中等大小的w。與L2 regularization十分相似号坡,(但愿你的神經(jīng)網(wǎng)絡(luò)過度擬合不嚴重)選擇w范數(shù)較小的神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)
是一種在空間上共享參數(shù)的神經(jīng)網(wǎng)絡(luò)懊烤。使用數(shù)層卷積,而不是數(shù)層的矩陣相乘筋帖。在圖像的處理過程中奸晴,每一張圖片都可以看成一張“薄餅”,其中包括了圖片的高度日麸、寬度和深度(即顏色寄啼,用RGB表示)逮光。
Convolutional neural networks (“convnets”) are a staple of deep learning, especially for computer vision applications
Convnets are neural networks made up of the following
layers:
? convolutional layers
? max pooling layers
? fully-connected layers
Convolutions are made up of two components:
(1) a kernel, in the form of a matrix which is overlaid on different sub-regions of the image, and combined through an element-wise product
(2) a stride s ∈ Z+ which defines how many positions in the image to advance the kernel on each iteration
Deep Learning: The Good
? Huge impact on vision and speech recognition tasks in particular, with massive improvements in empirical accuracy over standard datasets
? Possible to model much larger contexts/neighbourhoods than conventional models, due to representation learning/generalisation
? Easy to combine different input modalities
? Easy to play around with using high-level libraries such as TensorFlow, PyTorch and keras
? Lots of vibe/demand for machine learning skills!
Deep Learning: The Bad
? Any savings in terms of feature engineering are outweighed by costs in terms of architecture engineering
? Very expensive to train over large datasets (with implications for hyperparameter tuning, architecture engineering, ...)
? Without code, reproducibility of results can be very low, due to the impact of various engineering tricks that have a big impact on results
? Overblown claims about the capabilities of deep learning (AI Armageddon, anyone?)