版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淺談神經(jīng)網(wǎng)絡(luò)先從回歸(Regression)問(wèn)題說(shuō)起。我在本吧已經(jīng)看到不少人提到如果想實(shí)現(xiàn)強(qiáng)AI,就必須讓機(jī)器學(xué)會(huì)觀察并總結(jié)規(guī)律的言論。具體地說(shuō),要讓機(jī)器觀察什么是圓的,什么是方的,區(qū)分各種顏色和形狀,然后根據(jù)這些特征對(duì)某種事物進(jìn)行分類(lèi)或預(yù)測(cè)。其實(shí)這就是回歸問(wèn)題。如何解決回歸問(wèn)題?我們用眼睛看到某樣?xùn)|西,可以一下子看出它的一些基本特征。可是計(jì)算機(jī)呢?它看到的只是一堆數(shù)字而已,因此要讓機(jī)器從事物的特征中找到規(guī)律,其實(shí)是一個(gè)如何在數(shù)字中找規(guī)律的問(wèn)題。Whatisthis?But the camera sees this:You see this:工工*方5,口fT i 4* £ L- L
2、 -* is 1111Q- ¥宣32博1博04白,1 卜, 3 1J o l m T ! 4 u 1, hr 1 i 1例:假如有一串?dāng)?shù)字,已知前六個(gè)是1、3、5、7,9,11,請(qǐng)問(wèn)第七個(gè)是幾?你一眼能看出來(lái),是13。對(duì),這串?dāng)?shù)字之間有明顯的數(shù)學(xué)規(guī)律,都是奇數(shù),而且是按順序排列的。那么這個(gè)呢?前六個(gè)是0.14、0.57、1.29、2.29、3.57、5.14,請(qǐng)問(wèn)第七個(gè)是幾?這個(gè)就不那么容易看出來(lái)了吧!我們把這幾個(gè)數(shù)字在坐標(biāo)軸上標(biāo)識(shí)一下,可以看到如下圖形:用曲線連接這幾個(gè)點(diǎn),延著曲線的走勢(shì),可以推算出第七個(gè)數(shù)字7。由此可見(jiàn),回歸問(wèn)題其實(shí)是個(gè)曲線擬合(CurveFitting)問(wèn)題。那
3、么究竟該如何擬合?機(jī)器不可能像你一樣,憑感覺(jué)隨手畫(huà)一下就擬合了,它必須要通過(guò)某種算法才行。假設(shè)有一堆按一定規(guī)律分布的樣本點(diǎn),下面我以擬合直線為例,說(shuō)說(shuō)這種算法的原理。其實(shí)很簡(jiǎn)單,先隨意畫(huà)一條直線,然后不斷旋轉(zhuǎn)它。每轉(zhuǎn)一下,就分別計(jì)算一下每個(gè)樣本點(diǎn)和直線上對(duì)應(yīng)點(diǎn)的距離(誤差),求出所有點(diǎn)的誤差之和。這樣不斷旋轉(zhuǎn),當(dāng)誤差之和達(dá)到最小時(shí),停止旋轉(zhuǎn)。說(shuō)得再?gòu)?fù)雜點(diǎn),在旋轉(zhuǎn)的過(guò)程中,還要不斷平移這條直線,這樣不斷調(diào)整,直到誤差最小時(shí)為止。這種方法就是著名的梯度下降法(GradientDescent)。為什么是梯度下降呢?在旋轉(zhuǎn)的過(guò)程中,當(dāng)誤差越來(lái)越小時(shí),旋轉(zhuǎn)或移動(dòng)的量也跟著逐漸變小,當(dāng)誤差小于某個(gè)很小的數(shù)
4、,例如0.0001時(shí),我們就可以收工(收斂,Converge)了。啰嗦一句,如果隨便轉(zhuǎn),轉(zhuǎn)過(guò)頭了再往回轉(zhuǎn),那就不是梯度下降法。我們知道,直線的公式是y=kx+b,k代表斜率,b代表偏移值(y軸上的截距)。也就是說(shuō),k可以控制直線的旋轉(zhuǎn)角度,b可以控制直線的移動(dòng)。強(qiáng)調(diào)一下,梯度下降法的實(shí)質(zhì)是不斷的修改k、b這兩個(gè)參數(shù)值,使最終的誤差達(dá)到最小。求誤差時(shí)使用累加(直線點(diǎn)-樣本點(diǎn)42,這樣比直接求差距累加(直線點(diǎn)-樣本點(diǎn))的效果要好。這種利用最小化誤差的平方和來(lái)解決回歸問(wèn)題的方法叫最小二乘法(LeastSquareMethod)。-直線點(diǎn)樣本點(diǎn)問(wèn)題到此使似乎就已經(jīng)解決了,可是我們需要一種適應(yīng)于各種曲線
5、擬合的方法,所以還需要繼續(xù)深入研究。我們根據(jù)擬合直線不斷旋轉(zhuǎn)的角度(斜率)和擬合的誤差畫(huà)一條函數(shù)曲線,如圖:退差二累加直線點(diǎn)-樣本點(diǎn)爐10夏小值/0.20.2 0.4 0.6 0.S從圖中可以看出,誤差的函數(shù)曲線是個(gè)二次曲線,凸函數(shù)(下凸,Convex),像個(gè)碗的形狀,最小值位于碗的最下端。如果在曲線的最底端畫(huà)一條切線,那么這條切線一定是水平的,在圖中可以把橫坐標(biāo)軸看成是這條切線。如果能求出曲線上每個(gè)點(diǎn)的切線,就能得到切線位于水平狀態(tài)時(shí),即切線斜率等于0時(shí)的坐標(biāo)值,這個(gè)坐標(biāo)值就是我們要求的誤差最小值和最二|終的擬合直線的最終斜率。這樣,梯度下降的問(wèn)題集中到了切線的旋轉(zhuǎn)上。切線旋轉(zhuǎn)至水平時(shí),切線
6、斜率=0,誤差降至最小值。,加大學(xué)習(xí)率會(huì)加快擬合速度,但是如果調(diào)得太大會(huì)導(dǎo)致切線旋轉(zhuǎn)過(guò)度而無(wú)法收斂。注意:對(duì)于凹凸不平的誤差函數(shù)曲線,梯度下降時(shí)有可能陷入局部最優(yōu)解。下圖的曲線中有兩個(gè)坑,切線有可能在第一個(gè)坑的最底部趨于水平。微分就是專(zhuān)門(mén)求曲線切線的工具,求出的切線斜率叫做導(dǎo)數(shù)(Derivative),用dy/dx或f(x)表示。擴(kuò)展到多變量的應(yīng)用,如果要同時(shí)求多個(gè)曲線的切線,那么其中某個(gè)切線的斜率就叫偏導(dǎo)數(shù)(PartialDerivative),用?y/?x表示,?讀偏(partial)?!庇捎趯?shí)際應(yīng)用中,我們一般都是對(duì)多變量進(jìn)行處理,我在后面提到的導(dǎo)數(shù)也都是指偏導(dǎo)數(shù)。以上是線性回歸(Lin
7、earRegression)的基本內(nèi)容,以此方法為基礎(chǔ),把直線公式改為曲線公式,還可以擴(kuò)展出二次回歸、三次回歸、多項(xiàng)式回歸等多種曲線回歸。下圖是Excel的回歸分析功能。在多數(shù)情況下,曲線回歸會(huì)比直線回歸更精確,但它也增加了擬合的復(fù)雜程度。3025式000 15DCOI -:«9000直線回歸曲線回歸直線方程y=kx+b改為二次曲線方程y=axA2+bx+c時(shí),參數(shù)(Parameter)由2個(gè)(分別是k、b)變?yōu)?個(gè)(分別是a、b、c),特征(Feature)由1個(gè)(x)變?yōu)?個(gè)僅人2和x)。三次曲線和復(fù)雜的多項(xiàng)式回歸會(huì)增加更多的參數(shù)和特征。前面講的是總結(jié)一串?dāng)?shù)字的規(guī)律,現(xiàn)實(shí)生活中我
8、們往往要根據(jù)多個(gè)特征(多串?dāng)?shù)字)來(lái)分析一件事情,每個(gè)原始特征我們都看作是一個(gè)維度(Dimension)。例如一個(gè)學(xué)生的學(xué)習(xí)成績(jī)好壞要根據(jù)語(yǔ)文、數(shù)學(xué)、英語(yǔ)等多門(mén)課程的分?jǐn)?shù)來(lái)綜合判斷,這里每門(mén)課程都是一個(gè)維度。當(dāng)使用二次曲線和多變量(多維)擬合的情況下,特征的數(shù)量會(huì)劇增,特征數(shù)=維度人2/2這個(gè)公式可以大概計(jì)算出特征增加的情況,例如一個(gè)100維的數(shù)據(jù),二次多項(xiàng)式擬合后,特征會(huì)增二|力口至U100*100/2=5000個(gè)。卜面是一張50*50像素的灰度圖片,如果用二次多項(xiàng)式擬合的話,它有多少個(gè)特征呢?大約有3百萬(wàn)!它的維度是50*50=2500,特征數(shù)=2500*2500/2=3,125,000。如
9、果是彩色圖片,維度會(huì)增加到原來(lái)的3倍,那么特征數(shù)將增加到接近3千萬(wàn)了!50x50pixelimages-*2500pixels在(7500ifRGB)rXO*”pixel1mtensityp伙包2int史rity卜pixel2500I亡intensityQuadraticfeatures.0x):3millionfeatures這么小的一張圖片,就有這么巨大的特征量,可以想像一下我們的數(shù)碼相機(jī)拍下來(lái)的照片會(huì)有多大的特征量!而我們要做的是從十萬(wàn)乃至億萬(wàn)張這樣的圖片中找規(guī)律,這可能嗎?很顯然,前面的那些回歸方法已經(jīng)不夠用了,我們急需找到一種數(shù)學(xué)模型,能夠在此基礎(chǔ)上不斷減少特征,降低維度。于是,人工
10、神經(jīng)網(wǎng)絡(luò)(ANN,ArtificialNeuralNetwork)”就在這樣苛刻的條件下粉墨登場(chǎng)了,神經(jīng)科學(xué)的研究成果為機(jī)器學(xué)習(xí)領(lǐng)域開(kāi)辟了廣闊的道路。神經(jīng)元有一種假說(shuō):智能來(lái)源于單一的算法(OneLearningAlgorithm):如果這一假說(shuō)成立,那么利用單一的算法(神經(jīng)網(wǎng)絡(luò))處理世界上千變?nèi)f化的問(wèn)題就成為可能。我們不必對(duì)萬(wàn)事萬(wàn)物進(jìn)行編程,只需采用以不變應(yīng)萬(wàn)變的策略即可。有越來(lái)越多的證據(jù)證明這種假說(shuō),例如人類(lèi)大腦發(fā)育初期,每一部分的職責(zé)分工是不確定的,也就是說(shuō),人腦中負(fù)責(zé)處理聲音的部分其實(shí)也可以處理視覺(jué)影像。SensorrepresentationsinthebrainSeemg with
11、 your tongueHuman echolocation (sonar)belt: Direction senseInipianting a 3rd eye卜圖是單個(gè)神經(jīng)元(Neuron),或者說(shuō)一個(gè)腦細(xì)胞的生理結(jié)構(gòu):output卜面是單個(gè)神經(jīng)元的數(shù)學(xué)模型,可以看出它是生理結(jié)構(gòu)的簡(jiǎn)化版,模仿的還挺像:解釋一下:+1代表偏移值(偏置項(xiàng),BiasUnits);X1,X2,X2代表初始特征;w0,w1,w2,w3代表權(quán)重(Weight),即參數(shù),是特征的縮放倍數(shù);特征經(jīng)過(guò)縮放和偏移后全部累加起來(lái),此后還要經(jīng)過(guò)一次激活運(yùn)算然后再輸出。激活函數(shù)有很多種,后面將會(huì)詳細(xì)說(shuō)明。設(shè)工XI-10,X2-30,
12、X3-a;w0-2,wl-1,w2-0.5fw3-6x«+1*wO+XI*wl*X2*+X3*w3-2+10*(-1)+30*0.5+8*6=55舉例說(shuō)明:X1*w1+X2*w2+.+Xn*wn這種計(jì)算方法稱(chēng)為加權(quán)求和(WeightedSum)法,此方法在線性蛻2茶崎代數(shù)里極為常用。加權(quán)求和的標(biāo)準(zhǔn)數(shù)學(xué)符號(hào)是,一不過(guò)為了簡(jiǎn)化,我在教程里使用女巫布萊爾的符號(hào)表示,剛好是一個(gè)加號(hào)和一個(gè)乘號(hào)的組合。這個(gè)數(shù)學(xué)模型有什么意義呢?下面我對(duì)照前面那個(gè)y=kx+b直線擬合的例子來(lái)說(shuō)明一下。這時(shí)我們把激活函數(shù)改為Purelin(45度直線),Purelin就是y=x,代表保持原來(lái)的值不變。這樣輸出值就成
13、了Y直線點(diǎn)=b+X直線點(diǎn)*k,即y=kx+bo看到了吧,只是換了個(gè)馬甲而已,還認(rèn)的出來(lái)嗎?下一步,對(duì)于每個(gè)點(diǎn)都進(jìn)行這種運(yùn)算,利用Y直線點(diǎn)和Y樣本點(diǎn)計(jì)算誤差,把誤差累加起來(lái),不斷地更新b、k的值,由此不斷地移動(dòng)和旋轉(zhuǎn)直線,直到誤差變得很小時(shí)停?。ㄊ諗浚?。這個(gè)過(guò)程完全就是前面講過(guò)的梯度下降的線性回歸。一般直線擬合的精確度要比曲線差很多,那么使用神經(jīng)網(wǎng)絡(luò)我們將如何使用曲線擬合?答案是使用非線性的激活函數(shù)即可,最常見(jiàn)的激活函數(shù)是Sigmoid(S形曲線),Sigmoid有時(shí)也稱(chēng)為邏輯回歸(LogisticRegression),簡(jiǎn)稱(chēng)logsig。logsig曲線的公式如下:y-logsig(x)=還有
14、一種S形曲線也很常見(jiàn)到,叫雙曲正切函數(shù)(tanh),或稱(chēng)tansig,可以替代logsig。y = tansig (x)=下面是它們的函數(shù)圖形,從圖中可以看出logsig的數(shù)值范圍是01,而tansig的數(shù)值范圍是-11。自然常數(shù)e公式中的e叫自然常數(shù),也叫歐拉數(shù),e=2.71828。e是個(gè)很神秘的數(shù)字,它是自然律的精髓,其中暗藏著自然增長(zhǎng)的奧秘,它的圖形表達(dá)是旋渦形的螺線。融入了e的螺旋線,在不斷循環(huán)縮放的過(guò)程中,可以完全保持它原有的彎曲度不變,就像一個(gè)無(wú)底的黑洞,吸進(jìn)再多的東西也可以保持原來(lái)的形狀。這一點(diǎn)至關(guān)重要!它可以讓我們的數(shù)據(jù)在經(jīng)歷了多重的Sigmoid變換后仍維持原先的比例關(guān)系。e
15、是怎么來(lái)的?e=1+1/1!+1/2!+1/3!+1/4!+1/5!+1/6!+1/7!+.=1+1+1/2+1/6+1/24+1/120+.2.71828表階乘,3!=1*2*3=6)再舉個(gè)通俗點(diǎn)的例子:從前有個(gè)財(cái)主,他特別貪財(cái),喜歡放債。放出去的債年利率為100%,也就是說(shuō)借1塊錢(qián),一年后要還給他2塊錢(qián)。有一天,他想了個(gè)壞主意,要一年算兩次利一|息,上半年50%,下半年50%,這樣上半年就有1塊5了,下半年按1塊5的50%來(lái)算,就有1.5/2=0.75元,加起來(lái)一年是:上半年1.5+下半年0.75=2.25元。用公式描述,就是(1+50%)(1+50%)=(1+1/2)A2=2.25元???/p>
16、是他又想,如果按季度算,一年算4次,那豈不是更賺?那就是(1+1/4)人4=2.44141,果然更多了。他很高興,于是又想,那干脆每天都算_吧,這樣一年下來(lái)就是(1+1/365)人365=2.71457。然后他還想每秒都算,結(jié)果他的管家把他拉住了,說(shuō)要再算下去別人都會(huì)瘋掉了。不過(guò)財(cái)主還是不死心,算了很多年終于算出來(lái)了,當(dāng)x趨于無(wú)限大的時(shí)候,e=(1+1/x)Ax2.71828,結(jié)果他成了數(shù)學(xué)家。e在微積分領(lǐng)域非常重要,eAx的導(dǎo)數(shù)依然是eAx,自己的導(dǎo)數(shù)恰好是它自己,這種巧合在實(shí)數(shù)范圍內(nèi)絕無(wú)僅有。-,X-指數(shù)(ffiipOIlHlt)幕(pcww)1/腐藪圣壬/I自然對(duì)數(shù)I其數(shù)QE數(shù))lora
17、ndmi':對(duì)數(shù)。opiithm)=log!(j)=ln(y)一些不同的稱(chēng)呼:ex=eAx=exp(x)-power(e,x)=paw(e,x)=u的*次方=0的乂次寡=其個(gè)白相乘二自然指數(shù)二以e為底的指數(shù)函數(shù)二一的指數(shù)函數(shù)InX)工口xlog(x)lage(x)Lagx)-X是B的幾次方?=自然對(duì)數(shù)-以行為底的乂的對(duì)數(shù)-巳的對(duì)數(shù)函數(shù)eAx和eA-x的圖形是對(duì)稱(chēng)的;ln(x)是eAx的逆函數(shù),它們呈45度對(duì)稱(chēng)。e1kiix)神經(jīng)網(wǎng)絡(luò)好了,前面花了不少篇幅來(lái)介紹激活函數(shù)中那個(gè)暗藏玄機(jī)的e,下面可以正式介紹神經(jīng)元的網(wǎng)絡(luò)形式了。F圖是幾種比較常見(jiàn)的網(wǎng)絡(luò)形式:典型的三層網(wǎng)絡(luò)三層網(wǎng)絡(luò),輸出層有兩
18、個(gè)節(jié)點(diǎn)輸入層 陷藏層輸出層 輸入層 隱搬二 輸出層四層網(wǎng)絡(luò),包含兩個(gè)隱藏輸入層 隱氟片 陷藏層 輸出層- 左邊藍(lán)色的圓圈叫輸入層”,中間橙色的不管有多少層都叫隱藏層:右邊綠色的是輸出層”。- 每個(gè)圓圈,都代表一個(gè)神經(jīng)元,也叫節(jié)點(diǎn)(Node)。- 輸出層可以有多個(gè)節(jié)點(diǎn),多節(jié)點(diǎn)輸出常常用于分類(lèi)問(wèn)題。- 理論證明,任何多層網(wǎng)絡(luò)可以用三層網(wǎng)絡(luò)近似地表示。- 一般憑經(jīng)驗(yàn)來(lái)確定隱藏層到底應(yīng)該有多少個(gè)節(jié)點(diǎn),在測(cè)試的過(guò)程中也可以不斷調(diào)整節(jié)點(diǎn)數(shù)以取得最佳效果。計(jì)算方法:輸入層 除襦層 輸出層輸出值A(chǔ)和樣本值出校計(jì)菖誤差- 雖然圖中未標(biāo)識(shí),但必須注意每一個(gè)箭頭指向的連線上,都要有一個(gè)權(quán)重(縮放)值。- 輸入層的每
19、個(gè)節(jié)點(diǎn),都要與的隱藏層每個(gè)節(jié)點(diǎn)做點(diǎn)對(duì)點(diǎn)的計(jì)算,計(jì)算的方法是加權(quán)求和+激活,前面已經(jīng)介紹過(guò)了。(圖中的紅色箭頭指示出某個(gè)節(jié)點(diǎn)的運(yùn)算關(guān)系)- 利用隱藏層計(jì)算出的每個(gè)值,再用相同的方法,和輸出層進(jìn)行計(jì)算。31.- 隱藏層用都是用Sigmoid作激活函數(shù),而輸出層用的是Purelin。這是因?yàn)镻urelin可以保持之前任意范圍的數(shù)值縮放,便于和樣本值作比較,而Sigmoid的數(shù)值范圍只能在01之間。- 起初輸入層的數(shù)值通過(guò)網(wǎng)絡(luò)計(jì)算分別傳播到隱藏層,再以相同的方式傳播到輸出層,最終的輸出值和樣本值作比較,計(jì)算出誤差,這個(gè)過(guò)程叫前向傳播(ForwardPropagation)。前面講過(guò),使用梯度下降的方法
20、,要不斷白修改k、b兩個(gè)參數(shù)值,使最終的誤差達(dá)到最小。神經(jīng)網(wǎng)絡(luò)可不只k、b兩個(gè)參數(shù),事實(shí)上,網(wǎng)絡(luò)的每條連接線上都有一個(gè)權(quán)重參數(shù),如何有效的修改這些參數(shù),使誤差最小化,成為一個(gè)很棘手的問(wèn)題。從人工神經(jīng)網(wǎng)絡(luò)誕生的60年代,人們就一直在不斷嘗試各種方法來(lái)解決這個(gè)問(wèn)題。直到80年代,誤差反向傳播算法(BP算法)的提出,才提供了真正有效的解決方案,使神經(jīng)網(wǎng)絡(luò)的研究絕處逢生。Kutne!hart,McClellimd于1985年提出了BP網(wǎng)絡(luò)的誤差反向后傳BP(HackPropaRation)學(xué)二J打法BP算法是一種計(jì)算偏導(dǎo)數(shù)的有效方法,它的基本原理是:利用前向傳播最后輸出的結(jié)果來(lái)計(jì)算誤差的偏導(dǎo)數(shù),再用這
21、個(gè)偏導(dǎo)數(shù)和前面的隱藏層進(jìn)行加權(quán)求和,如此一層一層的向后傳下去,直到輸入層(不計(jì)算車(chē)入層),最后利用每個(gè)節(jié)點(diǎn)求出的偏導(dǎo)數(shù)來(lái)更新權(quán)重。為了便于理解,后面我一律用殘差(errorterm)”這個(gè)詞來(lái)表示誤差的偏導(dǎo)數(shù)輸出層一隱藏層:殘差=-(輸出值-樣本值)*激活函數(shù)的導(dǎo)數(shù)隱藏層一隱藏層:殘差=(右層每個(gè)節(jié)點(diǎn)的殘差加權(quán)求和)*激活函數(shù)的導(dǎo)數(shù)如果輸出層用Purelin作激活函數(shù),Purelin的導(dǎo)數(shù)是1,輸出層一隱藏層:殘差=-(輸出值-樣本值)如果用Sigmoid(logsig)作激活函數(shù),那么:Sigmoid導(dǎo)數(shù)=Sigmoid*(1-Sigmoid)輸出層一隱藏層:殘差=-(Sigmoid輸出值-
22、樣本值)*Sigmoid*(1-Sigmoid)=-(輸出值-樣本值)*輸出值*(1-輸出值)隱藏層一隱藏層:殘差=(右層每個(gè)節(jié)點(diǎn)的殘差加權(quán)求和廣當(dāng)前節(jié)點(diǎn)的Sigmoid*(1-當(dāng)前節(jié)點(diǎn)的Sigmoid)如果用tansig作激活函數(shù),那么:tansig導(dǎo)數(shù)=1-tansigA2卒逗等地導(dǎo)數(shù)殘差全部計(jì)算好后,就可以更新權(quán)重了:輸入層:權(quán)重增加=當(dāng)前節(jié)點(diǎn)的Sigmoid*右層對(duì)應(yīng)節(jié)點(diǎn)的殘差*學(xué)習(xí)率隱藏層:權(quán)重增加=輸入值*右層對(duì)應(yīng)節(jié)點(diǎn)的殘差*學(xué)習(xí)率偏移值的權(quán)重增加=右層對(duì)應(yīng)節(jié)點(diǎn)的殘差學(xué)習(xí)率學(xué)習(xí)率前面介紹過(guò),學(xué)習(xí)率是一個(gè)預(yù)先設(shè)置好的參數(shù),用于控制每次更新的幅度。此后,對(duì)全部數(shù)據(jù)都反復(fù)進(jìn)行這樣的計(jì)算,
23、直到輸出的誤差達(dá)到一個(gè)很小的值為止。以上介紹的是目前最常見(jiàn)的神經(jīng)網(wǎng)絡(luò)類(lèi)型,稱(chēng)為前饋神經(jīng)網(wǎng)絡(luò)(FeedForwardNeuralNetwork),由于它一般是要向后傳遞誤差的,所以也叫BP神經(jīng)網(wǎng)絡(luò)(BackPropagationNeuralNetwork)。BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn)和局限:- BP神經(jīng)網(wǎng)絡(luò)可以用作分類(lèi)、聚類(lèi)、預(yù)測(cè)等。需要有一定量的歷史數(shù)據(jù),通過(guò)歷史數(shù)據(jù)的訓(xùn)練,網(wǎng)絡(luò)可以學(xué)習(xí)到數(shù)據(jù)中隱含的知識(shí)。在你的問(wèn)題中,首先要找到某些問(wèn)題的一些特征,以及對(duì)應(yīng)的評(píng)價(jià)數(shù)據(jù),用這些數(shù)據(jù)來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。- BP神經(jīng)網(wǎng)絡(luò)主要是在實(shí)踐的基礎(chǔ)上逐步完善起來(lái)的系統(tǒng),并不完全是建立在仿生學(xué)上的。從這個(gè)角度講,實(shí)用性&g
24、t;生理相似性。- BP神經(jīng)網(wǎng)絡(luò)中的某些算法,例如如何選擇初始值、如何確定隱藏層的節(jié)點(diǎn)個(gè)數(shù)、使用何種激活函數(shù)等問(wèn)題,并沒(méi)有確鑿的理論依據(jù),只有一些根據(jù)實(shí)踐經(jīng)驗(yàn)總結(jié)出的有效方法或經(jīng)驗(yàn)公式。- BP神經(jīng)網(wǎng)絡(luò)雖然是一種非常有效的計(jì)算方法,但它也以計(jì)算超復(fù)雜、計(jì)算速度超慢、容易陷入局部最優(yōu)解等多項(xiàng)弱點(diǎn)著稱(chēng),因此人們提出了大量有效的改進(jìn)方案,一些新的神經(jīng)網(wǎng)絡(luò)形式也層出不窮。文字的公式看上去有點(diǎn)繞,下面我發(fā)一個(gè)詳細(xì)的計(jì)算過(guò)程圖。圖例:-0匕明證敷活函數(shù)殛差(誤差偏導(dǎo)數(shù)1(.?加權(quán)求和調(diào)維集的數(shù)據(jù),首先洌第一行進(jìn)行處理XIX2樣本信0.弓-O.n0.10,3-0.50,05巧.占rffZ'I0
25、87;3。.二0.1<0,20.12為了適應(yīng)輸出層的工gmi技換,XIXW的數(shù)值范圍規(guī)定在至1之間1.每個(gè)節(jié)點(diǎn)之間的初始權(quán)重一俄是隨機(jī)生成的輸入層隱藏層輸出層2.對(duì)給入層節(jié)點(diǎn)進(jìn)行加權(quán)求和計(jì)苴0.4x3.1+(-0.7)x(-0.2)=0.180.4*3.4+(-0.7)«(0.2)=0.023.執(zhí)行Sigmoid遨活輸入層隱藏層輸出層logsig(0.18)-彳七。謔=0544lcgsig(0.02)=-,°-=).3031+±應(yīng)°"4 .用相同的方法計(jì)苴出境出層的值02*'0.505/輸入層隱藏層輸出層0.544x0.2+0.5
26、05*(-0.5)=-0.14310(.0.143)=-0.4645 .計(jì)苴誤差誤差接近0時(shí)收斂誤差=0.464-0.12=0.132(誤差<0.0001,可以收斂)輸入層隱藏層輸出層7 .計(jì)苴給出層的殘差464 o O.1(W本值)輸入層隱藏層輸出層殘差=-0.464-0.1x0.464x.1-0.464-0.098 .軸出層節(jié)點(diǎn)的殘差加權(quán)求和輸入層隱藏層輸出層-0.09*0.2=-u.018(輸出層只有一個(gè)節(jié)點(diǎn),不用求和)-0.09*0.5=-0.0459 ,繼續(xù)求隱茂層的殘差輸入層隱藏層輸出層殘差1=(-0018戶(hù)(0544)*(1-0.544)=-0.004殘差2«0.
27、045、0505,(1-0.505)=。.011M.讀610.開(kāi)始淮備更新第一層權(quán)重,設(shè)學(xué)習(xí)率為0.60.5050.004620-011輸入層隱藏層輸出層0.4*(-0.004)x0.6=-0.0016*0.6=-0.000960.4»0.011*0.6=0.0044«0.6=0.00264-0.7>(-0.004)«0.=0.0028x0.6=0.0016S-0.710.011m0.6=-0.0077m0.6=-0.004621L更新第一層權(quán)重-0.19832)069 如7).195 弗OW44 A輸入層隱薄層 輸出層0.1-040(1096=。.匚,安:
28、金0.4+0.002«4= 0.4C<640 T 2+0 * OOlfifl-0 + 19®3 20.2-0.00462= LI” 究12.使用腦面兩步的方法,計(jì)算出后兩層的權(quán)重/.注意這里是心料酬檄活值(04W«5MMo£<020.r0624-0.-1-4).19533-QJOJ-d5輸入層隱散層輸出層0.S44*(-0409)xfl.fi0,04S96«0-fi-0*0293760.505"(-0.09)«0.t0.04S4S«0.=-0,027270.2-0402937=口.1"工3-0
29、,5-0,02727352)27利用更新之后的權(quán)重.對(duì)調(diào)族集的每一條熟需反復(fù)進(jìn)行前面112歲的計(jì)其,直到最后收斂這里介紹的是計(jì)算完一條記錄,就馬上更新權(quán)重,以后每計(jì)算完一條都即時(shí)更新權(quán)重。實(shí)際上批量更新的效果會(huì)更好,方法是在不更新權(quán)重的情況下,把記錄集的每條記錄都算過(guò)一遍,把要更新的增值全部累加起來(lái)求平均值,然后利用這個(gè)平均值來(lái)更新一次權(quán)重,然后利用更新后的權(quán)重進(jìn)行下一輪的計(jì)算,這種方法叫批量梯度下降(BatchGradientDescent)。例1:我們都知道,面積=長(zhǎng)*寬,假如我們有一組數(shù)測(cè)量據(jù)如下:Matlab中輸入以下的代碼,按回車(chē)即可執(zhí)行)(在Performance is 2 120
30、04e-026 Goal is 0W10 "1G-202344 EpochsXI長(zhǎng)X2;寬樣本值面積25103618122241692138129647267963我們利用這組數(shù)據(jù)來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。p=25;36;122;16;92;812;47;79'%特征數(shù)據(jù)X1,X2t=101824618962863;%樣本值net=newff(p,t,20);%創(chuàng)建一個(gè)BP神經(jīng)網(wǎng)絡(luò)ff=FeedForwardnet=train(net,p,t);%用p,t數(shù)據(jù)來(lái)訓(xùn)練這個(gè)網(wǎng)絡(luò)出現(xiàn)如下的信息,根據(jù)藍(lán)線的顯示,可以看出最后收斂時(shí),誤差已小于10A-20。nStopTraining你也許會(huì)問(wèn),
31、計(jì)算機(jī)難道這樣就能學(xué)會(huì)乘法規(guī)則嗎?不用背乘法口訣表了?先隨便選幾個(gè)數(shù)字,試試看:s=37;69;45;57'%準(zhǔn)備一組新的數(shù)據(jù)用于測(cè)試y=sim(net,s)%模擬一下,看看效果%結(jié)果是:25.102961.588229.584837.5879看到了吧,預(yù)測(cè)結(jié)果和實(shí)際結(jié)果還是有差距的。不過(guò)從中也能看出,預(yù)測(cè)的數(shù)據(jù)不是瞎蒙的,至少還是有那么一點(diǎn)靠譜。如果訓(xùn)練集中的數(shù)據(jù)再多一些的話,預(yù)測(cè)的準(zhǔn)確率還會(huì)大幅度提長(zhǎng)寬面積預(yù)測(cè)值372125.10296954452029.sees57353"1.529你測(cè)試的結(jié)果也許和我的不同,這是因?yàn)槌跏蓟臋?quán)重參數(shù)是隨機(jī)的,可能會(huì)陷入局部最優(yōu)解,所以
32、有時(shí)預(yù)測(cè)的結(jié)果會(huì)很不理想。例2:下面測(cè)試一下擬合正弦曲線,這次我們隨機(jī)生成一些點(diǎn)來(lái)做樣本。p=rand(1,50)*7%生成1行50個(gè)07之間的隨機(jī)數(shù)t=sin(p)%計(jì)算正弦曲線s=0:0.1:7;%生成07的一組數(shù)據(jù),間隔0.1,用于模擬測(cè)試plot(p,t,'x')%畫(huà)散點(diǎn)圖net=newff(p,t,20);%創(chuàng)建神經(jīng)網(wǎng)絡(luò)net=train(net,p,t);%開(kāi)始訓(xùn)練y=sim(net,s);%模擬plot(s,y,'x')%畫(huà)散點(diǎn)圖從圖中看出,這次的預(yù)測(cè)結(jié)果顯然是不理想的,我們需要設(shè)置一些參數(shù)來(lái)調(diào)整。卜面的設(shè)置是一種標(biāo)準(zhǔn)的批量梯度下降法的配置O%創(chuàng)建
33、3層神經(jīng)網(wǎng)絡(luò)隱藏層10個(gè)節(jié)點(diǎn)->logsig,輸出層1個(gè)節(jié)點(diǎn)->purelintraingd代表梯度下降法net=newff(p,t,10,'logsig''purelin','traingd');%10不能寫(xiě)成101%設(shè)置訓(xùn)練參數(shù)net.trainparam.show=50;%顯示訓(xùn)練結(jié)果(訓(xùn)練50次顯示一次)net.trainparam.epochs=500;%總訓(xùn)練次數(shù)net.trainparam.goal=0.01;%訓(xùn)練目標(biāo):誤差<0.01net.trainParam.lr=0.01;%學(xué)習(xí)率(learningrate
34、)net=train(net,p,t);%開(kāi)始訓(xùn)練注意:newff的第三個(gè)參數(shù)10不能寫(xiě)成101,否則就是4層網(wǎng)絡(luò),兩個(gè)隱藏層,分別是10個(gè)和1個(gè)節(jié)點(diǎn)。這個(gè)很容易弄錯(cuò)。(輸出層的節(jié)點(diǎn)數(shù)程序會(huì)自動(dòng)根據(jù)t的維度自動(dòng)判斷,所以不用指定)A1。-6nStop TrainingPerformance isjO 02193f3|Goal isL目標(biāo)101O':100啰 * 30050。 Epochs400600y = sim(net, s); %模擬plot(s,y,'x')%畫(huà)散點(diǎn)圖這時(shí)的效果顯然更差了。把精度調(diào)高一點(diǎn)看看。訓(xùn)練次數(shù)加到9999,誤差<0.001;學(xué)習(xí)率調(diào)到
35、0.06,希望能加快點(diǎn)速度。%創(chuàng)建2層神經(jīng)網(wǎng)絡(luò)隱藏層10個(gè)節(jié)點(diǎn)->logsig,輸出層1個(gè)節(jié)點(diǎn)->purelintraingd代表梯度下降法net=newff(p,t,10,'logsig''purelin','traingd');%設(shè)置訓(xùn)練參數(shù)net.trainparam.show=50;%每間隔50次顯示一次訓(xùn)練結(jié)果net.trainparam.epochs=9999;%總訓(xùn)練次數(shù)net.trainparam.goal=0.001;%訓(xùn)練目標(biāo):誤差<0.001net.trainParam.lr=0.06;%學(xué)習(xí)率(learn
36、ingrate)net=train(net,p,t);%開(kāi)始訓(xùn)練10Performance is 0 000999984 Goal is 0 001-110'心 1000 2000 3000 4000 6000 6000Stop Training6613 Epochs標(biāo)準(zhǔn)的批量梯度下降法的速度確實(shí)夠慢,這次計(jì)算花了一分多鐘。y=sim(net,s);%模擬plot(s,y,'x')%畫(huà)散點(diǎn)圖效果比上次稍好一點(diǎn)。不過(guò)這條曲線顯得坑坑洼洼的很難看,這是一種過(guò)擬合(Overfitting)現(xiàn)象,與之相反的是欠擬合(Underfitting)先來(lái)解決速度問(wèn)題,把traingd改
37、為trainlm即可。trainlm使用LM算法,是介于牛頓法和梯度下降法之間的一種非線性?xún)?yōu)化方法,不但會(huì)加快訓(xùn)練速度,還會(huì)減小陷入局部最小值的可能性,是Matlab的默認(rèn)值。net=newff(p,t,10,'logsig''purelin','trainlm');.后面的代碼不變,Performanceis0.000456543,Goalis0.001101n-t1010-:10'-1(/。一123466StopTraining6Epochs這個(gè)速度比較驚嘆了,1秒鐘之內(nèi)完成,只做了6輪計(jì)算,效果也好了一些。不過(guò),LM算法也有弱點(diǎn),它
38、占用的內(nèi)存非常大,所以沒(méi)把其它算法給淘汰掉。卜面解決過(guò)擬合問(wèn)題,把隱藏層的節(jié)點(diǎn)數(shù)目設(shè)少一點(diǎn)就行了。net=newff(p,t,3,'logsig''purelin','trainlm');.后面的代碼不變這回終于達(dá)到滿(mǎn)意的效果了。(有時(shí)會(huì)出現(xiàn)局部最優(yōu)解,可以多試幾次)如果節(jié)點(diǎn)數(shù)目太少,會(huì)出現(xiàn)欠擬合的情況。關(guān)于隱藏層的節(jié)點(diǎn)個(gè)數(shù),一般是要憑感覺(jué)去調(diào)的。如果訓(xùn)練集的維數(shù)比較多,調(diào)節(jié)起來(lái)比較耗時(shí)間,這時(shí)可以根據(jù)經(jīng)驗(yàn)公式上下浮動(dòng)地去調(diào)整。下面給出幾個(gè)經(jīng)驗(yàn)公式供參考:nh=yjn+m+a值為工之間的常數(shù),默認(rèn)值為町g=<0.43刑荏+612;11+25
39、42+0-7771+0_35+0.51內(nèi)k=口幻n其中取為障藏層節(jié)點(diǎn)數(shù),口為輸入層節(jié)點(diǎn)數(shù),m為輸出層節(jié)點(diǎn)數(shù)創(chuàng)建神經(jīng)網(wǎng)絡(luò)如果把輸出層改為logsig激活會(huì)是什么樣子呢?net=newff(p,t,3,'logsig''logsig');%net=train(net,p,t);%開(kāi)始訓(xùn)練y=sim(net,s);%模擬plot(s,y,'x')%畫(huà)散點(diǎn)圖可以看出,-10范圍之間的點(diǎn)都變?yōu)?了。使用logsig輸出時(shí)要想得到完整數(shù)值范圍的效果,必須先對(duì)數(shù)據(jù)進(jìn)行歸一化才行。歸一化(Normalization),也叫標(biāo)準(zhǔn)化,就是把一堆數(shù)字按比例縮放到01或
40、-11的范圍。雖然用Purelin輸出可以不必歸一化,但歸一化能在一定程度上加快收斂速度,因此被許多教程定為訓(xùn)練前的必須步驟。公式為:歸一值=(當(dāng)前值x-最小值min)/(最大值max-最小值min)如果限定了范圍,公式為:y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin;0.10.9的范圍:(0.9-0.1)*(x-min)/(max-min)*(0.9-0.1)+0.1把5,2,6,3這四個(gè)數(shù)歸一化:23456700.250.501Matlab的歸一化命令為:mapminmax注:網(wǎng)上的不少教程里用premnmx命令來(lái)歸一化,要注意Matlab版本R2007b
41、和R2008b,premnmx在處理單列數(shù)據(jù)時(shí)有bug,Matlab已給出了警告,R2009a版才修正。因此推薦使用mapminmax。mapminmax的輸入輸出值和premnmx是行列顛倒的,使用時(shí)要注意代碼中是否添加轉(zhuǎn)置符號(hào)。a=5,2,6,3;b=mapminmax(a,0,1)%歸一化到01之間%b=0.750001.00000.2500c=mapminmax(a)%歸一化到-11之間%c=0.5000-1.00001.0000-0.5000反歸一化(Denormalization)就是按歸一化時(shí)的比例還原數(shù)值。a=5,2,6,3;c,PS=mapminmax(a);%PS記錄歸一化
42、時(shí)的比例mapminmax('reverse',c,PS)%利用PS反歸一化%ans=5263神經(jīng)網(wǎng)絡(luò)白歸一化(01范圍)代碼:p=rand(1,50)*7;%特征數(shù)據(jù)t=sin(p);%樣本值s=0:0.1:7;%測(cè)試數(shù)據(jù)pn,ps=mapminmax(p,0,1);%特征數(shù)據(jù)歸一化tn,ts=mapminmax(t,0,1);%樣本值歸一化創(chuàng)建神經(jīng)網(wǎng)絡(luò)sn=mapminmax('apply',s,ps);%測(cè)試數(shù)據(jù),按ps比例縮放net=newff(pn,tn,51,'logsig''logsig');%net=train(n
43、et,pn,tn);%開(kāi)始訓(xùn)練yn=sim(net,sn);%模擬y=mapminmax('reverse',yn,ts);%按ps的比例還原plot(s,y,'x')%畫(huà)散點(diǎn)圖神經(jīng)網(wǎng)絡(luò)工具有f還有一個(gè) UI圖形操作界面,執(zhí)行 nntool就可以打開(kāi)。我覺(jué)得不如寫(xiě)代碼方 便,所以不怎么用。我提供一個(gè)相關(guān)的教程鏈接,有興趣的可以看一下:matlab神經(jīng)網(wǎng)絡(luò)工具箱創(chuàng)建神經(jīng)網(wǎng)絡(luò)關(guān)于Sigmoid的由來(lái),中文的網(wǎng)站上很少有提及的。下面簡(jiǎn)單講一下,希望能給大家拓展一下思路。PS:這里的公式我都給出了求解過(guò)程,但如今這個(gè)年頭,用手工解題的人越來(lái)越少了,般的方程用軟件來(lái)解就行
44、了。例如解Sigmoid微分方程,可以用Matlab去解:dsoke('Dx=x*(1-x)')%ans=1/(1+exp(-t)*C1)logsigSigmoid 函數(shù)(S 形函數(shù),Logistic Function) 基于生物學(xué)的神經(jīng)元激活函數(shù)是這樣的:r3一1丁 晦(點(diǎn)怖二3h) +,=e+ri > vlh5 i£ E+RI < Vth是受統(tǒng)計(jì)學(xué)模型的啟發(fā)而產(chǎn)生的激活函數(shù)。實(shí)踐證明了基于統(tǒng)計(jì)學(xué)的Sigmoid函數(shù)激活效果要比基于生物學(xué)的模型好,而且計(jì)算起來(lái)很方便,所以說(shuō)不能以機(jī)器和人的相似度為標(biāo)準(zhǔn)來(lái)判斷AI算法的好壞。Sigmoid函數(shù)原先是個(gè)描述人口增長(zhǎng)的數(shù)學(xué)模型,1838提出,給出的是導(dǎo)數(shù)形式(概率密度)。人口增長(zhǎng)規(guī)律:起初階段大致是指數(shù)增長(zhǎng);然后逐漸開(kāi)始變得飽和,增長(zhǎng)變慢;達(dá)到成熟時(shí)幾乎停止增長(zhǎng);整個(gè)過(guò)程形如一條S型曲線。最初給出的是導(dǎo)數(shù)形式P代表人口數(shù)量,t代表時(shí)間,H弋表增長(zhǎng)率,K代表承載能力等式兩邊都除以邕,成了dPP(P工二"MI?一三)把它筒化
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)中藥學(xué)(中藥資源開(kāi)發(fā))試題及答案
- 2025年高職物聯(lián)網(wǎng)工程技術(shù)(物聯(lián)網(wǎng)組網(wǎng))試題及答案
- 2025年大學(xué)天文學(xué)(宇宙學(xué))試題及答案
- 2025年高職酒店管理與數(shù)字化運(yùn)營(yíng)(餐飲運(yùn)營(yíng)管理)試題及答案
- 司年產(chǎn)9800萬(wàn)副眼鏡配件技改項(xiàng)目可行性研究報(bào)告模板-申批備案
- 2026學(xué)年上海市文來(lái)中學(xué)(高中)教師招聘?jìng)淇碱}庫(kù)及答案詳解(易錯(cuò)題)
- 2025新中產(chǎn)健康生活趨勢(shì)報(bào)告
- 2026中國(guó)科學(xué)院機(jī)關(guān)招聘應(yīng)屆畢業(yè)生5人備考題庫(kù)及一套完整答案詳解
- 2025浙江麗水市蓮都區(qū)土地和房屋征收工作指導(dǎo)中心招聘見(jiàn)習(xí)生1人備考題庫(kù)及一套參考答案詳解
- 2022-2023學(xué)年廣東深圳龍崗區(qū)九年級(jí)上學(xué)期階段性訓(xùn)練英語(yǔ)試題及答案
- 山西省臨汾市2025-2026年八年級(jí)上物理期末試卷(含答案)
- (2025年)員工安全培訓(xùn)考試試題(含答案)
- GB/T 36132-2025綠色工廠評(píng)價(jià)通則
- 2025-2026學(xué)年北師大版八年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)卷(含答案)
- 2026四川成都九聯(lián)投資集團(tuán)有限公司招聘12人筆試參考題庫(kù)及答案解析
- 【二下數(shù)學(xué)】計(jì)算每日一練60天(口算豎式脫式應(yīng)用題)
- 殘疾人服務(wù)與權(quán)益保護(hù)手冊(cè)(標(biāo)準(zhǔn)版)
- 2025年1月-12月時(shí)事政治歸納總結(jié)(備考必背)
- 2025年安徽省普通高中學(xué)業(yè)水平合格性考試英語(yǔ)試卷(含答案)
- (高清版)DG∕TJ 08-2068-2019 超高壓噴射注漿技術(shù)標(biāo)準(zhǔn)
- 運(yùn)城市大數(shù)據(jù)項(xiàng)目可研報(bào)告(參考范文)
評(píng)論
0/150
提交評(píng)論