中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

神經(jīng)網(wǎng)絡(luò)的基本工作原理

2018-11-16    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

看過很多博客、文章,東一榔頭西一棒子的,總覺得沒有一個(gè)系列的文章把問題從頭到尾說清楚,找東西很困難。有的博客、文章的質(zhì)量還不算很理想,似是而非,或者重點(diǎn)不明確,或者直接把別人的博客抄襲過來......種種不靠譜,讓小白們學(xué)習(xí)起來很困難,增加了學(xué)習(xí)曲線的陡峭程度。當(dāng)然也有很多博主非常非常負(fù)責(zé)任,文章質(zhì)量很高,只是連續(xù)度不夠,正看得過癮的時(shí)候,沒有后續(xù)章節(jié)了。

從本文開始,我們試圖用一系列博客,講解現(xiàn)代神經(jīng)網(wǎng)絡(luò)的基本知識(shí),使大家能夠從真正的“零”開始,對神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)有基本的了解,并能動(dòng)手實(shí)踐。這是本系列的第一篇,我們先從神經(jīng)網(wǎng)絡(luò)的基本工作原理開始講解。

神經(jīng)元細(xì)胞的數(shù)學(xué)計(jì)算模型

神經(jīng)網(wǎng)絡(luò)由基本的神經(jīng)元組成,下圖就是一個(gè)神經(jīng)元的數(shù)學(xué)/計(jì)算模型,便于我們用程序來實(shí)現(xiàn)。

輸入

(x1,x2,x3) 是外界輸入信號(hào),一般是一個(gè)訓(xùn)練數(shù)據(jù)樣本的多個(gè)屬性,比如,我們要識(shí)別手寫數(shù)字0~9,那么在手寫圖片樣本中,x1可能代表了筆畫是直的還是有彎曲,x2可能代表筆畫所占面積的寬度,x3可能代表筆畫上下兩部分的復(fù)雜度。

(W1,W2,W3) 是每個(gè)輸入信號(hào)的權(quán)重值,以上面的 (x1,x2,x3) 的例子來說,x1的權(quán)重可能是0.5,x2的權(quán)重可能是0.2,x3的權(quán)重可能是0.3。當(dāng)然權(quán)重值相加之后可以不是1。

還有個(gè)b是干嗎的?一般的書或者博客上會(huì)告訴你那是因?yàn)?span id="sfhk6bkxn" class="math inline">y=wx+by=wx+b,b是偏移值,使得直線能夠沿Y軸上下移動(dòng)。這是用結(jié)果來解釋原因,并非b存在的真實(shí)原因。從生物學(xué)上解釋,在腦神經(jīng)細(xì)胞中,一定是輸入信號(hào)的電平/電流大于某個(gè)臨界值時(shí),神經(jīng)元細(xì)胞才會(huì)處于興奮狀態(tài),這個(gè)b實(shí)際就是那個(gè)臨界值。亦即當(dāng):

w1?x1+w2?x2+w3?x3>=tw1?x1+w2?x2+w3?x3>=t

時(shí),該神經(jīng)元細(xì)胞才會(huì)興奮。我們把t挪到等式左側(cè)來,變成(?t)(?t),然后把它寫成b,變成了:

w1?x1+w2?x2+w3?x3+b>=0w1?x1+w2?x2+w3?x3+b>=0

于是b誕生了!

求和計(jì)算

Z=w1?x1+w2?x2+w3?x3+b=∑i=1m(wi?xi)+bZ=w1?x1+w2?x2+w3?x3+b=∑i=1m(wi?xi)+b

在上面的例子中m=3。我們把wi?xiwi?xi變成矩陣運(yùn)算的話,就變成了:

Z=W?X+bZ=W?X+b

激活函數(shù)

求和之后,神經(jīng)細(xì)胞已經(jīng)處于興奮狀態(tài)了,已經(jīng)決定要向下一個(gè)神經(jīng)元傳遞信號(hào)了,但是要傳遞多強(qiáng)烈的信號(hào),要由激活函數(shù)來確定:

