一文了解神經(jīng)網(wǎng)絡(luò)工作原理
資料來源:getwallpapers.com
深度學(xué)習(xí)是機器學(xué)習(xí)中重要分支之一。它的目的是教會計算機做那些對于人類來說相當(dāng)自然的事情。深度學(xué)習(xí)也是無人駕駛汽車背后的一項關(guān)鍵性技術(shù),可以幫無人車識別停車標(biāo)志、區(qū)分行人與路燈柱。它是手機、平板、電視和免提揚聲器等設(shè)備實現(xiàn)語音控制的關(guān)鍵。深度學(xué)習(xí)近期以其前所未有的成果獲得了廣泛關(guān)注。
在深度學(xué)習(xí)中,計算機模型直接從圖像、文本或聲音中學(xué)習(xí)直接如何執(zhí)行分類任務(wù)。深度學(xué)習(xí)模型可以達(dá)到最高的準(zhǔn)確度,有時甚至超過了人類的水平。我們通常使用大量標(biāo)記的數(shù)據(jù)和包含許多層的神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)來訓(xùn)練模型。
資源
深度學(xué)習(xí)的模型可應(yīng)用到各種復(fù)雜任務(wù)中:
1. 人工神經(jīng)網(wǎng)絡(luò)(ANN)進(jìn)行回歸和分類
2. 用于計算機視覺的卷積神經(jīng)網(wǎng)絡(luò)(CNN)
3. 遞歸神經(jīng)網(wǎng)絡(luò)(RNN)用于時間序列分析
4. 自組織地圖以進(jìn)行特征提取
5. 推薦系統(tǒng)的深玻爾茲曼機
6. 推薦系統(tǒng)的自動編碼器
在本文中,我們將盡可能的介紹人工神經(jīng)網(wǎng)絡(luò)(ANN)的所有相關(guān)內(nèi)容。
“人工神經(jīng)網(wǎng)絡(luò)(ANN)是一種信息處理范例,它受到生物神經(jīng)系統(tǒng)(大腦)信息處理方式的啟發(fā)。由大量高度互連的處理元件(神經(jīng)元)組成,這些元件協(xié)同工作以解決特定問題。”
主要內(nèi)容:
1. 神經(jīng)元
2. 激活功能
3. 激活功能的類型
4. 神經(jīng)網(wǎng)絡(luò)如何工作
5. 神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)(反向傳播)
6. 梯度下降
7. 隨機梯度下降
8. 隨機梯度下降訓(xùn)練神經(jīng)網(wǎng)絡(luò)
神經(jīng)元
神經(jīng)元(也稱為神經(jīng)細(xì)胞)是大腦和神經(jīng)系統(tǒng)的基本單元,通過樹突接收來自外部世界的刺激信息,對該信息進(jìn)行處理后,通過軸突輸出給其他細(xì)胞。
生物神經(jīng)元
細(xì)胞體(Soma):神經(jīng)元細(xì)胞的主要部分,包含細(xì)胞核,進(jìn)行必要的生化反應(yīng)。
樹突:神經(jīng)元周圍類似頭發(fā)的管狀結(jié)構(gòu)。主要負(fù)責(zé)接受輸入信號。
軸突:這是一種細(xì)長的管狀結(jié)構(gòu),類似于傳輸線。
突觸:神經(jīng)元以復(fù)雜的空間排列相互連接。軸突末端再次分支,是一種高度復(fù)雜、高度專一的結(jié)構(gòu),我們稱之為突觸。兩個神經(jīng)元之間的聯(lián)系就發(fā)生在這些突觸處。
樹突接收其他神經(jīng)元信息輸入。細(xì)胞體處理這些傳入信息,得到相應(yīng)的輸出結(jié)果,該結(jié)果通過軸突和突觸發(fā)送到其他神經(jīng)元。
電信號流過神經(jīng)元。
下圖代表了受生物神經(jīng)元啟發(fā)的ANN一般模型。它也被稱為感知器。
單層神經(jīng)網(wǎng)絡(luò)一般稱為感知器,給定輸入它將計算得到輸出。
感知器
在上圖中,x0, x1, x2, x3...x(n)代表該網(wǎng)絡(luò)的輸入(獨立變量),每一個輸入在經(jīng)過所謂的樹突時都要乘以相應(yīng)的權(quán)重。該權(quán)重表示為w0, w1, w2, w3….w(n),它顯示特定節(jié)點的強度。b是偏差值。偏差值可以向上或向下移動激活函數(shù)。
最簡單的情況,將這些乘積相加并輸入傳遞函數(shù)(激活函數(shù))得到結(jié)果,然后將該結(jié)果作為輸出發(fā)送。
激活函數(shù)
激活函數(shù)對于ANN學(xué)習(xí)和理解真正復(fù)雜的東西很重要。它們的主要目的是將ANN中節(jié)點的輸入信號轉(zhuǎn)換為輸出信號,此輸出信號將作為下一層的輸入。
激活函數(shù)通過計算加權(quán)總和偏差值來決定是否激活該神經(jīng)元。目的是引入非線性。
如果我們不應(yīng)用激活函數(shù),那么輸出信號將僅僅是線性函數(shù)(一階多項式)。線性函數(shù)很容易求解,功耗也相對較小,但是它們的復(fù)雜性受到一定的限制。因此沒有激活函數(shù),我們的模型就無法進(jìn)行學(xué)習(xí),也無法對復(fù)雜的數(shù)據(jù)進(jìn)行建模,例如圖像,視頻,音頻,語音等。
為什么我們需要非線性函數(shù)?
非線性函數(shù)是一種具有曲率的函數(shù)?,F(xiàn)在我們需要神經(jīng)網(wǎng)絡(luò)能夠進(jìn)行學(xué)習(xí),能夠表示將輸入映射到輸出的任意復(fù)雜函數(shù)。因此神經(jīng)網(wǎng)絡(luò)也被認(rèn)為是 “通用函數(shù)逼近器”。
激活函數(shù)的類型:
1. 閾值激活函數(shù)—(二進(jìn)制階躍函數(shù))
二進(jìn)制階躍函數(shù)是基于閾值的激活函數(shù)。如果輸入值高于某個閾值,則神經(jīng)元被激活并將完全相同的信號發(fā)送到下一層;低于某個閾值則不被激活。
二進(jìn)制函數(shù)
此函數(shù)的問題是創(chuàng)建一個二進(jìn)制分類器(1或0),但是如果我們要連接多個這樣的神經(jīng)元以引入更多類,如Class1、Class2、Class3等。在這種情況下,所有神經(jīng)元都將給出1 ,我們將無法進(jìn)行判斷。
2. Sigmoid激活函數(shù)-(邏輯函數(shù))
Sigmoid函數(shù)是一種數(shù)學(xué)函數(shù),具有特征性的“ S”形曲線或S型曲線,范圍在0到1之間,因此它用于需要預(yù)測概率為輸出。
Sigmoid曲線
Sigmoid函數(shù)是可微的,這意味著我們可以求解任意2個點的曲線斜率。Sigmoid激活函數(shù)的缺點是,如果提供較大的負(fù)輸入,則可能導(dǎo)致神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時卡住。
3. 雙曲正切函數(shù)—(tanh)
類似于Sigmoid,但性能更好。它本質(zhì)上是非線性的,因此我們可以對各層進(jìn)行疊加。該函數(shù)的范圍是(-1,1)。
雙曲正切函數(shù)
此功能的主要優(yōu)點是,負(fù)輸入映射為負(fù)輸出,而只有零值輸入會被映射為接近零輸出。因此,在訓(xùn)練過程中卡頓的可能性較小。
4. 整流線性單元-(ReLu)
ReLu是CNN和ANN中最常用的激活函數(shù),范圍從零到無窮大。[0,∞]
ReLu
如果x為正,則給出輸出為“ x”;如果x為負(fù),否則輸出為0。ReLu看起來是線性函數(shù)的問題,但本質(zhì)上是非線性的,并且ReLu的組合也是非線性的。實際上,它是一個很好的近似器,可以通過組合Relu來近似大部分函數(shù)。
它一般應(yīng)用于神經(jīng)網(wǎng)絡(luò)的隱藏層。對于輸出層而言,分類問題通常使用softmax函數(shù),回歸問題使用線性函數(shù)。
這里存在的一個問題是,某些梯度在訓(xùn)練過程中可能會消失。這會導(dǎo)致權(quán)重更新,任何數(shù)據(jù)點都無法激活該神經(jīng)元。ReLu基本導(dǎo)致了神經(jīng)元的死亡。
為了解決這一問題,引入了Leaky ReLu。Leaky ReLu引入了一個小斜率來保證不出現(xiàn)上述問題。Leaky ReLu范圍從-∞到+∞。
ReLu vs Leaky ReLu
Leaky增加了ReLu函數(shù)的輸出范圍。通常,a = 0.01。當(dāng)a不為0.01時,則稱為隨機ReLu。
神經(jīng)網(wǎng)絡(luò)如何工作?
讓我們以房地產(chǎn)價格為例,首先,我們將不同的因素匯總到一行數(shù)據(jù)中: Area, Bedrooms, Distance to city and Age.
輸入值通過加權(quán)的突觸直接到達(dá)輸出層。四個輸入值均會被分析并輸入到激活函數(shù)中,產(chǎn)生輸出結(jié)果。
這很簡單,但是通過在輸入和輸出層之間添加一個隱藏層可以擴大神經(jīng)網(wǎng)絡(luò)的功能并提高其準(zhǔn)確性。
具有隱藏層的神經(jīng)網(wǎng)絡(luò)(僅顯示非0值)
現(xiàn)在在上圖中,所有4個變量都通過突觸連接到神經(jīng)元。但是,并非所有的突觸都被加權(quán)。權(quán)值包括0值和非0值。在這里,非零值表示重要性,0值表示輸入被丟棄。
讓我們以第一個神經(jīng)元的Area和Distance to City為非零的示例為例,這意味著它們對第一個神經(jīng)元重要。另外兩個變量,Bedrooms而Age權(quán)值為0,因此不通過第一神經(jīng)元。
您可能想知道為什么第一個神經(jīng)元只考慮四個變量中的兩個。距離城市越遠(yuǎn)房子變得越便宜,這在房地產(chǎn)市場上很普遍。因此,這個神經(jīng)元所做的事情可能是尋找離市區(qū)較近的房屋。
神經(jīng)元很多,每個神經(jīng)元用這些變量的不同組合進(jìn)行相似的計算。一旦滿足標(biāo)準(zhǔn),神經(jīng)元就會使用激活函數(shù)進(jìn)行計算。
下一個神經(jīng)元加權(quán)的突觸可能是Distance to the city和Bedrooms。因此神經(jīng)元以非常靈活的方式工作,全面的搜索以查找特定的事物。
神經(jīng)網(wǎng)絡(luò)如何學(xué)習(xí)?
讓我們先來做一個類比。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)與我們正常的學(xué)習(xí)方式密切相關(guān),我們首先完成一定的工作,并得到教練的糾正,下一次以更好的方式來完成這個工作。類似地,神經(jīng)網(wǎng)絡(luò)需要培訓(xùn)者,來描述該網(wǎng)絡(luò)對輸入做出的反應(yīng)。用實際值和預(yù)測值之間的差異,計算一個誤差值(也稱為成本函數(shù)),并將其發(fā)送回系統(tǒng)。
成本函數(shù):實際值與輸出值之間平方差的一半。
對于網(wǎng)絡(luò)的每一層,都會分析成本函數(shù),并用其調(diào)整下一個輸入的閾值和權(quán)重。我們的目標(biāo)是使成本函數(shù)最小化。成本函數(shù)越低,實際值就越接近于預(yù)測值。這樣隨著網(wǎng)絡(luò)的不斷學(xué)習(xí),每次運行的誤差都減小。
我們通過整個神經(jīng)網(wǎng)絡(luò)反饋結(jié)果數(shù)據(jù)。將輸入變量連接到神經(jīng)元的加權(quán)突觸是我們唯一可以控制的事情,因此只要實際值和預(yù)測值之間存在差異,我們就需要調(diào)整權(quán)重。一旦稍微調(diào)整它們并再次運行神經(jīng)網(wǎng)絡(luò),便會產(chǎn)生一個新的成本函數(shù),我們希望它可以比上一個小。重復(fù)此過程,直到將成本函數(shù)降低到盡可能小的水平為止。
上述過程稱為反向傳播,并通過網(wǎng)絡(luò)連續(xù)進(jìn)行,直到將誤差值保持在最小值為止。
反向傳播
調(diào)整權(quán)重的方法有兩種:
1.蠻力方法
2.批梯度下降
蠻力法
適合單層前饋網(wǎng)絡(luò)。在這里,我們需要考慮許多可能的權(quán)重。在這種方法中,我們想要舍棄除U形曲線底部權(quán)值以外的所有其他權(quán)重。最佳權(quán)值可以使用簡單的消除技術(shù)找到。如果我們只需要優(yōu)化一個權(quán)重,那么這種方法很有效。但如果是具有許多權(quán)重的復(fù)雜神經(jīng)網(wǎng)絡(luò),該方法將因維數(shù)太高而無法實現(xiàn)。
分批梯度下降
它是一階迭代優(yōu)化算法,在訓(xùn)練具有不同權(quán)重模型的過程中找到最小成本值(損失)。
梯度下降
在“梯度下降”過程中,我們不會一次都查看每個權(quán)重并剔除錯誤的權(quán)重,而是查看函數(shù)斜率。
如果斜率→負(fù)值,則表示您沿著曲線下降。
如果斜率→正,則不執(zhí)行任何操作
這樣,可以消除大量不正確的權(quán)重。
隨機梯度下降(SGD)
如上圖所示,當(dāng)我們具有凸曲線時,漸變下降效果很好。但是,如果我們沒有凸曲線,則漸變下降將失敗。
“ 隨機 ” 一詞是指與隨機概率相關(guān)的系統(tǒng)或過程。因此,在隨機梯度下降中,隨機選擇一些樣本,而不是每次迭代的整個數(shù)據(jù)集。
隨機梯度下降
在SGD中,我們一次獲取一行數(shù)據(jù),通過神經(jīng)網(wǎng)絡(luò)運行該數(shù)據(jù),然后調(diào)整權(quán)重。對于第二行,我們運行它,然后比較Cost函數(shù),然后再次調(diào)整權(quán)重。
SGD幫助我們避免了局部極小值的問題。它比Gradient Descent快得多,因為它一次運行每一行,并且不必將整個數(shù)據(jù)加載到內(nèi)存中即可進(jìn)行計算。
要注意的一件事是,由于SGD通常比典型的Gradient Descent噪聲更大,因此由于其下降的隨機性,通常需要更多的迭代次數(shù)才能達(dá)到最小值。盡管與典型的Gradient Descent相比,它需要更多的迭代次數(shù)才能達(dá)到最小值,但在計算消耗上仍比典型的Gradient Descent少得多。因此,在大多數(shù)情況下,SGD優(yōu)于分批梯度下降。
利用隨機梯度下降訓(xùn)練神經(jīng)網(wǎng)絡(luò)
步驟1→將權(quán)重隨機初始化為接近0但不為0的小數(shù)。
步驟2→在輸入層中輸入數(shù)據(jù)集的第一個觀測值,每個要素放在一個節(jié)點中。
步驟3→ 正向傳播:從左到右,神經(jīng)元按順序被激活,直到獲得預(yù)測值。每個神經(jīng)元的影響都受權(quán)重的限制。
步驟4→將預(yù)測結(jié)果與實際結(jié)果進(jìn)行比較,并測量的誤差(成本函數(shù))。
步驟5→ 反向傳播:從右到左,誤差反向傳播。根據(jù)它們對錯誤造成的影響來更新權(quán)重。學(xué)習(xí)率決定了我們更新權(quán)重的程度。
步驟6→重復(fù)步驟1至5,并在每次比較后更新權(quán)重(強化學(xué)習(xí))
步驟7→當(dāng)整個訓(xùn)練集通過ANN時,就完成了。
結(jié)論
資料來源:techcrunch.com
神經(jīng)網(wǎng)絡(luò)是一個全新的新概念,它還有很大潛力??梢詰?yīng)用于各種不同的概念中,并在測試階段通過特定的反向傳播和糾錯機制進(jìn)行學(xué)習(xí)。這些多層系統(tǒng)也許可以有一天僅靠學(xué)習(xí)來減少發(fā)生錯誤的可能性,而無需人工糾正。