A=σ(Z)A=σ(Z)

如果激活函數(shù)是一個(gè)階躍信號(hào)的話,那受不了啊,你會(huì)覺得腦子里總是一跳一跳的,像繼電器開合一樣咔咔亂響,所以一般激活函數(shù)都是有一個(gè)漸變的過程,也就是說是個(gè)曲線。

激活函數(shù)的更多描述在后續(xù)的博客中。

至此,一個(gè)神經(jīng)元的工作過程就在電光火石般的一瞬間結(jié)束了。

神經(jīng)網(wǎng)絡(luò)的基本訓(xùn)練過程

單層神經(jīng)網(wǎng)絡(luò)模型

這是一個(gè)單層的神經(jīng)網(wǎng)絡(luò),有m個(gè)輸入 (這里m=3),有n個(gè)輸出 (這里n=2)。在單個(gè)神經(jīng)元里,b是個(gè)值。但是在神經(jīng)網(wǎng)絡(luò)中,我們把b的值永遠(yuǎn)設(shè)置為1,而用b到每個(gè)神經(jīng)元的權(quán)值來表示實(shí)際的偏移值,亦即(b1,b2),這樣便于矩陣運(yùn)算。也有些作者把b寫成x0,其實(shí)是同一個(gè)意思,只不過x0用于等于1。

  • (x1,x2,x3)是一個(gè)樣本數(shù)據(jù)的三個(gè)特征值
  • (w11,w12,w13)是(x1,x2,x3)到n1的權(quán)重
  • (w21,w22,w23)是(x1,x2,x3)到n2的權(quán)重
  • b1是n1的偏移
  • b2是n2的偏移

從這里大家可以意識(shí)到,同一個(gè)特征x1,對于n1、n2來說,權(quán)重是不相同的,因?yàn)閚1、n2是兩個(gè)神經(jīng)元,它們完成不同的任務(wù)(特征識(shí)別)。這就如同老師講同樣的課,不同的學(xué)生有不同的理解。

而對于n1來說,x1,x2,x3輸入的權(quán)重也是不相同的,因?yàn)樗獙Σ煌卣饔羞x擇地接納。這就如同一個(gè)學(xué)生上三門課,但是側(cè)重點(diǎn)不同,第一門課花50%的精力,第二門課30%,第三門課20%。

訓(xùn)練流程

從真正的“零”開始學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)時(shí),我沒有看到過一個(gè)流程圖來講述訓(xùn)練過程,大神們寫書或者博客時(shí)都忽略了這一點(diǎn),我在這里給大家畫一個(gè)簡單的流程圖:

損失函數(shù)和反向傳播的更多內(nèi)容在后續(xù)的博客中。

前提條件

  1. 首先是我們已經(jīng)有了訓(xùn)練數(shù)據(jù),否則連目標(biāo)都沒有,訓(xùn)練個(gè)啥?
  2. 我們已經(jīng)根據(jù)數(shù)據(jù)的規(guī)模、領(lǐng)域,建立了神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu),比如有幾層,每一層有幾個(gè)神經(jīng)元
  3. 定義好損失函數(shù)來合理地計(jì)算誤差

步驟

假設(shè)我們有以下訓(xùn)練數(shù)據(jù)樣本:

Id x1 x2 x3 Y
1 0.5 1.4 2.7 3
2 0.4 1.3 2.5 5
3 0.1 1.5 2.3 9
4 0.5 1.7 2.9 1

其中,x1,x2,x3是每一個(gè)樣本數(shù)據(jù)的三個(gè)特征值,Y是樣本的真實(shí)結(jié)果值,

  1. 隨機(jī)初始化權(quán)重矩陣,可以根據(jù)高斯分布或者正態(tài)分布等來初始化。這一步可以叫做“蒙”,但不是瞎蒙。
  2. 拿一個(gè)或一批數(shù)據(jù)作為輸入,帶入權(quán)重矩陣中計(jì)算,再通過激活函數(shù)傳入下一層,最終得到預(yù)測值。在本例中,我們先用Id-1的數(shù)據(jù)輸入到矩陣中,得到一個(gè)A值,假設(shè)A=5
  3. 拿到Id-1樣本的真實(shí)值Y=3
  4. 計(jì)算損失,假設(shè)用均方差函數(shù) Loss=(A?Y)2=(5?3)2=4Loss=(A?Y)2=(5?3)2=4
  5. 根據(jù)一些神奇的數(shù)學(xué)公式(反向微分),把Loss=4這個(gè)值用大喇叭喊話,告訴在前面計(jì)算的步驟中,影響A=5這個(gè)值的每一個(gè)權(quán)重矩陣,然后對這些權(quán)重矩陣中的值做一個(gè)微小的修改(當(dāng)然是向著好的方向修改,這一點(diǎn)可以用數(shù)學(xué)家的名譽(yù)來保證)
  6. 用Id-2樣本作為輸入再次訓(xùn)練(goto 2)
  7. 這樣不斷地迭代下去,直到以下一個(gè)或幾個(gè)條件滿足就停止訓(xùn)練:損失函數(shù)值非常小;迭代了指定的次數(shù);計(jì)算機(jī)累吐血了......

訓(xùn)練完成后,我們會(huì)把這個(gè)神經(jīng)網(wǎng)絡(luò)中的結(jié)構(gòu)和權(quán)重矩陣的值導(dǎo)出來,形成一個(gè)計(jì)算圖(就是矩陣運(yùn)算加上激活函數(shù))模型,然后嵌入到任何可以識(shí)別/調(diào)用這個(gè)模型的應(yīng)用程序中,根據(jù)輸入的值進(jìn)行運(yùn)算,輸出預(yù)測值。

神經(jīng)網(wǎng)絡(luò)中的矩陣運(yùn)算

下面這個(gè)圖就是一個(gè)兩層的神經(jīng)網(wǎng)絡(luò),包含隱藏層和輸出層:

其中,w1-m,n(應(yīng)該寫作w11,1,w11,2,w11,3w1,11,w1,21,w1,31,上面的角標(biāo)1表示第1層,但是visio里不支持這種格式)表示第一層神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣,w2-m,n(應(yīng)該寫作w21,1,w21,2,w21,3w1,12,w1,22,w1,32)表示第二層神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣。

Z11=w11,1x1+w11,2x2+w11,784x784+b11......Z110=w110,1x1+w110,2x2+w110,784x784+b110Z11=w1,11x1+w1,21x2+w1,7841x784+b11......Z101=w10,11x1+w10,21x2+w10,7841x784+b101

變成矩陣運(yùn)算:

Z11=(w11,1w11,2...w11,784)?????x1x2...x784?????+b11.....Z110=(w110,1w110,2...w110,784)?????x1x2...x784?????+b110Z11=(w1,11w1,21...w1,7841)(x1x2...x784)+b11.....Z101=(w10,11w10,21...w10,7841)(x1x2...x784)+b101

再變成大矩陣:

Z1=???????w11,1w12,1......w110,1w11,2w12,2w110,2.........w11,784w12,784w110,784????????????x1x2...x784?????+??????b11b12...b110??????Z1=(w1,11w1,21...w1,7841w2,11w2,21...w2,7841......w10,11w10,21...w10,7841)(x1x2...x784)+(b11b21...b101)

最后變成矩陣符號(hào):

Z1=W1X+B1Z1=W1X+B1

然后是激活函數(shù)運(yùn)算:

A1=σ(Z1)A1=σ(Z1)

同理可得:

Z2=W2A1+B2Z2=W2A1+B2

A2=σ(Z2)A2=σ(Z2)

神經(jīng)網(wǎng)絡(luò)為什么能普遍適用

單層的神經(jīng)網(wǎng)絡(luò)能夠模擬一條二維平面上的直線,從而可以完成線性分割任務(wù)。而理論證明,兩層神經(jīng)網(wǎng)絡(luò)可以無限逼近任意連續(xù)函數(shù)。

比如下面這張圖,二維平面中有兩類點(diǎn),紅色的和藍(lán)色的,用一條直線肯定不能把兩者分開了。

我們使用一個(gè)兩層的神經(jīng)網(wǎng)絡(luò)可以得到一個(gè)非常近似的結(jié)果,使得分類誤差在滿意的范圍之內(nèi)。而這個(gè)真實(shí)的連續(xù)函數(shù)的原型是:

y=0.4x2+0.3xsin(15x)+0.01cos(50x)?0.3y=0.4x2+0.3xsin(15x)+0.01cos(50x)?0.3

哦,my god(我靠)! 這么復(fù)雜的函數(shù),一個(gè)兩層的神經(jīng)網(wǎng)絡(luò)是如何做到的呢?其實(shí)從輸入層到隱藏層的矩陣計(jì)算,就是對輸入數(shù)據(jù)進(jìn)行了空間變換,使其可以被線性可分,然后輸出層畫出了一個(gè)分界線。而訓(xùn)練的過程,就是確定那個(gè)空間變換矩陣的過程。因此,多層神經(jīng)網(wǎng)絡(luò)的本質(zhì)就是對復(fù)雜函數(shù)的擬合。我們可以在后面的試驗(yàn)中來學(xué)習(xí)如何擬合上述的復(fù)雜函數(shù)的。

為什么需要激活函數(shù)

為什么我們不能在沒有激活輸入信號(hào)的情況下完成神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)呢?

如果我們不運(yùn)用激活函數(shù)的話,則輸出信號(hào)將僅僅是一個(gè)簡單的線性函數(shù)。線性函數(shù)一個(gè)一級多項(xiàng)式,F(xiàn)如今,線性方程是很容易解決的,但是它們的復(fù)雜性有限,并且從數(shù)據(jù)中學(xué)習(xí)復(fù)雜函數(shù)映射的能力更小。一個(gè)沒有激活函數(shù)的神經(jīng)網(wǎng)絡(luò)將只不過是一個(gè)線性回歸模型(Linear regression Model)罷了,它功率有限,并且大多數(shù)情況下執(zhí)行得并不好。我們希望我們的神經(jīng)網(wǎng)絡(luò)不僅僅可以學(xué)習(xí)和計(jì)算線性函數(shù),而且還要比這復(fù)雜得多。同樣是因?yàn)闆]有激活函數(shù),我們的神經(jīng)網(wǎng)絡(luò)將無法學(xué)習(xí)和模擬其他復(fù)雜類型的數(shù)據(jù),例如圖像、視頻、音頻、語音等。這就是為什么我們要使用人工神經(jīng)網(wǎng)絡(luò)技術(shù),諸如深度學(xué)習(xí)(Deep learning),來理解一些復(fù)雜的事情,一些相互之間具有很多隱藏層的非線性問題,而這也可以幫助我們了解復(fù)雜的數(shù)據(jù)。

那么為什么我們需要非線性函數(shù)?

非線性函數(shù)是那些一級以上的函數(shù),而且當(dāng)繪制非線性函數(shù)時(shí)它們具有曲率,F(xiàn)在我們需要一個(gè)可以學(xué)習(xí)和表示幾乎任何東西的神經(jīng)網(wǎng)絡(luò)模型,以及可以將輸入映射到輸出的任意復(fù)雜函數(shù)。神經(jīng)網(wǎng)絡(luò)被認(rèn)為是通用函數(shù)近似器(Universal Function Approximators)。這意味著他們可以計(jì)算和學(xué)習(xí)任何函數(shù)。幾乎我們可以想到的任何過程都可以表示為神經(jīng)網(wǎng)絡(luò)中的函數(shù)計(jì)算。
而這一切都?xì)w結(jié)于這一點(diǎn),我們需要應(yīng)用激活函數(shù)f(x),以便使網(wǎng)絡(luò)更加強(qiáng)大,增加它的能力,使它可以學(xué)習(xí)復(fù)雜的事物,復(fù)雜的表單數(shù)據(jù),以及表示輸入輸出之間非線性的復(fù)雜的任意函數(shù)映射。因此,使用非線性激活函數(shù),我們便能夠從輸入輸出之間生成非線性映射。
激活函數(shù)的另一個(gè)重要特征是:它應(yīng)該是可以區(qū)分的。我們需要這樣做,以便在網(wǎng)絡(luò)中向后推進(jìn)以計(jì)算相對于權(quán)重的誤差(丟失)梯度時(shí)執(zhí)行反向優(yōu)化策略,然后相應(yīng)地使用梯度下降或任何其他優(yōu)化技術(shù)優(yōu)化權(quán)重以減少誤差。

深度神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)

兩層的神經(jīng)網(wǎng)絡(luò)雖然強(qiáng)大,但可能只能完成二維空間上的一些曲線擬合的事情。如果對于圖片、語音、文字序列這些復(fù)雜的事情,就需要更復(fù)雜的網(wǎng)絡(luò)來理解和處理。第一個(gè)方式是增加每一層中神經(jīng)元的數(shù)量,但這是線性的,不夠有效。另外一個(gè)方式是增加層的數(shù)量,每一層都處理不同的事情。

淺神經(jīng)網(wǎng)絡(luò)雖然具備了反向傳播機(jī)制,但是仍存在問題:

  1. 梯度越來越疏,從后向前,誤差校正信號(hào)越來越微弱
  2. 隨機(jī)初始化會(huì)導(dǎo)致訓(xùn)練過程收斂到局部最小值
  3. 需要數(shù)據(jù)帶標(biāo)簽(人工label好的數(shù)據(jù)),但是大部分?jǐn)?shù)據(jù)沒標(biāo)簽

Deep Learning的訓(xùn)練過程簡介

  1. 使用自下上升非監(jiān)督學(xué)習(xí)(就是從底層開始,一層一層的往頂層訓(xùn)練):

    采用無標(biāo)簽數(shù)據(jù)(有標(biāo)簽數(shù)據(jù)也可)分層訓(xùn)練各層參數(shù),這一步可以看作是一個(gè)無監(jiān)督訓(xùn)練過程,是和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)區(qū)別最大的部分(這個(gè)過程可以看作是feature learning過程)。
    具體的,先用無標(biāo)定數(shù)據(jù)訓(xùn)練第一層,訓(xùn)練時(shí)先學(xué)習(xí)第一層的參數(shù)(這一層可以看作是得到一個(gè)使得輸出和輸入差別最小的三層神經(jīng)網(wǎng)絡(luò)的隱層),由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠?qū)W習(xí)到數(shù)據(jù)本身的結(jié)構(gòu),從而得到比輸入更具有表示能力的特征;在學(xué)習(xí)得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓(xùn)練第n層,由此分別得到各層的參數(shù);

  2. 自頂向下的監(jiān)督學(xué)習(xí)(就是通過帶標(biāo)簽的數(shù)據(jù)去訓(xùn)練,誤差自頂向下傳輸,對網(wǎng)絡(luò)進(jìn)行微調(diào)):

    基于第一步得到的各層參數(shù)進(jìn)一步fine-tune整個(gè)多層模型的參數(shù),這一步是一個(gè)有監(jiān)督訓(xùn)練過程;第一步類似神經(jīng)網(wǎng)絡(luò)的隨機(jī)初始化初值過程,由于DL的第一步不是隨機(jī)初始化,而是通過學(xué)習(xí)輸入數(shù)據(jù)的結(jié)構(gòu)得到的,因而這個(gè)初值更接近全局最優(yōu),從而能夠取得更好的效果;所以deep learning效果好很大程度上歸功于第一步的feature learning過程。

標(biāo)簽: isp 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:2018 JVM生態(tài)系統(tǒng)報(bào)告

下一篇:深度理解HTTPS